2009-08-13 11 views
21

¿Cuál es la forma más eficiente de cambiar dos parámetros para una llamada a método en Vim?vim fu, intercambiando parámetros para una llamada a un método

Por ejemplo, quiero cambiar:

call "hello mister 123", 2343 

a:

call 2343, "hello mister 123" 

(Suponga que el cursor se encuentra al principio de la línea.)

Lo ideal sería que el truco funciona para cosas como

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

¿está solo separado por comas? y solo una coma en cada línea? – nightingale2k1

+0

los parámetros están siempre separados por comas, pero las pramas de cadena pueden tener comas en línea a veces. –

+0

:% s: call \ (". *" \), \ (. * \): Call \ 2, \ 1: g – nightingale2k1

Respuesta

16

Esta expresión regular lo hará por sus ejemplos:

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

Esta expresión regular tendrá que ser progresivamente más desagradable si ha escapado comillas y tales cosas en uno de sus parámetros.

En realidad, solo resaltaría un parámetro (en modo visual), marque d, resalte el otro parámetro y presione p; Vim pegará muy bien lo que está en el registro, sobrescribirá lo que ha resaltado y cambiará el texto eliminado en el registro. A continuación, mueva el cursor y presione p nuevamente. Resalte, d, resalte, p, mueva el cursor, p es una combinación común, en mi vimming al menos.

Así que con el cursor al inicio de la línea, primer ejemplo:

wva"dlvawpF,P 

Significado movimiento más allá de la palabra "llamada" (w), resalte una cadena entre comillas (va"), borrarlo (d) , mueva un espacio hacia la derecha (l), resalte una palabra (vaw), pegue (p), retroceda hasta la coma (F,), pegue antes (P).

Segundo ejemplo:

wva"dlva"p_f,P 

Esto no es difícil una vez que se acostumbre a los comandos de movimiento.

+0

La parte "en realidad" es la parte que me interesó. ¡Gracias por pasearnos por esto! :) – aikeru

1

Si sus argumentos son entre paréntesis, como aquí:

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

lugar el cursor en cualquier lugar dentro del paréntesis y:

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

Salida sideways.vim, un plugin por @AndrewRadev. Puede manejar parámetros en movimiento y otros elementos delimitados de la lista, con algunas características interesantes como mover listas anidadas como una sola unidad. También maneja llamadas de método de estilo Ruby sin paréntesis. Muy útil.

Cuestiones relacionadas