édition / commutation efficace entre plusieurs fichiers dans de grandes structures de répertoires


11

Je ne suis en aucun cas un utilisateur expérimenté de vim, je commence tout juste à saisir les mouvements et commandes avancés avec vim. Mais il y a un inconvénient que je n'arrive pas à contourner.

J'ai grandi avec des programmes graphiques pour écrire du code, mais j'ai récemment commencé à utiliser vim sur ssh & screen pour travailler sur des projets assez volumineux avec de nombreux dossiers.

Je suis curieux de savoir ce que les maîtres vim font pour travailler avec plusieurs fichiers rapidement et facilement. Prenons l'exemple d'une application rails. Supposons que vous souhaitiez modifier un contrôleur pour exécuter.

vim app/controllers/controller.rb

Mais ensuite, vous voulez rapidement passer à l'édition d'une vue ou d'une migration de base de données, mon premier réflexe est de :wq, revenir à bash pour naviguer vers ce répertoire et redémarrer vim dans un tout nouveau tampon.

C'est évidemment carrément faux.

J'ai appris plusieurs choses comme:

  • Le serveur client (mais je ne veux pas utiliser X sur ssh et cela semble être le seul moyen)
  • :epour ouvrir un autre fichier en parcourant, mais je n'arrive pas à le faire très rapidement. L'onglet complet me fait vraiment trébucher.
  • Ouverture d'un répertoire entier et recherche dans les tampons.
  • NERDTree est prometteur, mais je veux vraiment rester à l'écart de toute représentation graphique pour continuer à me forcer à maîtriser la navigation en ligne de commande

Je m'excuse d'être naïf, mais je veux vraiment apprendre la bonne façon de procéder même si c'est très subjectif.

Quelles sont vos méthodes et que recommanderiez-vous?


