2009-02-04 3 views

Répondre

3
" put in your ~/.vimrc file 
    " START search related configs and helps 
    " 
    " ignore case when searching 
    set ignorecase 

    " search as characters are entered, as you type in more characters, the search is refined 
    set incsearch 

    " highlight matches, in normal mode try typing * or even g* when cursor on string 
    set hlsearch 

    " yank those cheat commands, in normal mode type q: than p to paste in the opened cmdline 
    " how-to search for a string recursively 
    " :grep! "\<doLogErrorMsg\>" . -r 
    " 
    " how-to search recursively , omit log and git files 
    " :vimgrep /srch/ `find . -type f \| grep -v .git \| grep -v .log` 
    " :vimgrep /srch/ `find . -type f -name '*.pm' -o -name '*.pl'` 
    " 
    " how-to search for the "srch" from the current dir recursively in the shell 
    " vim -c ':vimgrep /srch/ `find . -type f \| grep -v .git \| grep -v .log`' 
    " 
    " how-to highlight the after the search the searchable string 
    " in normmal mode press g* when the cursor is on a matched string 

    " how-to jump between the search matches - open the quick fix window by 
    " :copen 22 

    " how-to to close the quick fix window 
    " :ccl 

    " F5 will find the next occurrence after vimgrep 
    map <F5> :cp!<CR> 

    " F6 will find the previous occurrence after vimgrep 
    map <F6> :cn!<CR> 

    " F8 search for word under the cursor recursively , :copen , to close -> :ccl 
    nnoremap <F8> :grep! "\<<cword>\>" . -r<CR>:copen 33<CR> 

    " omit a dir from all searches to perform globally 
    set wildignore+=**/node_modules/** 

    " use perl regexes - src: http://andrewradev.com/2011/05/08/vim-regexes/ 
    noremap//\v 
    " 
    " STOP search related configs and helps 
+1

J'aime beaucoup votre F5- F8 idées. Ce serait bien d'avoir quelques visualisations/sorties de ces commandes ici. Comment F8 est conçu pour fonctionner? Il recherche seulement le répertoire courant? - - L'omission d'un répertoire est une coutume - - pourquoi 'node_modules'? - - Comment regexes perl changent le fonctionnement par défaut de Vim? - - Voici comment j'ai conçu ma recherche de fichiers .tex https://askubuntu.com/a/789769/25388 Ce serait bien d'apprendre de vous comment l'améliorer. Ce n'est pas si intuitif que j'ai oublié moi-même souvent la logique. –

+0

node_modules est le répertoire contenant beaucoup de code js des modules npm si vous développez des frontaux ... c'est juste un exemple ... –

+1

faites une sauvegarde de votre .vimrc et ajoutez ces paramètres, chargez-les avec: donc% et que d'essayer de lancer les "help" dans les commandes ... vim est dur - vous devrez répéter ces milliers de fois, mais une fois que vous les maîtrisez, vous allez rire @everyone qui pointe leurs nouvelles fonctionnalités UI IDE. .. –

10

L'utilisation :set hlsearch mettra en évidence tous les matches en jaune vous permettant de numériser le fichier facilement des correspondances. Cela peut ne pas être ce que vous voulez bien, après la recherche,: g // p vous donnera la la liste correspond

+2

devrait être ': set hlsearch' non ': hlsearch'. –

+0

Il est également utile de mapper ': nohl' pour effacer les hautes lumières lorsque vous n'en avez plus besoin. – Kos

178
:g//p 

Dans sa forme plus:

:global/regular-expression/print 

Vous pouvez laisser le motif/regex et Vim réutilisera le terme de recherche précédent.

Anecdote: L'outil grep a été nommé d'après cette séquence de commandes.

+65

+1 pour trivia impressionnant !!! – manifest

+14

': g //' - puisque p (rint) est l'action par défaut, vous pouvez laisser cela de côté. – dekeguard

+3

': g /' est encore plus court! – Sparhawk

8

Pour développer ce ... au lieu de

/example 
:g//p 

vous pouvez également écrire directement

:g/example/p 

ou, comme p (Rint) est l'action par défaut pour la: g (MONDIALES) commande, cela peut être raccourci à

:g/example 

Et au lieu de p (Rint), d'autres actions sont possibles, par exemple effacer). Voir: help: global

42

Vous pouvez également faire:

g/pattern/#

qui imprime le motif que vous voulez et le numéro de la ligne.

+2

+1 pour les numéros de ligne. – iamnotmaynard

+0

Nice.Mais si vous avez déjà activé les numéros de ligne, alors # n'est pas nécessaire. Il montre les numéros de ligne par défaut –

38

si vous voulez regarder cette liste et sauter rapidement entre les matchs, pensez à utiliser

:vimgrep example %

ou

:grep example %

Cette renseignera la « liste d'erreurs » avec tous des matchs afin que vous puissiez utiliser :copen de les énumérer tous dans la mémoire tampon quickfix, appuyez sur Entrée sur une ligne particulière pour accéder à cette correspondance, ou utiliser des commandes comme :cn et :cp pour aller et venir.

pour une explication détaillée, voir my reply to a similar question

+3

+1 pour la capacité de naviguer dans les résultats de recherche! –

12

Une autre possibilité est d'utiliser les commandes include de recherche de fichiers.

[I 

Ceci affichera toutes les occurrences du mot sous le curseur. Il se peut que ce soit plus que ce dont vous avez besoin, car il recherchera également tous les fichiers inclus dans le fichier actuel.Mais la bonne chose à propos de cette commande est que l'affichage des résultats de recherche montre également le nombre de correspondances, en plus du nombre de lignes de chaque correspondance.

:help include-search 

pour voir beaucoup de variantes.

Une note sur

:g//p 

Cela peut être réduit davantage à

:g// 

parce que, comme d'autres l'ont dit, p (Rint) est l'action par défaut.

+0

Est-il possible d'obtenir le résultat de '[I' avec le contexte, comme sur grep' --contexte 9'? –

23

J'ai juste appris un nouveau: le Location List!
Tapez :lvim foo % pour rechercher foo dans le fichier actuel et entrez tous les résultats contenant foo dans la liste de lieux .
Tapez :lopen pour ouvrir la liste des emplacements dans la fenêtre de raccourci, qui est entièrement navigable comme d'habitude.
Utilisez :lnext/:lprevious à à la liste (utilisation tpope/dépréciés applications pour la meilleure expérience)

+0

est-il un paramètre pour avoir: lopen fait par défaut? – lkraav

+1

Bon conseil! Cela m'a amené à faire ce mapping qui augmente automatiquement le mot sous le curseur et ne Lopen un seul coup: nnoremap f: lvim/ = expand ("") /% : Lopen

4
g/pattern 

Si vous avez :set number, les numéros de ligne de commande affiche ci-dessus ainsi.

Si vous n'avez pas :set number, puis

g/pattern/# 

affiche les numéros de ligne.

2

vous pouvez obtenir une fenêtre quickfix agréable avec les résultats sous forme de votre modèle de recherche en cours

:vim // % 
:copen 

super pratique si vous Crafted déjà un modèle de recherche complexe en utilisant seulement /pattern

Modifier: ont simplement trouvé cela fonctionne également pour tous les tampons ouverts

:bufdo vimgrepadd // % 
:copen 
0

Ctrl-f pour lister tous les résultats de la recherche:

nmap <C-f> :vimgrep /<C-r>//g %<CR> \| !:copen <Enter> 
Questions connexes