L'équivalent le plus proche ("le plus proche", pas "exact") de ST2 Ctrl+ Pest un plugin appelé, préparez-vous… CtrlP . Il existe d'autres plugins similaires comme Command-T ou FuzzyFinder .
J'utilise CtrlP et j'adore ça mais je soutiens sans réserve votre décision de devenir "sans plugin". Ce n'est pas la façon la plus simple de procéder, mais elle sera payante à long terme.
Ouverture de fichiers
Le moyen le plus simple d'ouvrir un fichier est :e /path/to/filename
. Heureusement, vous obtenez des tabulations et des jokers: le classique *
et un spécial **
, qui signifie "tout sous-répertoire".
En combinant tout cela, vous pouvez faire:
:e **/*foo<Tab>
de choisir parmi tous les fichiers contenant foo
dans leur nom sous le répertoire de travail ou:
:e **/*foo/*bar<Tab>
de 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]
et :vs[plit]
, aussi.
Ces commandes sont cependant limitées à un seul fichier. Utilisez :next
pour ouvrir plusieurs fichiers:
:next **/*.js
et jetez un oeil à :help arglist
.
Sauter entre les tampons
:b[uffer]
est la commande de base de commutation de tampon:
: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 beaucoup de ces commandes et leurs proches acceptent un décompte.
La :ls
commande vous montre une liste des tampons chargés. C'est un peu "spécial", cependant: les tampons reçoivent un numéro lors de leur création afin que vous puissiez avoir une liste qui ressemble à 1 2 5
si vous supprimez des tampons. C'est un peu gênant, oui, et cela rend le passage à un tampon par son numéro un peu trop gênant. Je préfère passer par une partie du nom, :b foo<Tab>
ou du vélo, :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 appuyez sur <enter>
:
nnoremap gb :ls<CR>:b<Space>
Avec ce mappage, passer à un autre tampon est aussi simple que:
gb
(quickly scanning the list)
3<CR>
ou:
gb
(quickly scanning the list)
foo<tab><CR>
L'idée vient de cette image tirée de la collection d'infographies Vim de Bairui :
Vim a aussi <C-^>
(ou <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
ou gD
.
Dans un projet, la fonction "tags" de Vim est votre ami mais vous aurez besoin d'un indexeur de code externe comme ctags ou cscope. Les commandes les plus élémentaires sont :tag foo
et <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
et :help cscope
.
Pour ce que ça vaut, j'utilise beaucoup la navigation par balises pour me déplacer dans un projet (en utilisant les commandes CtrlP :CtrlPTag
et les :CtrlPBufTag
commandes, principalement, mais aussi celles intégrées) et ma méthode de commutation de tampon "générique" préférée est par nom.
Déployer votre configuration
De nombreux utilisateurs de Vim placent leur configuration sous contrôle de version, ce qui rend très rapide et facile l'installation de votre propre configuration sur une nouvelle machine. Pensez-y.
ÉDITER
Il y a quelques mois, j'ai dû travailler sur une machine distante avec un Vim obsolète. J'aurais pu installer un Vim approprié et cloner ma propre config bien-aimée mais j'ai décidé de voyager léger, cette fois, pour «affûter la scie». J'ai rapidement construit un 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 mappages personnalisés ne sont pas aussi sexy, mais ils font le travail sans trop de dépendances.
Jongler avec des fichiers
set path=.,**
nnoremap <leader>f :find *
nnoremap <leader>s :sfind *
nnoremap <leader>v :vert sfind *
nnoremap <leader>t :tabfind *
:find
est une commande vraiment géniale dès que vous avez set path
correctement. Avec mes paramètres, ,ffoo<Tab>
retrouvera 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 profite de la même finition et des mêmes wildcards qu'avec :edit
et amis.
Pour rendre le processus encore plus rapide, les mappages suivants me permettent de sauter des parties entières du projet et de trouver des fichiers de manière récursive dans 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! L' path
option est extrêmement puissante. La valeur ci-dessus - .,**
fonctionne pour moi, mais les langues que j'utilise n'ont pas de bibliothèque standard. La valeur appropriée dépend entièrement de vos besoins.
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 mappages ci-dessus répertorient les tampons disponibles dans le "wildmenu" avec une invite vide, me permettant de naviguer dans le menu avec <Tab>
ou de taper quelques lettres et <Tab>
encore de réduire la liste. Comme avec les mappages de fichiers ci-dessus, le processus est rapide et presque sans friction.
nnoremap <PageUp> :bprevious<CR>
nnoremap <PageDown> :bnext<CR>
Ces mappages parlent d'eux-mêmes.
Jongler avec les tags
nnoremap <leader>j :tjump /
Ce mappage utilise la recherche regex au lieu de la recherche par mot entier afin que je puisse le faire ,jba<Tab>
pour trouver une balise foobarbaz()
.
Oui, la correspondance floue crée une dépendance, mais vous pouvez être tout aussi productif sans elle. Et pour une fraction du coût.
PLUS EDIT
Quelques trucs / astuces supplémentaires…
Options du Wildmenu
Le "wildmenu", activé avec set wildmenu
, facilite la navigation dans les fichiers / tampons. Son comportement est régi par un tas 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 toute la cruauté:
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 de trouver Foo
:
set wildignorecase
Marques de fichier
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é ce bijou chez quelqu'un d'autre ~/.vimrc
. Il crée une marque de fichier à la position exacte du curseur chaque fois que vous quittez une mémoire tampon afin que, où que vous soyez, 'J
saute au dernier tampon JavaScript que vous avez modifié. Impressionnant.