2011-04-06 16 views
11

Voglio prendere una selezione visiva e girarla in modo che la prima riga della selezione sia in basso. Da:Come capovolgere le linee di una selezione visiva in vim?

<other_stuff> 
The 
wheels 
go 
round. 
<more_stuff> 

visiva selezionare il sentnce e poi capovolgere:

<other_stuff> 
round. 
go 
wheels 
The 
<more_stuff> 

Qualsiasi idea di come fare questo è sufficiente. Preferirei non dover installare un plugin per farlo.

+0

Correlati: [Invertire testo selezionato @ Vim Wikia] (http://vim.wikia.com/wiki/Reverse_selected_text) – Palec

+1

Duplicato su [SU]: [Come invertire l'ordine delle righe selezionate in vim?] (Http://superuser.com/q/189947/269404) – Palec

risposta

17

Quando si effettua una selezione visuale Vim rende automaticamente i segnalibri '< e '> al inizio e fine del blocco rispettivamente, così puoi fare quello che vuoi in due modi.

Nella modalità normale: '>dd'<P

come un comando ex: :'>d | '<-1 put

NB i segnalibri rimangono dopo si esce dalla modalità visiva, in modo da non stare in modalità visiva di utilizzare questi.

modificare:

Ops, ho letto male la questione ed ho pensato che voleva solo l'ultima riga messo all'inizio, ma si desidera che l'intero blocco invertito. La soluzione più semplice, se siete su un sistema UNIX:

:'<,'>!tac 

questa immagine Tubi le linee attraverso il programma di unix 'inversione di gatto'.

+5

Oppure 'tail -r' su OS X. – silvenon

+0

Grande! Ci sono situazioni in cui un '!' Risparmia molto tempo! –

3

Secondo :help 12.4 potete segnare la prima linea con il mt, passare all'ultima linea che si desidera invertito quindi utilizzare il comando :'t+1,.g/^/m 't

+0

Assicurati di segnare l'ultima riga che * non * vuoi spostare; non la prima riga che vuoi spostare. – Alan

1

Per quelli più a suo agio con visivo Modalità:
1. Identificare il numero di riga sopra la selezione desiderata capovolto utilizzando :set nu.
2. Utilizzare Shift-V per evidenziare la selezione che si desidera capovolgere (modalità visiva).
3. :g/^/m <Line number from step 1>.

Si noti che in modalità visiva mostrerà automaticamente come :'<,'>g/^/m <Line number> quando si digita il comando dal 3.

Questo comando funziona spostando la selezione di una riga alla volta nel numero di linea che si danno . Quando il secondo elemento viene inserito nel numero di linea indicato, spinge il primo verso il numero di riga + 1. Quindi il terzo spinge il primo e il secondo in basso e così via finché l'intero elenco non viene inserito nel numero di riga singolo risultante in un invertire la lista ordinata.

Problemi correlati