Что Emacs эквивалентно vi dd? Я хочу удалить текущую строку. Пробовал CTRL+, kно он удаляет только с текущей позиции.
Что Emacs эквивалентно vi dd? Я хочу удалить текущую строку. Пробовал CTRL+, kно он удаляет только с текущей позиции.
Ответы:
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.
C-x z
, это действительно круто. И, кстати, хороший и точный ответ.
C-k C-k
что-то вроде d$ S-j
in vim, но это может довольно хорошо удалять строки вперед.
C-cd
?
Если вы не хотите уничтожать строку (которая помещает ее в буфер обмена ОС и убивает кольцо), а просто удалите ее:
(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)))))
Другой способ удалить строку, не помещая ее в список уничтожений:
(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))
Самый быстрый / простой способ удалить (уничтожить) всю строку из любой точки строки, ничего не выбирая:
C-w ; kill-region
Он универсален для удаления всего, что выбрано, или строки по умолчанию, если ничего не выбрано.
Учитывая вопрос, вы, вероятно, также заинтересованы в воспроизведении «yank» Vim yy
(хотя на языке Emacs «yank» сбивает с толку «put» Vim p
). Это:
M-w ; kill-ring-save
Красиво, гармонично и довольно легко запоминается. Даже немного похож на Vim's i_CTRL-W
.
После того, как вы поместили что-то в список убийств одним из вышеперечисленных способов, вы, вероятно, захотите «выдернуть» (вставить) это:
M-y ; yank-pop
(Обратите внимание, что CS-backspace может не работать в терминале Emacs.)
Вместо того, чтобы иметь отдельный ключ для удаления строки или вызывать префикс-аргумент. Вы можете использовать crux-smart-kill-line,
который «убьет до конца строки и убьет всю строку при следующем вызове». Но если вы предпочитаете delete
вместо kill
, вы можете использовать приведенный ниже код.
Для операции «точка-строка» (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))))