Emacs'ta mevcut satırı nasıl silebilirim?


122

Vi'nin emacs eşdeğeri nedir dd? Mevcut satırı silmek istiyorum. Güvenilir CTRL+ kancak yalnızca siler gelen mevcut konumda.

Yanıtlar:


212
C-a # Go to beginning of line
C-k # Kill line from current point

Ayrıca birde şu var

C-S-backspace   # Ctrl-Shift-Backspace

hangi çağırır M-x kill-whole-line.

Farklı bir genel anahtar bağlama ayarlamak isterseniz, bunu ~ / .emacs içine koymanız gerekir:

(global-set-key "\C-cd" 'kill-whole-line)     # Sets `C-c d` to `M-x kill-whole-line`

Bir dizi tam satırı silmek isterseniz, komutun önüne bir sayı ekleyebilirsiniz:

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

Bazen de yardımcı buluyorum 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.

Bu çalışıyor. Bunu tek bir komut kullanarak yapmanın bir yolu var mı? Bunu yapmak için özel bir anahtar bağlama oluşturmam gerekecek mi?
Manoj Govindan

14
Bilmiyordum C-x z, bu gerçekten harika. Ve güzel ve kesin cevap btw.
slu

2
C-k C-kBir d$ S-jin vim gibi çalışan bir tür de vardır , ancak bu, satırları oldukça güzel bir şekilde silebilir.
Theo Belaire

Neden boşluk yok C-cd?
Elliot Gorokhovsky

@ RenéG: Alan isteğe bağlıdır.
unutbu

11

Hattı öldürmek istemiyorsanız (ki bu onu işletim sistemi panosuna koyar ve halkayı öldürür), ancak silin:

(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)))))

3

Hattı öldürme halkasına yerleştirmeden silmek için başka bir yöntem:

(defun delete-current-line ()
  "Deletes the current line"
  (interactive)
  (delete-region
   (line-beginning-position)
   (line-end-position)))

Bu, noktayı boş bir satırın başında bırakacaktır. Bundan da kurtulmak (delete-blank-lines)için, bu örnekte olduğu gibi işlevin sonuna benzer bir şey eklemek isteyebilirsiniz , bu belki biraz daha az sezgiseldir:

(defun delete-current-line ()
 "Deletes the current line"
 (interactive)
 (forward-line 0)
 (delete-char (- (line-end-position) (point)))
 (delete-blank-lines))

1

Satırdaki herhangi bir noktadan hiçbir şey seçmeden tam bir satırı silmenin (öldürmenin) en hızlı / en basit yolu şudur:

C-w  ; kill-region

Seçili olanı veya hiçbir şey seçilmediyse varsayılan olarak bir satırı silmede çok yönlüdür.

Soru göz önüne alındığında, muhtemelen Vim'in "yankı" nı kopyalamakla da ilgileniyorsunuz, yy(gerçi Emacs deyiminde "yank", kafa karıştırıcı bir şekilde Vim'in "koyma" sıdır p). Bu:

M-w  ; kill-ring-save

Güzel ve uyumlu ve hatırlaması oldukça kolay. Hatta Vim'inkine biraz benziyor i_CTRL-W.

Yukarıdakilerden herhangi biriyle öldürme halkasına bir şey koyduğunuzda, muhtemelen onu "çekmek" (yapıştırmak) isteyeceksiniz:

M-y  ; yank-pop

(CS-backspace'in terminal Emacs'de çalışmayabileceğini unutmayın.)


1

Satırı silmek için ayrı bir anahtara sahip olmak veya önek bağımsız değişkenini çağırmak yerine. "Hattın sonuna kadar öldüren ve bir sonraki aramada tüm hattı öldürecek" temel akıllı öldürme hattını kullanabilirsiniz . Ancak deletebunun yerine tercih killederseniz, aşağıdaki kodu kullanabilirsiniz.

Noktadan dizgeye işlem için (öldür / sil) zop-to-char kullanmanızı öneririm

(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))))

kaynak

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.