Jaki jest odpowiednik vi w emacsie dd? Chcę usunąć bieżącą linię. Wypróbowano CTRL+, kale usuwa tylko z bieżącej pozycji.
Jaki jest odpowiednik vi w emacsie dd? Chcę usunąć bieżącą linię. Wypróbowano CTRL+, kale usuwa tylko z bieżącej pozycji.
Odpowiedzi:
C-a # Go to beginning of line
C-k # Kill line from current point
Jest również
C-S-backspace # Ctrl-Shift-Backspace
który wywołuje M-x kill-whole-line
.
Jeśli chcesz ustawić inne globalne powiązanie klucza, umieść to w ~ / .emacs:
(global-set-key "\C-cd" 'kill-whole-line) # Sets `C-c d` to `M-x kill-whole-line`
Jeśli chcesz usunąć kilka całych linii, możesz poprzedzić polecenie numerem:
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
Czasami C-x z
pomocny jest również :
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
, to naprawdę fajne. A przy okazji miła i precyzyjna odpowiedź.
C-k C-k
co działa jak d$ S-j
w vimie, ale może całkiem ładnie usunąć linie do przodu.
C-cd
?
Jeśli nie chcesz zabijać linii (co spowodowałoby umieszczenie jej w schowku systemu operacyjnego i zabicie pierścienia), ale po prostu ją usuń:
(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)))))
Inna metoda usunięcia linii bez umieszczania jej w pierścieniu zabijania:
(defun delete-current-line ()
"Deletes the current line"
(interactive)
(delete-region
(line-beginning-position)
(line-end-position)))
Spowoduje to pozostawienie punktu na początku pustej linii. Aby się tego również pozbyć, możesz chcieć dodać coś takiego (delete-blank-lines)
na końcu funkcji, jak w tym przykładzie, który jest być może trochę mniej intuicyjny:
(defun delete-current-line ()
"Deletes the current line"
(interactive)
(forward-line 0)
(delete-char (- (line-end-position) (point)))
(delete-blank-lines))
Najszybszym / najprostszym sposobem usunięcia (zabicia) pełnego wiersza, z dowolnego punktu w wierszu, bez wybierania czegokolwiek, jest:
C-w ; kill-region
Jest wszechstronny w usuwaniu wszystkiego, co jest zaznaczone, lub domyślnie linii, jeśli nic nie jest wybrane.
Biorąc pod uwagę to pytanie, prawdopodobnie jesteś również zainteresowany replikacją "szarpnięcia" Vima yy
(chociaż w żargonie Emacsa "szarpnięcie" jest myląco "wstawieniem" Vima p
). To jest:
M-w ; kill-ring-save
Ładne, przystające i łatwe do zapamiętania. Nawet trochę podobny do Vima i_CTRL-W
.
Gdy umieścisz coś w pierścieniu zabijania za pomocą jednego z powyższych, prawdopodobnie będziesz chciał to „wyszarpnąć” (wkleić):
M-y ; yank-pop
(Zauważ, że CS-backspace może nie działać w terminalowym Emacs.)
Zamiast mieć oddzielny klucz do usuwania linii lub wywoływać prefiks-argument. Możesz użyć crux-smart-kill-line,
która „zabije do końca linii i zabije całą linię przy następnym wywołaniu”. Ale jeśli wolisz delete
zamiastkill
, możesz użyć poniższego kodu.
W przypadku operacji typu punkt-łańcuch (zabij / usuń) zalecam użycie 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))))