Muy a menudo me encuentro en la necesidad de realizar una sustitución que tendrá coincidencias esparcidas por todo un archivo grande y con expresiones de búsqueda y reemplazo no triviales.
Por ejemplo, digamos que tengo algunas llamadas a funciones como okFunction(arg1, arg2 arg3)
. Los argumentos diferirán con cada llamada a la función, por supuesto. Ahora digamos que he descubierto una mejor función que no necesita arg2
. Puedo ajustar fácilmente todo el archivo con
:%s/\<okFunction(\(\w\+\), \(\w\+\), \(\w\+\))/betterFunction(\1, \3)/gc
Aunque conceptualmente simple, no estoy seguro de tener la sintaxis correcta en este patrón bastante largo. La c
bandera realmente ayuda aquí, pero el problema es que al pedir confirmación, vim no mostrará con qué se reemplazará la coincidencia. Quiero decir, mostrará la expresión de reemplazo, pero no el resultado evaluado. Si confirmo la sustitución con y
, vim saltará inmediatamente al próximo partido y no estaré listo para ver si cometí algún error.
He encontrado el complemento vim-over que resuelve parcialmente el problema, pero solo si todos los mathes son visibles en la pantalla cuando está escribiendo el comando. Una vez que presiona enter, el comportamiento es exactamente el mismo que describí anteriormente y no obtengo una vista previa.
Entonces, ¿hay alguna manera de obtener vim para evaluar la expresión de reemplazo cuando se solicita confirmación en comandos sustitutos?
%
, verifique que el resultado sea el que esperaba y luego use la sustitución con %
(solo son unas pocas teclas:) :<up><c-b>%
. Claramente, una opción de vista previa sería mucho más eficiente que eso. Si bien no hay parche está disponible tal vez uno puede envolver la sustitución de una función Vimscript con este tipo de opción, pero que suena como un montón de trabajo ...