2009-07-02 3 views
39

Sono nuovo di Emacs. Ho cercato su Google questo, ma nessuna buona risposta lì. Uno di questi è Ctrl-n Ctrl-a Backspace Questo funziona ma è stupido. C'è un modo rapido e semplice per unire un blocco di linee in una singola riga?Di Emacs, come unire due linee in una?

In realtà, posso usare Esc-q per riempire automaticamente un paragrafo ora, ma come posso farlo tornare senza UNDO?

+1

Grazie, per l'idea, lo legherò a . – Ralph

+0

Il comando "annulla" è normalmente associato a C-_ (control-underscore) ... – dmckee

+2

Normalmente faccio C-e C-d – sharjeel

risposta

3

è possibile definire un nuovo comando per questo, modificando temporaneamente la larghezza di riempimento prima di usare il comando Esc-q:

;; -- define a new command to join multiple lines together -- 
(defun join-lines() (interactive) 
(setq fill-column 100000) 
(fill-paragraph nil) 
(setq fill-column 78) 
) 

Ovviamente questo funziona solo, se il punto è meno di 100000 caratteri.

+9

Senza clobbering fill-column, che sarebbe (defun join-linee() (interattivo) (let ((fill-column 999999)) (fill-punto nil))) – huaiyuan

+0

Già. Questo dovrebbe essere più aggraziato. – jcadam

+0

Che ne dici di questo? (defun scolmare-punto() "fa l'opposto di riempimento paragrafo" (interattivo) (let ((fill-column (point-max))) (fill-punto nil))) – Gyom

6

Basta sostituire le nuove con niente.

27

M-x join-line si uniranno due linee. Basta collegarlo a un comodo tasto.

+0

Sì. Funziona. Tuttavia, non è utile per un blocco di più righe (3 o più righe). Qualche comando utile per questo scopo? – jcadam

+8

Ma se si va sull'ultima riga del blocco e si preme M-^(il legame chiave per join-line) più volte si avrà lo stesso effetto. Passa piuttosto veloce, quindi a meno che tu non abbia centinaia di linee da unire preferirei farlo con la colonna di riempimento. Altrimenti fai come suggerisce Tal, segna il blocco e sostituisci newline (C-Q C-J) con niente. – danielpoe

+0

Ho provato a associare un join a M-1. Funziona anche bene. Come hai suggerito, molte soluzioni qui allo scopo, quindi cercherò di usarle tutte in modo flessibile. Grazie mille! – jcadam

158

Luogo punto ovunque sul ultima riga del gruppo di linee che hanno bisogno di entrare e chiamare

M-^ 

ripetutamente fino a quando tutte le linee sono fuse.

Nota: lascia uno spazio tra tutte le linee ora unite.

+0

A cosa è solitamente associato M- ^? – stsquad

+0

stsquad: devi premere Meta + Maiusc + 6 (Shift + 6 ti darà ^) –

+0

Ah, le gioie di giorno in giorno migliorano il mio Emacsfu. Solo questo può farmi pensare ad avere diverse funzioni di join line: una con uno spazio extra, uno senza di esso. –

4

Mi piace il modo di testo Sublime unire la linea di comando con J così faccio in questo modo:

(defun join-lines (arg) 
    (interactive "p") 
    (end-of-line) 
    (delete-char 1) 
    (delete-horizontal-space) 
    (insert " ")) 
6

Multiple Cursors combinato con M-^crollerà tutte le linee selezionate in uno con tutto estranea white-space rimosso.

Ad esempio per selezionare un intero buffer, invocare la modalità più cursori, collassare in una linea, e quindi disattivare multipli modalità cursori:

C-x h 
M-x mc/edit-lines 
M-^ 
C-g 
+0

Il mio amore per i cursori multipli cresce. – Bae

0

"come potrei farlo tornare senza UNDO?":

(defun toggle-fill-paragraph() 
    ;; Based on http://xahlee.org/emacs/modernization_fill-paragraph.html 
    "Fill or unfill the current paragraph, depending upon the current line length. 
When there is a text selection, act on the region. 
See `fill-paragraph' and `fill-region'." 
    (interactive) 
    ;; We set a property 'currently-filled-p on this command's symbol 
    ;; (i.e. on 'toggle-fill-paragraph), thus avoiding the need to 
    ;; create a variable for remembering the current fill state. 
    (save-excursion 
    (let* ((deactivate-mark nil) 
      (line-length (- (line-end-position) (line-beginning-position))) 
      (currently-filled (if (eq last-command this-command) 
           (get this-command 'currently-filled-p) 
           (< line-length fill-column))) 
      (fill-column (if currently-filled 
          most-positive-fixnum 
          fill-column))) 
     (if (region-active-p) 
      (fill-region (region-beginning) (region-end)) 
     (fill-paragraph)) 
     (put this-command 'currently-filled-p (not currently-filled))))) 
(global-set-key (kbd "M-q") 'toggle-fill-paragraph) 
3

Io uso la seguente funzione e la lego a "M-J".

(defun concat-lines() 
    (interactive) 
    (next-line) 
    (join-line) 
    (delete-horizontal-space)) 

Se si preferisce mantenere la posizione del cursore, è possibile utilizzare save-excursion.

2

Il nome convenzionale di Emacs per "join" è "fill". Sì, è possibile unire due linee con M-^ - e questo è utile - ma più in generale si si desidera unire n righe. Per questo, vedere i comandi fill*, come ad esempio fill-region, fill-paragraph, ecc

Vedi this per ulteriori informazioni sulla selezione cose che possono poi essere riempiti.

+0

Voteresti che questa fosse la risposta idiomaticamente corretta – JohnDoe