Eu tenho o seguinte no meu vimrc:
func! AddSpaceBeforeEqual()
s/\([a-z)_0-9"'\[\]]\)=/\1 =/ge
endfunc
Estou usando o vint para lint meu vimrc e recebi o seguinte aviso:
ProhibitCommandWithUnintendedSideEffect Evite comandos com efeitos colaterais indesejados. Evite usar: s [ubstitute] enquanto move o cursor e imprime mensagens de erro. Preferir funções (como search ()) mais adequadas para scripts. Para muitos comandos do vim, existem funções que fazem a mesma coisa com menos efeitos colaterais. Consulte: funções de ajuda () para obter uma lista das funções internas. Guia de estilo do Google Vimscript
No entanto, não acho que eles sejam uma maneira de fazer a substituição sem usar o :s
comando
Por exemplo, a search()
função fornece as linhas correspondentes a um padrão, mas não há como fazer a substituição. A substitute()
função opera em uma string e não substitui um arquivo inteiro.
Devo implementar um método substituto sozinho ou eles são uma maneira mais inteligente de reescrever minha função?
fonte
:help function-search-undo
Aqui está uma implementação simplista de sua função, escrita com
substitute()
:Ajuste o padrão de pesquisa a gosto.
fonte
O
:s
comando é uma abordagem pura do Vimscript.Meu palpite é que o aviso apenas significa que o cursor provavelmente será posicionado incorretamente após o uso (que você pode contornar usando a
winsaveview()
função antes e owinrestview()
comando após o uso). Além disso, você precisa cuidar de possíveis erros que possam ocorrer. Isso geralmente é tratado usando ae
bandeira. Também é necessário cuidar de algumas configurações, como agdefault
configuração, que inverte o significado dag
bandeira.É preciso cuidar dessas especificidades e essa é provavelmente a causa raiz desses avisos. Mas isso não significa evitar o uso do
:s
comando. Não há problema em usar o:s
comando, se você deseja substituir algo no buffer atual.(Observe, é claro que é possível percorrer todas as linhas e usar uma abordagem de pesquisa () / getline () / setline (). Mas isso geralmente é mais lento.)
fonte