Navigation dans les fichiers Vim

J’essaie vraiment d’apprendre vim après avoir utilisé TextMate ces dernières années.

J’ai commencé à mettre une partie de la navigation dans les fichiers en mémoire, mais j’ai du mal à naviguer entre plusieurs fichiers.

Dans mon stream de travail, il est assez courant de passer régulièrement d’une poignée de fichiers (suffisamment de fichiers pour que les fenêtres à deux volets deviennent trop petites).

J’utilise actuellement NERDTree mais je trouve que l’exploration des répertoires encombrants et l’utilisation constante de CTRL + W h / CTRL + W l permettent de revenir en arrière.

Je pense que je ferais mieux avec les tabs, je peux facilement basculer entre, mais peut-être que je dois utiliser un stream de travail différent.

Je voudrais aussi un raccourci “Aller au fichier …” comme CMD + T dans TextMate. J’ai trouvé fuzzy_file_finder mais il faut que vim soit construit avec des liaisons Ruby, ce qui n’est pas le cas des installations natives sur lesquelles j’ai travaillé.

Bien que je puisse reconstruire la raison principale pour laquelle je veux passer à vim, je peux avoir un seul environnement d’édition qui, je le sais, fonctionnera facilement sur toutes les plates-formes.

Les options sont écrasantes: toutes les idées sont très appréciées!

Je ne trouve pas que l’exploration des sous-répertoires via plain vieux :e soit si compliquée étant donné une configuration correcte pour l’achèvement des tabulations.

Regardez dans l’option 'wildmenu' pour que Vim affiche une liste de complétions (noms de fichiers) dans le modeline au-dessus de la ligne de commande. Vous pouvez modifier l’option 'wildmode' pour configurer davantage le type de complétion par tabulation que Vim fera.

Personnellement j’utilise :set wildmode=full .

Mon workflow est comme ceci:

  1. :cd dans le répertoire toplevel de mon projet.
  2. Pour ouvrir le fichier foo/bar/baz :

    • Scénario le plus simple: tapez :e fbb .

    • S’il y a plus d’un fichier commençant par b dans l’un de ces répertoires, vous devrez peut-être faire un ou ou un autre sur le clavier pour sauter entre eux (ou taper quelques lettres pour plus d’ambiguïté) .

    • Dans le pire des cas, il existe des fichiers et des répertoires qui partagent un nom et que vous devez explorer dans le répertoire. Dans ce cas, complétez le nom du répertoire par tabulation, puis tapez * pour accéder au détail.

  3. Ouvrez 2 ou 3 fenêtres et ouvrez les fichiers dans tous les cas de besoin.
  4. Une fois qu’un fichier est ouvert dans un tampon, ne tuez pas le tampon. Laissez-le ouvert en arrière-plan lorsque vous ouvrez de nouveaux fichiers. Juste :e un nouveau fichier dans la même fenêtre.
  5. Ensuite, utilisez :b pour parcourir les tampons déjà ouverts en arrière-plan. Si vous tapez :b foo il ne sera associé qu’aux fichiers actuellement ouverts qui correspondent à foo .

J’utilise également ces mappages pour faciliter l’ouverture de nouvelles fenêtres et pour passer d’un écran à l’autre car c’est souvent ce que je fais.

 " Window movements; I do this often enough to warrant using up M-arrows on this" nnoremap   nnoremap   nnoremap   nnoremap   " Open window below instead of above" nnoremap N :let sb=&sbset sbnewlet &sb=sb " Vertical equivalent of Cwn and CwN" nnoremap v :vnew nnoremap V :let spr=&sprset nosprvnewlet &spr=spr " I open new windows to warrant using up CM-arrows on this" nmap  n nmap  N nmap  v nmap  V 

Il me faut quelques secondes pour ouvrir Vim, configurer des fenêtres et y ouvrir quelques fichiers. Personnellement, je n’ai jamais trouvé aucun des scripts de navigation de fichiers tiers très utile.

Un moyen simple de parcourir le système de fichiers est la commande:

 :Sex 

Je ne fais pas ça 🙂

:Sex ,: Vex,: :Tex et :Ex sont tous des commandes utiles pour ex (faire un tour) des fichiers sur votre système si vous voulez utiliser quelque chose de différent de :e

(où S/V/T sont courts pour Split / Vertical / Tab)

Si vous ne les avez pas déjà trouvés, vous voudrez peut-être vérifier:

  • le plugin Fuzzy Finder original – qui IIRC n’a pas les problèmes de liaison Ruby
  • le plugin Project – similaire à NERDTree
  • le plugin explorateur de tampon – affiche une liste de tampons ouverts

