เทียบเท่า 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
กลุ่ม แต่สามารถลบบรรทัดไปข้างหน้าได้ค่อนข้างดี
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
ดีและสอดคล้องกันและค่อนข้างจำง่าย i_CTRL-W
แม้เพียงเล็กน้อยคล้ายกับเป็นกลุ่มของ
เมื่อคุณใส่บางสิ่งลงในวงแหวนสังหารด้วยข้อใดข้อหนึ่งข้างต้นคุณอาจต้องการ "ดึง" (วาง):
M-y ; yank-pop
(โปรดทราบว่า CS-backspace อาจไม่ทำงานใน Terminal 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))))