Emacs에서 현재 줄을 어떻게 삭제할 수 있습니까?


122

vi와 동등한 emacs는 무엇입니까 dd? 현재 줄을 삭제하고 싶습니다. 시도 CTRL+ k하지만 그것은 단지 삭제 에서 현재의 위치.

답변:


212
C-a # Go to beginning of line
C-k # Kill line from current point

도 있습니다

C-S-backspace   # Ctrl-Shift-Backspace

어떤 원용 M-x kill-whole-line.

다른 전역 키 바인딩을 설정하려면 ~ / .emacs에 넣습니다.

(global-set-key "\C-cd" 'kill-whole-line)     # Sets `C-c d` to `M-x kill-whole-line`

여러 줄 전체를 삭제하려면 명령 앞에 숫자를 붙일 수 있습니다.

C-u 5 C-S-backspace    # deletes 5 whole lines
M-5 C-S-backspace      # deletes 5 whole lines

C-u C-S-backspace      # delete 4 whole lines. C-u without a number defaults to 4

C-u -5 C-S-backspace   # deletes previous 5 whole lines
M--5 C-S-backspace     # deletes previous 5 whole lines

때로는 C-x z도움이되는 경우도 있습니다.

C-S-backspace         # delete 1 whole line
C-x z                 # repeat last command
z                     # repeat last command again. 
                      # Press z as many times as you wish. 
                      # Any other key acts normally, and ends the repeat command.

작동합니다. 하나의 명령을 사용하여이를 수행하는 방법이 있습니까? 이렇게하려면 사용자 지정 키 바인딩을 만들어야합니까?
Manoj Govindan

14
몰랐습니다 C-x z. 정말 멋지네요. 그리고 멋지고 정확한 대답 btw.
slu

2
in vim C-k C-k처럼 작동하는 것도 d$ S-j있지만, 이것은 꽤 멋지게 앞으로 줄을 삭제할 수 있습니다.
Theo Belaire 2013

왜 공간이 C-cd없습니까?
Elliot Gorokhovsky

@ RenéG : 공백은 선택 사항입니다.
unutbu 2015 년

11

라인을 죽이고 싶지는 않지만 (OS 클립 보드와 킬 링에 넣을 것입니다) 간단히 삭제하십시오 :

(defun delete-current-line ()
  "Delete (not kill) the current line."
  (interactive)
  (save-excursion
    (delete-region
     (progn (forward-visible-line 0) (point))
     (progn (forward-visible-line 1) (point)))))

3

킬 링에 배치하지 않고 라인을 삭제하는 또 다른 방법 :

(defun delete-current-line ()
  "Deletes the current line"
  (interactive)
  (delete-region
   (line-beginning-position)
   (line-end-position)))

이것은 빈 줄의 시작 부분에 포인트를 남깁니다. 이것을 없애기 위해 (delete-blank-lines),이 예제에서와 같이 함수 끝에 다음과 같은 것을 추가 할 수 있습니다. 아마도 조금 덜 직관적 일 것입니다 :

(defun delete-current-line ()
 "Deletes the current line"
 (interactive)
 (forward-line 0)
 (delete-char (- (line-end-position) (point)))
 (delete-blank-lines))

1

아무 것도 선택하지 않고 줄의 모든 지점에서 전체 줄을 삭제 (종료)하는 가장 빠르고 간단한 방법은 다음과 같습니다.

C-w  ; kill-region

선택한 항목을 삭제하거나 아무것도 선택하지 않은 경우 기본적으로 한 줄을 삭제할 수 있습니다.

질문이 주어지면 아마도 Vim의 "yank"를 복제하는 데 관심이있을 것입니다 yy(Emacs 용어에서 "yank"는 Vim의 "put"이 혼란 스러울 수 있지만 p). 이것은:

M-w  ; kill-ring-save

훌륭하고 일치하며 기억하기 쉽습니다. Vim의 i_CTRL-W.

위의 방법 중 하나를 사용하여 킬 링에 무언가를 넣은 후에는 "yank"(붙여 넣기)를 원할 것입니다.

M-y  ; yank-pop

(CS 백 스페이스는 터미널 Emacs에서 작동하지 않을 수 있습니다.)


1

줄을 삭제하거나 접두사 인수를 호출하는 데 별도의 키가 필요하지 않습니다. 당신이 사용할 수있는 핵심-스마트 죽 라인 "라인의 끝에 죽이고 다음 호출에 전체 라인을 죽일"것이다. 그러나 당신이 delete대신 선호한다면kill 아래 코드를 사용할 수 있습니다.

point-to-string operation (kill / delete)의 경우 zop-to-char 를 사용하는 것이 좋습니다.

(defun aza-delete-line ()
  "Delete from current position to end of line without pushing to `kill-ring'."
  (interactive)
  (delete-region (point) (line-end-position)))

(defun aza-delete-whole-line ()
  "Delete whole line without pushing to kill-ring."
  (interactive)
  (delete-region (line-beginning-position) (line-end-position)))

(defun crux-smart-delete-line ()
  "Kill to the end of the line and kill whole line on the next call."
  (interactive)
  (let ((orig-point (point)))
    (move-end-of-line 1)
    (if (= orig-point (point))
        (aza-delete-whole-line)
      (goto-char orig-point)
      (aza-delete-line))))

출처

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.