2012-10-27 14 views
6

Emacs ha una funzione chiamata open-rectangle, che consente di selezionare una regione rettangolare (cioè la modalità di blocco visivo di Vim), quindi premere una combinazione di tasti per riempire quel rettangolo con spazi, spingendo qualsiasi contenuto esistente verso destra:Vim equivalente del rettangolo aperto di Emacs

Before After

Questo è molto utile quando si lavora con le colonne verticali allineati di testo. Mi sento come se dovessi essere in grado di farlo facilmente anche in Vim, usando il blocco visivo + una ricerca & sostitutiva. Ma non riesco a capire perché la mia ricerca & replace non sia legata al mio rettangolo quando la provo.

:'<,'>s/\^/ /

In questo modo si indenta l'intera riga, invece di aprire questa regione selezionata. Ho provato a sostituire:

:'<,'>s/\v(.*)/ \1/ 

Ma questo ha lo stesso effetto. Come posso capire che il mio schema vuole sostituire ogni riga del blocco selezionato con spazi + l'area selezionata? Sostituzioni semplici come il semplice cambio di lettere funzionano, ma usare ^ o .* non funziona come mi aspetterei.

Sono consapevole della possibilità di colpire "I" e di inserire alcuni spazi nella modalità normale, ma è più difficile giudicare quando indentate di una grande quantità, su molte linee.

+0

@hammar che non sembra fare la cosa giusta. Certamente lascia l'area selezionata riempita di spazi, ma altera il testo. – d11wtq

+0

Ah, certo. In realtà l'ho appena capito prima di tornare qui. Puoi postarlo come risposta? :) Funziona perfettamente! – d11wtq

+1

Presumo che si tratti di occorrenze nel mezzo di una riga, altrimenti '' 'sarà più efficiente. –

risposta

8

ne dite:

yPgvr<Space> 

Questo tira il blocco e l'incolla per duplicare, poi ri-seleziona il blocco originale e lo sostituisce con spazi.

+0

Buon uomo, grazie! :) – d11wtq

+0

Più efficiente: sostituisci 'dP' con' y'. –

+0

@ChrisMorgan che ha decisamente più senso e crea una sequenza di annullamento meno disordinata (se si decide di annullare). – d11wtq

6

Un altro modo:

  1. visivo-blocco di selezionare solo una colonna.

  2. Hit nI<Space><Esc> con n è il numero di colonne vuote che si desidera.

+0

Funziona con qualsiasi quantità di colonne. 'I' nella modalità di selezione dei blocchi inserisce il testo in ogni riga prima della selezione, proprio come' A' aggiunge il testo in ogni riga dopo la selezione. –

+0

Questa è una soluzione molto più generale. Mi piace. Ma sai dove è documentato? Non riesco a trovare nulla su di esso. (Sfortunatamente, la modalità di blocco visivo è piuttosto scarsamente documentata.) –

+0

"Visual-block select only one column." Bene, puoi selezionarne di più se vuoi ... Inoltre, 'nI ' può essere sostituito con 'I' seguito da * n * spazi (che possono essere più facili da percepire visivamente). [Bah, odio l'implementazione Markdown usata per i commenti! È anche peggio di quello usato per formattare domande e risposte!] –

2

Come variante s' romainl risposta, ho questo:

vnoremap <C-Space> I<Space><Esc>gv 

Esso permette sia l'inserimento di n spazi alla volta tramite un conteggio anteporre e iterativo aggiunta di colonne mediante un'applicazione ripetuta della mappatura.

+0

Questo è un trucco abbastanza carino e rimane visivo, grazie. – d11wtq

Problemi correlati