Question

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

J'ai commencé à mémoriser une partie de la navigation dans les fichiers, mais j'ai du mal à naviguer entre plusieurs fichiers.

Dans mon flux de travail, il est assez courant que je bascule assez régulièrement entre une poignée de fichiers (assez de fichiers pour que les fenêtres à volet divisé deviennent trop petites).

J'utilise actuellement NERDTree mais je trouve que l'exploration des répertoires est fastidieuse et que j'utilise constamment CTRL+W h/CTRL+W je faire des allers-retours.

Je pense que je ferais mieux avec des onglets entre lesquels je peux facilement basculer, mais je dois peut-être utiliser un flux de travail différent.

J'aimerais aussi un raccourci "Aller au fichier..." comme CMD+T dans TextMate.J'ai trouvé fuzzy_file_finder mais cela nécessite que vim soit construit avec des liaisons Ruby, ce qui n'est pas le cas des installations natives sur lesquelles j'ai travaillé.

Alors que je pourrait reconstruire la principale raison pour laquelle je souhaite passer à vim est pour pouvoir disposer d'un environnement d'édition qui, je le sais, fonctionnera facilement sur n'importe quelle plate-forme.

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

Était-ce utile?

La solution

Je ne trouve pas que l'exploration dans les sous-répertoires par l'intermédiaire d'un ancien <<> soit aussi compliquée étant donné une configuration correcte pour la complétion par des tabulations.

Examinez l'option :e pour que Vim affiche une liste des complétions (noms de fichiers) dans le modèle au-dessus de la ligne de commande. Vous pouvez modifier l'option 'wildmenu' pour configurer davantage le type de complétion par tabulation que Vim fera.

Personnellement, j'utilise 'wildmode'.

Mon flux de travail est comme ceci:

  1. :set wildmode=full dans le répertoire de niveau supérieur de mon projet.
  2. Pour ouvrir le fichier :cd:

    • Scénario le plus simple: tapez foo/bar/baz.

    • S'il existe plusieurs fichiers commençant par :e f<tab>b<tab>b<tab><enter> dans l'un de ces répertoires, vous devrez peut-être effectuer une b ou <left> ou un autre <right> sur le clavier pour passer d'un fichier à l'autre (ou tapez encore quelques lettres pour lever l’ambiguïté).

    • Dans le pire des cas, il existe des fichiers et des répertoires qui portent un même nom et vous devez explorer ce répertoire. Dans ce cas, complétez le nom du répertoire par une tabulation, puis tapez <tab> pour faire un zoom avant.

  3. Ouvrez 2 ou 3 fenêtres et ouvrez tous les fichiers nécessaires.
  4. Une fois qu'un fichier est ouvert dans un tampon, ne le détruisez pas. Laissez-le ouvert en arrière-plan lorsque vous ouvrez de nouveaux fichiers. Il suffit de *<tab> créer un nouveau fichier dans la même fenêtre.
  5. Ensuite, utilisez :b <tab> pour parcourir les tampons déjà ouverts en arrière-plan. Si vous tapez :b foo<tab>, cela ne correspond qu'aux fichiers actuellement ouverts qui correspondent à foo.
  6. .

J’utilise également ces mappages pour faciliter l’ouverture de nouvelles fenêtres et leur permutation entre elles car c’est quelque chose que je fais si souvent.

" Window movements; I do this often enough to warrant using up M-arrows on this"
nnoremap <M-Right> <C-W><Right>
nnoremap <M-Left> <C-W><Left>
nnoremap <M-Up> <C-W><Up>
nnoremap <M-Down> <C-W><Down>

" Open window below instead of above"
nnoremap <C-W>N :let sb=&sb<BAR>set sb<BAR>new<BAR>let &sb=sb<CR>

" Vertical equivalent of C-w-n and C-w-N"
nnoremap <C-w>v :vnew<CR>
nnoremap <C-w>V :let spr=&spr<BAR>set nospr<BAR>vnew<BAR>let &spr=spr<CR>

" I open new windows to warrant using up C-M-arrows on this"
nmap <C-M-Up> <C-w>n
nmap <C-M-Down> <C-w>N
nmap <C-M-Right> <C-w>v
nmap <C-M-Left> <C-w>V

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

Autres conseils

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

:Sex

Je n'invente rien:)

:Sex, :Vex, :Tex et :Ex sont des commandes utiles pour explorer (explorer) les fichiers sur votre système si vous souhaitez utiliser quelque chose de différent de :e

(où S/V/T sont des abréviations pour Split / Vertical / Tab)

Si vous ne les avez pas déjà trouvées, vous pouvez vérifier:

  • l'original plug-in de recherche de flous - ce que l'IIRC n'a pas avoir les problèmes de liaison Ruby
  • le plugin Project - similaire à NERDTree
  • le plugin explorateur de tampons - affiche une liste des tampons ouverts

N'oubliez pas non plus que vous pouvez remapper les raccourcis clavier dans votre fichier .vimrc pour les rendre moins encombrants. J'utilise beaucoup les fenêtres divisées; J'ai trouvé les solutions suivantes qui facilitent grandement leur traitement:

" 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 <leader>v <c-w>v<c-w>l
noremap <leader>s <c-w>s<c-w>j
noremap <leader>x <c-w>c

