2009-08-13 16 views
21

Qual è il modo più efficiente per scambiare due parametri per una chiamata di metodo in Vim?vim fu, scambiando i parametri per un metodo di chiamata

Per esempio, voglio cambiare:

call "hello mister 123", 2343 

a:

call 2343, "hello mister 123" 

(Si supponga il cursore si trova all'inizio della riga.)

Idealmente il trucco funziona per cose come

call "hello, world" , "goodbye, world" 
+0

è separato solo da virgole? e solo una virgola su ogni linea? – nightingale2k1

+0

i parametri sono sempre separati da virgola, ma a volte i prami di stringa possono avere virgole in linea. –

+0

:% s: chiamata \ (". *" \), \ (. * \): Chiamata \ 2, \ 1: g – nightingale2k1

risposta

16

Questa espressione regolare lo farà per i vostri esempi:

:s/\vcall ("[^"]+"|[^,]+)\s*,\s*("[^"]+"|[^,]+)/call \2, \1/ 

Questa espressione regolare avrà bisogno di diventare progressivamente più brutto se si è sfuggito virgolette e cose del genere in uno dei vostri parametri.

In realtà, vorrei evidenziare un parametro (in modalità visiva), premere d, evidenziare l'altro parametro e premere p; Vim inciderà bene ciò che è nel registro, sovrascrivendo ciò che hai evidenziato e scambiando il testo cancellato nel registro. Quindi sposta il cursore e premi di nuovo p. Evidenziare, d, evidenziare, p, spostare il cursore, p è una combinazione comune, almeno nel mio vimming.

Così, con il cursore all'inizio della linea, primo esempio:

wva"dlvawpF,P 

Significato sposta oltre la parola "chiamata" (w), evidenziare una stringa tra virgolette (va"), eliminarla (d) , spostare uno spazio a destra (l), evidenziare una parola (vaw), incollare (p), spostarsi indietro nella virgola (F,), incollarlo prima di esso (P).

Secondo esempio:

wva"dlva"p_f,P 

Questo non è difficile una volta che ci si abitua ai comandi di movimento.

+0

La parte "in realtà" è la parte che ha suscitato il mio interesse. Grazie per averci fatto passare questo! :) – aikeru

1

Se i tuoi argomenti sono tra parentesi, come qui:

function ($argument1 = null, 'argument2') { 
    ... 
} 

posto il cursore ovunque all'interno della parentesi e:

va(:s/\\%V(\\@<=\\s*\\(.\\+\\),\\s*\\(.\\+\\)\\%V\\s*/\\2, \\1/g 
5

Partenza sideways.vim, un plugin per @AndrewRadev. È in grado di gestire i parametri in movimento e gli altri elementi delimitati dell'elenco, con alcune caratteristiche interessanti come lo spostamento di elenchi annidati come una singola unità. Gestisce anche chiamate di metodo in stile Ruby senza parentesi. Molto maneggevole.

Problemi correlati