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 :scomando.
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-undoEl
:scomando 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 laebandera. También hay que cuidar algunas configuraciones como lagdefaultconfiguración, que invierte el significado de lagbandera.Uno necesita cuidar esos detalles y esa es probablemente la causa principal de esas advertencias. Pero eso no significa evitar el uso del
:scomando. Está perfectamente bien usar el:scomando, 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