4 votes

Comment afficher tous les résultats d'une recherche dans vim ?

Lorsque l'on recherche une chaîne de caractères avec notepad++, une nouvelle fenêtre s'ouvre et affiche find résultats. Je souhaite utiliser cette fonctionnalité dans vim. Après avoir cherché sur Google, j'ai trouvé quelques suggestions :

vimgrep /<pattern>/ %
copen

Il est possible de créer des cartes qui exécutent ces deux commandes. Le motif devrait être le mot courant : peut-être le mot-clé cword dans vim ?

4voto

sehe Points 123151

Je suggère lvimgrep (pour que vous puissiez utiliser quickfix pour :make)

:nnoremap <F6> :lvimgrep /\M\<<C-R><C-W>\m\>/ **/*.[ch]pp **/Makefile | lopen<CR>

De même, si vous juste que l'on souhaite trouver dans le fichier actuel :

:g/<pattern>/

invoquera 'print' (commande par défaut) sur chaque ligne correspondante.

:v//               " non-matching lines
:g//-1             " lines preceding the matching line
:g//-1,+1          " lines around the matching line
etc.

global est bien plus utile :

g/foo/ join " join all lines containing foo

etc.

3voto

Kent Points 71470

L'exigence est en fait simple, mais pour obtenir le modèle saisi par l'utilisateur, vous avez besoin d'une fonction.

function! FindAll()
    call inputsave()
    let p = input('Enter pattern:')
    call inputrestore()
    execute 'vimgrep "'.p.'" % |copen'
endfunction

si vous voulez avoir une cartographie, ajoutez cette ligne :

nnoremap <F8> :call FindAll()<cr>

mais comme je l'ai indiqué dans votre question. % peut ne pas fonctionner pour les tampons sans nom.

1voto

romainl Points 55506

Ces deux commandements peuvent être raccourcis et enchaînés : :vim foo %|co . Vous pouvez tirer le mot sous le curseur comme suit : :vim <C-r><C-w> %|co .

Voici un mappage rapide en mode normal que vous pouvez utiliser pour lister toutes les occurrences du mot sous votre curseur dans la fenêtre de correction rapide :

nnoremap <F6> :vimgrep /<C-r><C-w>/j % <bar> cwindow<cr>

Vous pouvez également utiliser :il[ist] foo pour afficher une liste de toutes les occurrences de foo o [I pour afficher la même liste pour le mot sous votre curseur.

Lorsque la liste est affichée, utilisez :{line number} pour passer à la ligne correspondante.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X