Gardez également à l’esprit que vous pouvez reconfigurer les raccourcis clavier de votre fichier .vimrc pour les rendre moins encombrants. J’utilise beaucoup les fenêtres fractionnées; J’ai trouvé les choses suivantes:

 " set your own personal modifier key to something handy let mapleader = "," " use ,v to make a new vertical split, ,s for horiz, ,x to close a split noremap v vl noremap s sj noremap x c " use ctrl-h/j/k/l to switch between splits map  j map  k map  l map  h 

Je trouve LustyExplorer le meilleur jusqu’à présent.

Vous pouvez ouvrir un fichier en ne saisissant qu’une partie de son nom.

Vous pouvez ouvrir un fichier à partir du répertoire du fichier en cours, du fichier pwd cours ou de la liste des tampons.

Si vous ouvrez un fichier depuis la liste des tampons, vous n’avez pas à naviguer dans l’arborescence des répertoires, mais malheureusement, pour les deux autres modes, vous devez toujours naviguer dans l’arborescence. La bonne chose est que vous n’avez pas à partir du premier personnage.

Si tu as:

 dir_a/ ... dir_b/ file.js file.html 

et vous voulez ouvrir dir_b/file.html vous pouvez généralement le trouver en tapant bh

Je pense que je ferais mieux avec les tabs, je peux facilement basculer entre, mais peut-être que je dois utiliser un stream de travail différent.

Êtes-vous au courant des tabs de Vim? Vous ne savez pas si vous vous référiez aux propres tabs de Vim, ou si vous recherchez ceux de TextMate. La version de Vim que vous utilisez n’est pas claire, mais elle contient des tabs depuis au moins la version 7.0 (qui semble être installée partout où je regarde récemment), et ils sont géniaux.

:tabe ouvre un nouveau (abréviation de “tab edit”, par exemple :tabe pour empty ou :tabe path/to/file pour ouvrir un fichier dans un nouvel onglet), vous pouvez vous déplacer entre les tabs adjacents avec gt / gT , et il y a aussi un tas d’autres commandes de navigation liées aux tabs, comme on peut s’y attendre de Vim ( :help tabs )

Mon stream de travail pour les grands projets a tendance à impliquer un tas d’tabs, chacun comportant entre 1 et 3 fenêtres selon le type de contexte dont j’ai besoin. Cela fonctionne encore mieux si j’ai une fenêtre de terminal à double largeur car je peux diviser verticalement avec :vs , alors un seul onglet peut facilement afficher 4 fichiers à la fois avec beaucoup d’espace pour chacun.

Dernier conseil: j’utilise parfois la commande “switch buffer” ( :sb ) qui ressemble à la recherche floue de TM, en ce sens qu’elle fonctionne plutôt bien, mais uniquement pour les tampons déjà ouverts. Toujours aussi bien quand j’ai une douzaine de fichiers ouverts en même temps. (NB: je devais :set switchbuf=usetab dans mon vimrc pour que cela fonctionne sur tous les tabs, mais une fois que c’est réglé, c’est génial.)

Découvrez le plug-in ctrlp comme alternative au plug in Command-T . C’est mieux que cela en ce sens qu’il s’agit d’un script Vim “natif” et qu’il n’est pas nécessaire de comstackr Vim avec Ruby (ou un autre support) alors qu’il s’exécute très rapidement et discrètement.

Si le fichier que vous souhaitez est déjà chargé dans un tampon (ce qui est probable si vous passez régulièrement d’une poignée de fichiers), vous pouvez rapidement basculer vers le tampon avec la commande :b[uffer] .

:b peut prendre un numéro de tampon comme paramètre ou (plus utile) une chaîne correspondant à une partie du chemin / nom du fichier. S’il existe plusieurs correspondances, vous pouvez utiliser l’onglet pour les parcourir.

Si vous voulez diviser la fenêtre et ouvrir le tampon dans la nouvelle fenêtre, utilisez :sb name

Si vous voulez ouvrir le tampon dans un nouvel onglet, utilisez :tab b name

Vous pouvez également utiliser la commande :ls pour afficher une liste des tampons actuellement chargés.

Il est surprenant de voir que :find command n’a été mentionné dans aucune des réponses. Je travaille généralement avec des projets de rails où je dois approfondir la hiérarchie des répertoires. Donc, pour un fichier application.css , situé dans app/assets/stylesheets/ tout ce que j’ai à taper, c’est :find applica , puis appuyez sur tab pour effectuer une saisie semi-automatique et entrer pour ouvrir.

