Tengo lo siguiente en mi vimrc:
func! AddSpaceBeforeEqual()
s/\([a-z)_0-9"'\[\]]\)=/\1 =/ge
endfunc
Estoy usando vint para unir mi vimrc, y recibí la siguiente advertencia:
ProhibitCommandWithUnintendedSideEffect Evita los comandos con efectos secundarios no deseados. Evite usar: s [ubstitute] ya que mueve el cursor e imprime mensajes de error. Prefiere funciones (como search ()) más adecuadas para scripts. Para muchos comandos vim, existen funciones que hacen lo mismo con menos efectos secundarios. Consulte: funciones de ayuda () para obtener una lista de las funciones integradas. Guía de estilo de Google Vimscript
Sin embargo, no creo que sean una forma de hacer la sustitución sin usar el :s
comando.
Por ejemplo, la search()
función proporciona las líneas que coinciden con un patrón, pero no hay forma de hacer una sustitución. La substitute()
función opera en una cadena y no sustituye a un archivo completo.
¿Debo implementar un método sustituto yo mismo o es una forma más inteligente de reescribir mi función?
fuente
:help function-search-undo
El
:s
comando es un enfoque puro de Vimscript.Mi suposición es que la advertencia solo significa que el cursor probablemente estará mal colocado después de su uso (lo que puede evitar utilizando la
winsaveview()
función antes y elwinrestview()
comando después de su uso). También debe ocuparse de los posibles errores que puedan ocurrir. Esto generalmente se maneja usando lae
bandera. También hay que cuidar algunas configuraciones como lagdefault
configuración, que invierte el significado de lag
bandera.Uno necesita cuidar esos detalles y esa es probablemente la causa principal de esas advertencias. Pero eso no significa evitar el uso del
:s
comando. Está perfectamente bien usar el:s
comando, si desea reemplazar algo en el búfer actual.(Tenga en cuenta que, por supuesto, uno podría recorrer todas las líneas y utilizar un enfoque de búsqueda () / getline () / setline (). Pero eso suele ser más lento).
fuente