2010-12-11 16 views
10
M-x flush-lines ^$ 

elimina tutte le righe vuote in un buffer. Tuttavia, desidero solo eliminare righe vuote aggiuntive, ovvero se ci sono n righe vuote consecutive voglio eliminare n-1 e mantenerne una.elimina righe vuote aggiuntive in emacs

So che delete-blank-lines fa il lavoro per le righe vuote sotto il punto, tuttavia voglio una soluzione semplice che funzioni per l'intero buffer.

Qualche idea su come procedere? Soprattutto è possibile modificare la regex^$ dal mio primo esempio per far corrispondere solo le righe extra?

risposta

18
C-x h M-x replace-regexp RET^C-q C-j C-q C-j + RET C-q C-j RET 

che segna l'intero buffer e sostituisce due o più righe vuote con una sola riga vuota.

+0

Analogamente, è possibile eseguire: 'M-x replace-regexp RET^C-q C-j $ RET RET'. Questo sostituirà due righe vuote consecutive con una singola. –

4

Non so di un costruito in funzione di questo, ma si può fare:

Mx singole linee in sola

(defun single-lines-only() 
    "replace multiple blank lines with a single one" 
    (interactive) 
    (goto-char (point-min)) 
    (while (re-search-forward "\\(^\\s-*$\\)\n" nil t) 
    (replace-match "\n") 
    (forward-char 1))) 
5

C-x C-o (cancella-righe vuote) fa esattamente questo. Avrai solo bisogno di un po 'di magia macro per eseguirlo su un intero buffer.

+1

Questo dovrebbe essere 'C-x C-o',' C-x o' chiama 'altra-finestra'. – monotux

+0

true, aveva fretta di digitare la risposta. Grazie. – eGlyph