Pour Ruby on Rails en particulier, le plug-in rails.vim de Tim Pope a de belles commandes (avec complétion; extensible à de nouvelles hiérarchies) pour ouvrir des fichiers pour les modèles / vues / contrôleurs / migrations / tests /… (voir rails-type-navigationdans la documentation , ou :help rails-type-navigationquand vous l'installer).
Chris Johnsen

Réponses:


7

Il est possible de configurer vim pour éditer plusieurs fichiers sans avoir à quitter du tout. Vous utilisez plusieurs tampons et basculez entre eux. Puisque vous utilisez vim à l'intérieur de l'écran, vous pouvez mettre ce qui suit dans votre ~ / .vimrc pour l'activer.

   set hidden
   syntax enable
   source $VIMRUNTIME/menu.vim
   set wildmenu
   set cpo-=<
   set wcm=<C-Z>
   map <F4> :emenu <C-Z>
   nmap <Esc>[5D :bp<CR>
   nmap <Esc>Od  :bp<CR>
   nmap <Esc>OD  :bp<CR>
   nmap <Esc>[5C :bn<CR>
   nmap <Esc>Oc  :bn<CR>
   nmap <Esc>OC  :bn<CR>
   nmap <Esc>[3~ :bd<CR>
   nmap ZZ :bd<CR>

Ces mappages de touches sont mappés aux touches de direction Ctrl-Gauche et Droite pour basculer entre les tampons. La touche F4 invoque le même menu que l'interface graphique afficherait. En appuyant sur l'onglet affiche également maintenant un petit menu pour sélectionner la fin lorsque votre onglet de presse.


Très bon conseil, ces trois réponses m'ont vraiment aidé à me sentir plus à l'aise. Une bonne gestion des tampons sans plugins est une grande compétence. J'adore le menu sauvage!
fév

5

Hah! J'étais exactement comme toi, donc je sais exactement d' où tu viens. Même maintenant que je sais ce que je fais dans une certaine mesure (je ne suis pas un dieu vim, mais j'espère y arriver), je ferai encore de temps en temps un: wq et reviendrai à ma coquille.

Vérifiez ceci - cela pourrait vous aider. (Cela m'aidera aussi, car je ne l'ai jamais su. C'est ce qui est génial avec les sites stackexchange - vous apprenez en aidant les autres à apprendre!)

Voici certaines choses que je fais.

  1. La :ecommande. Depuis l'intérieur de vim, lors de l'édition d'un fichier, vous pouvez faire quelque chose comme :e dir/subdir/otherfileça et il l'ouvrira dans un nouveau tampon, ce qui signifie que vous aurez deux fichiers ouverts à la fois.

  2. Ctrl-Shift-6(Je ne connais pas les valeurs ascii réelles). Si vous avez deux tampons ouverts, vous pouvez basculer entre eux en un clin d'œil avec cette bascule.

  3. bd- suppression du tampon. Vous permet d'effacer un tampon.

  4. C'est vraiment très pratique - :sh. Si vous devez revenir à un shell pour une raison quelconque (par exemple, pour regarder un répertoire et chmod un fichier), vous pouvez invoquer la commande shell de vim faire exactement cela. Sortir du shell vous ramène là où vous étiez à Vim.

  5. Dans la même catégorie que ci-dessus - taper :!et une commande unix ensuite exécutera cette commande. Essayez ceci avec ls. (Je pense que cela fonctionne également avec les commandes internes du shell, mais je ne suis pas sûr.)

Ce sont ceux que j'utilise tout le temps. Il y a aussi :npour le :pfichier suivant et pour le fichier précédent, car vous pouvez avoir plus de deux tampons ouverts dans vim à la fois (je ne fais généralement pas cela, cependant).


Super merci pour ces conseils. J'ai également trouvé ceci: wincent.com/products/command-t . J'ai hâte de commencer à l'utiliser. Le seul inconvénient, c'est que vous avez besoin de rubis (pas si amical avec les trucs ssh), mais c'est exactement ce que je cherchais. Cela combiné avec :sh, :eet la gestion de la mémoire tampon appropriée, et les choses deviennent sexy
FEBS

Dans la plupart des shells (c'est-à-dire des shells avec job-control), il Ctrl+Zfaut suspendre le processus ( fgdu shell pour l'afficher à nouveau) - ce qui est une alternative à :sh.
maxschlepzig

Un autre bon conseil! Excellent! Je vais devoir les compiler dans un article de blog ou quelque chose.
fév


2

Je recommanderais également d'utiliser des fenêtres fractionnées pour afficher plusieurs fichiers à la fois. Ajoutez des compétences avec la gestion des tampons et des fenêtres dans VIM, et vous serez un ninja VIM en un rien de temps.

Pour la documentation réelle, je vais vous référer à la documentation Windows VIM , mais je vais essayer de vous donner une longueur d'avance ici.

Démarrez VIM avec 2 (ou plus) fenêtres divisées horizontalement, la fenêtre du haut a le fichier1, la fenêtre suivante vers le bas a le fichier2, etc.

vim -o <file1> <file2> (file3 file4 ...)

Démarrez VIM avec 2 (ou plus) fenêtres divisées verticalement, la fenêtre la plus à gauche a fichier1, la fenêtre suivante a fichier2, etc.

vim -O <file1> <file2> (file3 file4 ...)

Déplacer le curseur vers une autre fenêtre:

CTRL-W <vim direction key> (h=left, j=up, k=down, l=right)

Vous modifiez déjà un fichier, mais vous souhaitez fractionner la fenêtre et modifier également un autre fichier:

:split <file2>
:vsplit <file2>

Pour le fractionnement horizontal et vertical respectivement.

Il existe également des commandes pour déplacer les fenêtres, les redimensionner, etc.


1

Utilisez la commande vi: split pour ouvrir une deuxième fenêtre d'édition. split peut effectuer des séparations horizontales et verticales et plus de deux à la fois. J'ai eu jusqu'à 10 fichiers ouverts dans la même session vi.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.