Как я могу удалить текущую строку в Emacs? - PullRequest
114 голосов
/ 18 октября 2010

Что такое emacs-эквивалент vi's dd ? Я хочу удалить текущую строку. Пробовал CTRL + k , но удаляет только из текущей позиции.

Ответы [ 5 ]

200 голосов
/ 18 октября 2010
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.
10 голосов
/ 01 марта 2016

В случае, если вы не хотите уничтожать строку (которая поместила бы ее в буфер обмена ОС и уничтожить кольцо), а просто удалили ее:

(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)))))
1 голос
/ 04 апреля 2019

Вместо того, чтобы иметь отдельный ключ для удаления строки или необходимости вызывать Префикс-аргумент. Вы можете использовать crux-smart-kill-line который "убьет до конца строки и уничтожит всю строку на следующей call ". Но если вы предпочитаете delete вместо kill, вы можете использовать код ниже.

Для операции точка-строка (уничтожение / удаление) я рекомендую использовать 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))))

источник

1 голос
/ 10 февраля 2019

Другой способ удалить строку, не помещая ее в список уничтожений:

(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 голос
/ 07 декабря 2016

Самый быстрый / самый простой способ удалить (убить) полную строку из любой точки линии, не выбирая ничего, это:

C-w  ; kill-region

Он универсален в удалении того, что выбрано, илистрока по умолчанию, если ничего не выбрано.

Учитывая вопрос, вы, вероятно, также заинтересованы в репликации Vim "yank", yy (хотя на языке Emacs "yank" - это путанный "Vim" Vim,p).Это:

M-w  ; kill-ring-save

Красиво и конгруэнтно, и довольно легко запомнить.Даже немного похожий на i_CTRL-W.

Вима. После того, как вы положили что-то в кольцо уничтожения с помощью любого из вышеперечисленных, вы, вероятно, захотите «дернуть» (вставить) это:

M-y  ; yank-pop

(Обратите внимание, что CS-backspace может не работать в терминале Emacs.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...