Estou procurando uma maneira de executar algum código dentro de uma função condicionalmente, dependendo da presença de algum texto no arquivo editado. Eu encontrei uma maneira de fazer isso que funciona, mas não parece muito "limpo".
Aqui está o que eu tenho:
function! foo()
(...)
let v:errmsg = 'ok'
execute "silent! normal! :/" . l:pattern . "\r"
if v:errmsg == 'ok'
(... do stuff ...)
else
(... do other stuff ...)
endif
endfunction
A questão é: o mesmo resultado pode ser alcançado de alguma maneira sem o uso desajeitado de v: errmsg ?
O que eu tenho em mente é algo da forma
function! foo()
(...)
if GrepInCurrentBuffer(l:pattern)
(... do stuff ...)
(...etc...)
search()
- Veja:h search()
:h function-list
Respostas:
A função que você está procurando é
search()
. Esta função pesquisará começando na posição do cursor e, quando uma correspondência for encontrada, seu número de linha será retornado. Se nenhuma correspondência for encontrada, 0 será retornado. A'ignorecase'
,'smartcase'
e'magic'
as opções são usados no padrão de pesquisa. Observe que, se quiser escolher onde a pesquisa começa, você pode usarcursor()
asetpos()
função ou para definir a posição do cursor e agetcurpos()
função para salvar a localização do cursor.Aqui está um exemplo disso em ação:
Para mais informações sobre as coisas mencionadas nesta resposta, consulte os seguintes tópicos de ajuda:
:help search()
:help 'ignorecase'
:help 'smartcase'
:help 'magic'
:help cursor()
:help setpos()
:help getcurpos()
fonte
:echo search('pattern', 'nw') ? 1 : 0
vez disso? :)Para referência a qualquer pessoa que olhe para essa pergunta no futuro, aqui está uma solução funcional que segue o mesmo padrão que o pseudocódigo na pergunta. É completamente baseado nos comentários de VanLaser , tanto na pergunta original quanto na resposta da EvergreenTree.
No caso específico da função real que originou essa pergunta, a solução não exigiu realmente os sinalizadores 'nw'. Essas sinalizações devem, no entanto, tornar a solução mais segura em geral, com base em sua descrição na ajuda do vim:
(a partir
:help search
do Vim 7.4)fonte