Що таке 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
, це дійсно круто. І приємна та точна відповідь btw.
C-k C-k
якийсь вид роботи як d$ S-j
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
Він є універсальним для видалення вибраного або рядка за замовчуванням, якщо нічого не вибрано.
З огляду на запитання, ймовірно, ви також зацікавлені у тому, щоб тиражувати "ривок" Віма yy
(хоча, кажучи, у Emacs "yank" заплутано "покладений" 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
, можете скористатися наведеним нижче кодом.
Для операції "введення в рядок" (вбити / видалити) я рекомендую використовувати 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))))