" use ctrl-h/j/k/l to switch between splits
map <c-j> <c-w>j
map <c-k> <c-w>k
map <c-l> <c-w>l
map <c-h> <c-w>h

Je trouve LustyExplorer le meilleur à ce jour.

Vous pouvez ouvrir un fichier en ne tapant qu'une partie de son nom.

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

Si vous ouvrez un fichier à partir de la liste des tampons, vous n’avez pas à naviguer dans l’arborescence. 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 caractère.

Si vous avez:

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 b<Tab>h

  

Je pense que je ferais mieux avec des onglets I   peut facilement basculer entre, mais peut-être que je   besoin d'utiliser un flux de travail différent.

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

:tabe en ouvre un nouveau (abréviation de " onglet édition " ;, donc par exemple :tabe path/to/file pour vide ou gt pour ouvrir un fichier dans un nouvel onglet), vous pouvez déplacer entre les onglets adjacents avec gT / :help tabs, et il y a un tas d'autres commandes de navigation liées aux onglets, comme vous pouvez vous attendre de Vim (:vs)

Mon flux de travail pour les grands projets implique généralement plusieurs onglets comportant chacun entre 1 et 3 fenêtres, en fonction du type de contexte dont j'ai besoin. Cela fonctionne encore mieux si j'ai une fenêtre de terminal double largeur car je peux scinder verticalement avec :sb <partial_buf_name>. Ainsi, un seul onglet peut facilement afficher 4 fichiers à la fois avec suffisamment de place pour chacun.

Dernier conseil: j’utilise parfois le " switch buffer " commande (:set switchbuf=usetab) qui ressemble un peu à la recherche floue de TM, en ce sens que cela fonctionne plutôt bien, mais uniquement pour les tampons déjà ouverts. Encore parfait pour quand j'ai une douzaine de fichiers ou plus ouverts à la fois. (NB: il me fallait <=> dans mon vimrc pour que cela fonctionne avec les onglets, mais une fois que c'est défini, c'est génial.)

Découvrez le plugin ctrlp comme alternative au plugin Commande-T.C'est mieux que cela dans la mesure où il s'agit d'un script Vim « natif » et n'a pas besoin que Vim soit compilé avec Ruby (ou un autre support) alors qu'il s'exécute très rapidement et discrètement.

Si le fichier souhaité est déjà chargé dans une mémoire tampon (ce qui est probablement le cas si vous basculez régulièrement entre plusieurs fichiers), vous pouvez rapidement basculer vers la mémoire tampon avec la commande :b[uffer].

:b peut prendre un numéro de tampon en tant que paramètre ou (plus utilement) une chaîne qui correspond à la partie du chemin / nom du fichier. S'il y a plusieurs correspondances, vous pouvez utiliser la tabulation 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 mémoires tampons actuellement chargées.

Il est surprenant de voir que la :find commande n'a été mentionnée dans aucune des réponses. Je travaille habituellement 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/, il me suffit de taper :find applica puis d'appuyer sur onglet pour la saisie semi-automatique et sur entrer pour l'ouvrir.

J'utilise cette fonction pour rechercher des fichiers dans des sous-répertoires, mais je ne l'ai pas écrite. Cela provient du wiki vim :

function! Find(name) 
    let l:list=system("find . -name '".a:name."' | grep -v \".svn/\" | perl -ne 'print \"$.\\t$_\"'") 
    let l:num=strlen(substitute(l:list, "[^\n]", "", "g")) 
    if l:num 0 
            echo "Not a number" 
            return 
        endif 
        if l:inputl:num 
            echo "Out of range" 
            return 
        endif 
        let l:line=matchstr("\n".l:list, "\n".l:input."\t[^\n]*") 
    else 
      let l:line=l:list 
    endif 
    let l:line=substitute(l:line, "^[^\t]*\t./", "", "") 
    execute ":e ".l:line 
endfunction 

command! -nargs=1 Find :call Find("") 

Une chose que j’aime est qu’il supporte les caractères génériques (*). Il se comporte également bien pour plusieurs matches.

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

nmap <A-1> :b 1<CR>
nmap <A-2> :b 2<CR>
nmap <A-3> :b 3<CR>
...
nmap <A-0> :b 10<CR>
nmap <A-=> \bs

Vous pouvez également remplacer l'explorateur de mémoire tampon par la commande :ls, qui affiche essentiellement la même chose.

Le dernier mappe le Alt-= pour afficher l'explorateur de tampon.

Je n'utilise pas beaucoup Windows, car je n'ai généralement qu'une ou deux fenêtres.

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

connaissez-vous l'application MacVim? Il est poli pour VIM pour OS X et l’une de ses fonctionnalités est la prise en charge des onglets (CMD + T pour ouvrir un nouvel onglet), il possède un tiroir, 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 dans les 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 simple que je colle dans mon .vimrc. Il chargera un fichier depuis 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(<f-args>) 

Je peux donc simplement dire:

: Er Main.java

et il recherchera les sous-répertoires, trouvera Main.java et le chargera. Ce n'est pas bien se comporter 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 particulière de VIM (c’est-à-dire qu’il s’agit d’un plugin vanilla).

Mon flux de travail pour la recherche de 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 en cours qui commencent par myf. Vous pouvez également <Tab> les parcourir. Utilisez return to open:)

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top