J’utilise cette fonction pour trouver des fichiers dans les sous-répertoires, mais je ne l’ai pas écrite. C’est à partir du wiki vim :

 fonction!  Rechercher (nom) 
     Soit l: list = system ("find. -name" ".a: name." '| grep -v \ ". svn / \" | perl -ne' print \ "$. \\ t $ _ \" ' ") 
     let l: num = strlen (substitut (l: list, "[^ \ n]", "", "g")) 
     si l: num 0 
             echo "Pas un numéro" 
             revenir 
         fin si 
         si l: inputl: num 
             echo "Hors de scope" 
             revenir 
         fin si 
         let l: line = matchstr ("\ n" .l: list, "\ n" .l: input. "\ t [^ \ n] *") 
     autre 
       let l: line = l: liste 
     fin si 
     let l: line = substitute (l: ligne, "^ [^ \ t] * \ t. /", "", "") 
     exécuter ": e" .l: ligne 
 fonction finale 

 commander!  -nargs = 1 Rechercher: appel Trouver ("") 

Une chose que j’aime, c’est qu’elle prend en charge les caractères génériques (*). Il se comporte également bien pour plusieurs matchs.

En plus des réponses aux wildmenu , j’utilise le plug- in BufExplorer et les mappages suivants pour sauter rapidement les tampons:

 nmap  :b 1 nmap  :b 2 nmap  :b 3 ... nmap  :b 10 nmap  \bs 

Ou vous pouvez simplement remplacer l’explorateur de mémoire tampon par la commande :ls , qui affiche essentiellement la même chose.

Le dernier correspond à Alt-= pour afficher l’explorateur de mémoire tampon.

Je n’utilise pas beaucoup Windows car j’ai généralement une ou deux fenêtres seulement.

J’ai également modifié la statusline d’ statusline pour inclure le numéro de tampon %2n , de sorte que je sais toujours quel tampon est en cours d’édition. Voir :h statusline

connaissez-vous l’application MacVim? C’est VIM poli pour OS X, et l’une de ses fonctionnalités est le support des tabs (CMD + T pour ouvrir un nouvel onglet), il a des tiroirs, etc … (lisez ceci: http://zerokspot.com/weblog/2008 / 08/03 / macvim-as-textmate-replacement / )

Essayez-le!

Cordialement Michal

NerdTree est idéal pour la navigation de fichiers dans vim.

Le lien ci-dessous est une bonne introduction à nerdtree.

http://www.catonmat.net/blog/vim-plugins-nerdtree-vim/

Voici quelque chose d’assez sortingvial que je .vimrc dans mon .vimrc . Il chargera un fichier à partir de n’importe quel sous-répertoire.

 " load from an unspecified subdirectory function! LoadFromSubdirectory(filespec) let filename = glob("`find . -name '" . a:filespec . "' -print`") exe ':e '.filename endfunction :command -nargs=1 Er :call LoadFromSubdirectory() 

Alors je peux juste dire:

: Er Main.java

et il cherchera les sous-répertoires, trouvera Main.java et le chargera. Il ne se comporte pas bien pour plusieurs fichiers du même nom, mais c’est simple et rapide.

L’autre outil que j’utilise est VTreeExplorer , qui fournit une fenêtre de fichiers / répertoires basée sur une arborescence et ne nécessite aucune option de construction spéciale de VIM (c’est-à-dire un plugin vanilla).

Mon stream de travail pour trouver des fichiers est le wildmenu, autocwd et :e .

Parties pertinentes dans le .vimrc :

 set wildmenu set wildignore=*.dll,*.o,*.pyc,*.bak,*.exe,*.jpg,*.jpeg,*.png,*.gif set wildmode=list:full set autochdir let g:netrw_list_hide='^\.,.\(pyc\|pyo\|o\)$' 

Et comment l’utiliser:

 :e myf^D 

Cela donne tous les fichiers du répertoire courant qui commencent par myf. Vous pouvez également travers eux. Utilisez retourner pour ouvrir 🙂

^D vous donnera toujours tous les matchs. Comme autocmd va toujours dans le dossier du fichier en cours, il est facile de travailler avec. Si vous êtes dans foo/bar.py et que vous voulez aller dans foo/baz.py vous ne faites que :e baz.py et vous êtes là. Cela fonctionne aussi avec les tampons ( :b foo^D liste tous les tampons commençant par foo)