L'équivalent le plus proche (" le plus proche ", pas " exact ") de la ST2 Ctrl + P est un plugin appelé, préparez-vous CtrlP . Il existe d'autres plugins similaires comme Command-T o FuzzyFinder .
J'utilise CtrlP et je l'adore, mais je soutiens de tout cœur votre décision de vous passer de plugins. Ce n'est pas la voie la plus facile à suivre, mais elle sera payante à long terme.
Ouverture de fichiers
La façon la plus simple d'ouvrir un fichier est :e /path/to/filename
. Heureusement, vous disposez de la complétion par tabulation et des caractères génériques : les classiques *
et une spéciale, **
qui signifie "tout sous-répertoire".
En combinant tout cela, vous pouvez faire :
:e **/*foo<Tab>
pour choisir parmi tous les fichiers contenant foo
dans leur nom sous le répertoire de travail ou :
:e **/*foo/*bar<Tab>
pour choisir parmi tous les fichiers contenant bar
dans leur nom sous n'importe quel sous-répertoire contenant foo
dans son nom, n'importe où sous le répertoire de travail.
Bien sûr, cela fonctionne pour :tabe[dit]
, :sp[lit]
y :vs[plit]
aussi.
Ces commandes sont cependant limitées à un seul fichier. Utilisez :next
pour ouvrir plusieurs fichiers :
:next **/*.js
et jetez un coup d'œil à :help arglist
.
Sauter entre les tampons
:b[uffer]
est la commande de commutation de tampon de base :
:b4 " switch to buffer number 4
:bn " switch to next buffer in the buffer list
:bp " switch to previous buffer in the buffer list
:bf " switch to first buffer in the buffer list
:bl " switch to last buffer in the buffer list
:b foo<Tab> " switch by buffer name with tab-completion
:b# " switch to the alternate file
Notez que plusieurs de ces commandes et de leurs proches acceptent un compte.
El :ls
vous montre une liste des tampons chargés. C'est un peu "spécial", cependant : un numéro est attribué aux tampons lorsqu'ils sont créés, de sorte que vous pouvez avoir une liste qui ressemble à ceci 1 2 5
si vous supprimez des tampons. C'est un peu maladroit, oui, et cela rend le passage à un tampon par son numéro un peu trop gênant. Préférez la commutation par nom partiel, :b foo<Tab>
ou le cyclisme, :bn :bp
.
Quoi qu'il en soit, voici un mappage sympa qui répertorie tous les tampons chargés et remplit l'invite pour vous, en attendant que vous tapiez le numéro d'un tampon et que vous appuyiez sur la touche <enter>
:
nnoremap gb :ls<CR>:b<Space>
Avec ce mappage, le passage à un autre tampon est aussi simple que cela :
gb
(quickly scanning the list)
3<CR>
ou :
gb
(quickly scanning the list)
foo<tab><CR>
L'idée vient de cette image extrait de la collection d'infographies sur Vim de Bairui :
Vim dispose également de <C-^>
(o <C-6>
sur certains claviers)-l'équivalent en mode normal de :b#
-pour sauter entre le tampon actuel et le précédent. Utilisez-le si vous alternez souvent entre deux tampons.
Lisez tout sur les tampons dans :help buffers
.
Aller à la déclaration
Dans un fichier, vous pouvez utiliser gd
o gD
.
Au sein d'un projet, la fonction "tags" de Vim est votre amie mais vous aurez besoin d'un indexeur de code externe comme ctags ou cscope. Les commandes les plus basiques sont :tag foo
y <C-]>
avec le curseur sur un nom de méthode. Les deux outils sont bien intégrés dans Vim : voir :help tags
, :help ctags
y :help cscope
.
Pour ce que ça vaut, j'utilise beaucoup la navigation par balises pour me déplacer dans un projet (en utilisant la fonction de CtrlP :CtrlPTag
y :CtrlPBufTag
mais aussi les commandes intégrées) et ma méthode "générique" préférée de changement de tampon est le nom.
Déploiement de votre configuration
Beaucoup d'utilisateurs de Vim placent leur configuration sous contrôle de version, ce qui rend très rapide et facile d'installer votre propre config sur une nouvelle machine. Pensez-y.
EDIT
Il y a quelques mois, j'ai dû travailler sur une machine distante avec un Vim obsolète. J'aurais pu installer un Vim correct et cloner ma propre configuration bien-aimée, mais j'ai décidé de voyager léger, cette fois, afin d'"affûter la scie". J'ai rapidement construit une configuration minimaliste .vimrc
et revisité quelques fonctionnalités natives à moitié oubliées. Après ce concert, j'ai décidé que CtrlP n'était pas si nécessaire et je m'en suis débarrassé : les fonctionnalités natives et les mappings personnalisés ne sont pas aussi sexy mais ils font le travail sans trop de dépendances.
Jongler avec les dossiers
set path=.,**
nnoremap <leader>f :find *
nnoremap <leader>s :sfind *
nnoremap <leader>v :vert sfind *
nnoremap <leader>t :tabfind *
:find
est une commande vraiment importante dès lors que vous set path
correctement. Avec mes paramètres, ,ffoo<Tab>
trouvera tous les fichiers contenant foo
sous le répertoire courant, de manière récursive. C'est rapide, intuitif et léger. Bien sûr, je bénéficie de la même complétion et des mêmes caractères génériques qu'avec :edit
et des amis.
Pour rendre le processus encore plus rapide, les mappings suivants me permettent de sauter des parties entières du projet et de trouver des fichiers de manière récursive sous le répertoire du fichier actuel :
nnoremap <leader>F :find <C-R>=expand('%:h').'/*'<CR>
nnoremap <leader>S :sfind <C-R>=expand('%:h').'/*'<CR>
nnoremap <leader>V :vert sfind <C-R>=expand('%:h').'/*'<CR>
nnoremap <leader>T :tabfind <C-R>=expand('%:h').'/*'<CR>
AVERTISSEMENT ! Le site path
L'option est extrêmement puissant. La valeur ci-dessus- `.,` -travaux pour moi , comme valeur de repli par défaut . Dans le monde réel, la valeur exacte de l'option sera différente d'un projet/langue/framework/workflow à l'autre, donc l'option approprié dépend entièrement de votre besoins. Ne copiez pas aveuglément cette ligne et ne vous attendez pas à ce qu'elle résolve tous vos problèmes.**
Jongler avec les tampons
set wildcharm=<C-z>
nnoremap <leader>b :buffer <C-z><S-Tab>
nnoremap <leader>B :sbuffer <C-z><S-Tab>
Les mappings ci-dessus listent les tampons disponibles dans le "wildmenu" avec une invite vide, me permettant de naviguer dans le menu avec <Tab>
ou tapez quelques lettres et <Tab>
à nouveau pour réduire la liste. Comme pour les mappages de fichiers ci-dessus, le processus est rapide et presque sans friction.
nnoremap <PageUp> :bprevious<CR>
nnoremap <PageDown> :bnext<CR>
Ces correspondances parlent d'elles-mêmes.
Jongler avec les étiquettes
nnoremap <leader>j :tjump /
Ce mappage utilise la recherche par regex au lieu de la recherche par mot entier, ce qui me permet de faire ,jba<Tab>
pour trouver le tag foobarbaz()
.
Oui, le fuzzy matching crée une dépendance, mais vous pouvez être tout aussi productif sans lui. Et pour une fraction du coût.
PLUS D'INFORMATIONS
Quelques conseils et astuces supplémentaires
Options du menu sauvage
Le "wildmenu", activé avec set wildmenu
permet de faciliter la navigation dans les fichiers et les tampons. Son comportement est régi par une série d'options qui méritent d'être étudiées :
wildmode
indique à Vim comment vous voulez que le "wildmenu" se comporte :
set wildmode=list:full
wildignore
filtre tout ce qui est superflu :
set wildignore=*.swp,*.bak
set wildignore+=*.pyc,*.class,*.sln,*.Master,*.csproj,*.csproj.user,*.cache,*.dll,*.pdb,*.min.*
set wildignore+=*/.git/**/*,*/.hg/**/*,*/.svn/**/*
set wildignore+=tags
set wildignore+=*.tar.*
wildignorecase
vous permet de rechercher foo
et trouver Foo
:
set wildignorecase
Marquage des dossiers
augroup VIMRC
autocmd!
autocmd BufLeave *.css normal! mC
autocmd BufLeave *.html normal! mH
autocmd BufLeave *.js normal! mJ
autocmd BufLeave *.php normal! mP
augroup END
J'ai récemment trouvé cette perle dans le livre de quelqu'un d'autre. ~/.vimrc
. Il crée une marque de fichier à la position exacte du curseur chaque fois que vous quittez un tampon, de sorte que, où que vous soyez, 'J
saute vers le dernier tampon JavaScript que vous avez édité. Génial.