Emacs tương đương với vi's là ddgì? Tôi muốn xóa dòng hiện tại. Đã thử CTRL+ knhưng nó chỉ xóa khỏi vị trí hiện tại.
Emacs tương đương với vi's là ddgì? Tôi muốn xóa dòng hiện tại. Đã thử CTRL+ knhưng nó chỉ xóa khỏi vị trí hiện tại.
Câu trả lời:
C-a # Go to beginning of line
C-k # Kill line from current point
Ngoài ra còn có
C-S-backspace # Ctrl-Shift-Backspace
mà gọi M-x kill-whole-line
.
Nếu bạn muốn thiết lập một ràng buộc khóa chung khác, bạn phải đặt nó vào ~ / .emacs:
(global-set-key "\C-cd" 'kill-whole-line) # Sets `C-c d` to `M-x kill-whole-line`
Nếu bạn muốn xóa một số dòng toàn bộ, bạn có thể đặt trước lệnh bằng một số:
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
Đôi khi tôi cũng thấy C-x z
hữu ích:
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
, điều đó thực sự tuyệt. Và câu trả lời tốt đẹp và chính xác btw.
C-k C-k
có loại hoạt động giống như d$ S-j
trong vim, nhưng điều này có thể xóa các dòng chuyển tiếp khá độc đáo.
C-cd
?
Trong trường hợp bạn không muốn ngắt dòng (sẽ đưa nó vào khay nhớ tạm của hệ điều hành và hủy vòng lặp) nhưng chỉ cần xóa nó:
(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)))))
Một phương pháp khác để xóa dòng mà không đặt nó vào vòng kết thúc:
(defun delete-current-line ()
"Deletes the current line"
(interactive)
(delete-region
(line-beginning-position)
(line-end-position)))
Điều này sẽ để lại điểm ở đầu dòng trống. Để loại bỏ điều này, bạn có thể muốn thêm một cái gì đó giống như (delete-blank-lines)
vào cuối hàm, như trong ví dụ này, có lẽ ít trực quan hơn một chút:
(defun delete-current-line ()
"Deletes the current line"
(interactive)
(forward-line 0)
(delete-char (- (line-end-position) (point)))
(delete-blank-lines))
Cách nhanh nhất / đơn giản nhất để xóa (xóa) một dòng đầy đủ, từ bất kỳ điểm nào trên dòng, mà không cần chọn bất kỳ thứ gì, là:
C-w ; kill-region
Nó rất linh hoạt trong việc xóa bất cứ thứ gì được chọn hoặc một dòng theo mặc định nếu không có gì được chọn.
Với câu hỏi, bạn có thể cũng quan tâm đến việc sao chép "yank" của Vim, yy
(mặc dù theo cách nói của Emacs, "yank" là "đặt" của Vim, p
). Đây là:
M-w ; kill-ring-save
Đẹp và phù hợp, và khá dễ nhớ. Thậm chí hơi giống với Vim's i_CTRL-W
.
Khi bạn đã đặt một thứ gì đó vào vòng cấm với một trong hai cách trên, bạn có thể muốn "giật" (dán) nó:
M-y ; yank-pop
(Lưu ý rằng CS-backspace có thể không hoạt động trong Emacs đầu cuối.)
Thay vì có khóa riêng biệt để xóa dòng hoặc phải gọi đối số tiền tố. Bạn có thể sử dụng điểm mấu chốt-thông minh-kill-line
sẽ "giết đến cuối dòng và giết cả dòng trong lần gọi tiếp theo". Nhưng nếu bạn muốn delete
thay vì kill
, bạn có thể sử dụng mã bên dưới.
Đối với hoạt động trỏ đến chuỗi (giết / xóa), tôi khuyên bạn nên sử dụng 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))))