est ici un hack d'un novice de vim qui semble fonctionner:
function! SearchFunc()
let l:filenames = substitute(glob("*.c") . glob("*.cpp") . glob("*.h"), '\n', ' ', 'g')
try
execute 'vimgrep /^\s*\(struct\|class\)\s*' . expand("<cword>") . '/ ' . l:filenames
catch
echon 'No results found.'
sleep 800m
endtry
endfunction
nmap <Leader>fi :call SearchFunc()^M
Cela devrait chercher le mot sous le curseur lorsque vous tapez \ fi.
Expliciter le code:
Si vous appelez vimgrep normalement dans une fonction et il ne trouve pas de résultats, il renvoie une erreur qui semble assez laid, d'où je passai à l'intérieur d'un try/catch/endtry bloc. Quand une erreur se produit, nous supposons que c'est parce qu'il n'y avait pas de correspondance, et nous affichons un message, puis faisons une courte pause pour ne pas disparaître immédiatement. "Nmap" mappe une séquence de touches en "mode normal" pour faire quelque chose. Dans ce cas, il appelle la fonction que nous venons de définir. Vous devez taper Ctrl-V, Ctrl-M
à la fin de la ligne pour créer le ^M, de sorte qu'il vous simule en appuyant sur retour.
Si vous souhaitez modifier la fonction de prendre un argument que vous pourriez changer comme ceci:
function! SearchFunc(findme)
let l:filenames = substitute(glob("*.c") . glob("*.cpp") . glob("*.h"), '\n', ' ', 'g')
try
execute 'vimgrep /^\s*\(struct\|class\)\s*' . a:findme . '/ ' . l:filenames
catch
echon 'No results found.'
sleep 800m
endtry
endfunction
Ensuite, vous pouvez l'appeler en tapant
:call SearchFunc('foo')
Mais il semble plus facile pour utiliser simplement la fonctionnalité intégrée <cword>.
pourquoi ne pas utiliser CTags? – Artyom