Apa padanan emacs dari vi dd? Saya ingin menghapus baris saat ini. Mencoba CTRL+ ktetapi hanya menghapus dari posisi saat ini.
Apa padanan emacs dari vi dd? Saya ingin menghapus baris saat ini. Mencoba CTRL+ ktetapi hanya menghapus dari posisi saat ini.
Jawaban:
C-a # Go to beginning of line
C-k # Kill line from current point
Ada juga
C-S-backspace # Ctrl-Shift-Backspace
yang memanggil M-x kill-whole-line
.
Jika Anda ingin menyetel pengikatan kunci global yang berbeda, Anda harus meletakkan ini di ~ / .emacs:
(global-set-key "\C-cd" 'kill-whole-line) # Sets `C-c d` to `M-x kill-whole-line`
Jika Anda ingin menghapus sejumlah baris, Anda dapat mengawali perintah dengan angka:
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
Terkadang saya juga merasa C-x z
terbantu:
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
, itu sangat keren. Dan jawaban yang bagus dan tepat btw.
C-k C-k
yang berfungsi seperti d$ S-j
in vim, tetapi ini dapat menghapus baris ke depan dengan cukup baik.
C-cd
?
Jika Anda tidak ingin mematikan baris (yang akan memasukkannya ke clipboard OS dan mematikan cincin) tetapi cukup hapus:
(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)))))
Metode lain untuk menghapus baris tanpa menempatkannya ke dalam kill ring:
(defun delete-current-line ()
"Deletes the current line"
(interactive)
(delete-region
(line-beginning-position)
(line-end-position)))
Ini akan meninggalkan titik di awal baris kosong. Untuk menghilangkan ini juga, Anda mungkin ingin menambahkan sesuatu seperti (delete-blank-lines)
di akhir fungsi, seperti dalam contoh ini, yang mungkin sedikit kurang intuitif:
(defun delete-current-line ()
"Deletes the current line"
(interactive)
(forward-line 0)
(delete-char (- (line-end-position) (point)))
(delete-blank-lines))
Cara tercepat / termudah untuk menghapus (membunuh) satu baris penuh, dari titik mana pun di baris, tanpa memilih apa pun, adalah:
C-w ; kill-region
Ini serbaguna dalam menghapus apa pun yang dipilih, atau garis secara default jika tidak ada yang dipilih.
Dengan adanya pertanyaan tersebut, Anda mungkin juga tertarik untuk mereplikasi "yank" Vim, yy
(meskipun dalam bahasa Emacs, "yank" membingungkan adalah "put" Vim, p
). Ini adalah:
M-w ; kill-ring-save
Bagus dan kongruen, dan cukup mudah diingat. Bahkan sedikit mirip dengan Vim i_CTRL-W
.
Setelah Anda memasukkan sesuatu ke dalam kill ring dengan salah satu cara di atas, Anda mungkin ingin "menarik" (menempelkannya):
M-y ; yank-pop
(Perhatikan bahwa CS-backspace mungkin tidak berfungsi di terminal Emacs.)
Daripada memiliki kunci terpisah untuk menghapus baris, atau harus memanggil prefix-argument. Anda dapat menggunakan crux-smart-kill-line
yang akan "membunuh sampai akhir baris dan mematikan seluruh baris pada panggilan berikutnya". Tapi jika Anda lebih memilih delete
bukan kill
, Anda dapat menggunakan kode di bawah ini.
Untuk operasi point-to-string (kill / delete) saya sarankan untuk menggunakan 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))))