2011-09-03 12 views
13

Sto provando a selezionare più righe che non sono in un blocco continuo. Ad esempio, voglio selezionare la linea 1 e 3 contemporaneamente senza selezionare linea 2:Come posso selezionare più righe che non sono in un blocco continuo?

1. this is line 1 
2. this is line 2 
3. this is line 3 

Inizialmente ho pensato che questo sarebbe un compito curiosità, ma dopo aver trascorso un po 'di tempo googling in giro senza alcun risultato, mi sono reso conto che non potrebbe essere un compito semplice/comune

Molte grazie in anticipo per il vostro aiuto.


Edit: Grazie per le risposte. Fornirò ulteriori dettagli su come sono arrivato alla domanda.

stavo cercando di allineare un codice di blocco come il seguente, utilizzando Tabularize:

1. name1="Woof" 
2. lucky_dog = lucky("dog_one"= name1, 
3.     "dog_two"= name1) 
4. name2="Howl" 

Volevo che allineare in questo modo:

1. name1  = "Woof" 
2. lucky_dog = lucky("dog_one"= name1, 
3.     "dog_two"= name1) 
4. name2  = "Howl" 

Ma non posso farlo perché Tabularize avrà terza riga in considerazione e allineare tutto in:

1.name1      = "Woof" 
2.lucky_dog     = lucky("dog_one"= name1, 
3.     "dog_two" = name1) 
4.name2      = "Howl" 

Credo di poter pensa a qualche trucco regex per archiviare i risultati desiderati, mi è venuto in mente inizialmente che forse avrei potuto semplicemente selezionare la riga 1,2,4 e renderli allineati.

Poi ho capito che non è un compito facile.

Quindi la domanda.

Grazie per le risposte!

+4

No (per quanto ne so).Ma, se dici cosa esattamente vuoi fare con questa selezione, possiamo aiutarti a trovare un altro modo per farlo ... forse. – sidyll

+0

@sidyll Grazie! Tutto è iniziato quando stavo cercando di allineare alcune righe usando il plugin Tabularize. Volevo saltare alcune righe in un blocco del codice, ma allineare il resto delle righe. Potrei farlo con regex, ma mi è anche venuto in mente che se potessi selezionare simultaneamente quelle linee, Tabularize può semplicemente allineare quelli che ho selezionato mentre saltano il resto. Da qui la domanda. –

risposta

7

Non è possibile selezionare diversi blocchi di testo in vim.

Che cosa si può fare, invece, è di individuare un modello comune, unico nel suo genere che è condivisa dalle linee che si desidera agire e usare l'ex comando 'globale' o 'g' di farlo in questo modo:

:g/shared unique pattern/ex or normal command here 

ad esempio per copiare le linee a un registro, dicono che il 'un' registro:

:g/shared unique pattern/normal "Ayy 

per incollarli colpiscono "ap

il maiuscola che viene prima aa dice a Vim che si desidera copia a e aggiungi le linee al registro.

Come ha detto sydill se puoi dirci che cosa esattamente vuoi fare con le linee, allora possiamo aiutarti meglio.

+0

il comando g è una buona idea ma yA non funzionerà almeno in vim 7.3 ... – lucapette

+0

Ho sbagliato, modificato per l'incantazione corretta – holygeek

+0

OK. A proposito, questa è l'unica soluzione che potrei pensare anche io. Mi chiedo se ci sono altre soluzioni ... – lucapette

3

This script sembra fornire la funzionalità che stai cercando.

+0

Grazie, lo esaminerò! –

11

v'è ora un brillante plug-in che consente la selezione multipla in Vim: Vim-multiple-cursors:

enter image description here