Comment travailler efficacement avec plusieurs fichiers dans Vim

1101

J'ai commencé à utiliser Vim pour développer des scripts Perl et je commence à le trouver très puissant.

Une chose que j'aime est de pouvoir ouvrir plusieurs fichiers à la fois avec:

vi main.pl maintenance.pl

puis sautez entre eux avec:

:n
:prev

et voyez quels fichiers sont ouverts avec:

:args

Et pour ajouter un fichier, je peux dire:

:n test.pl

qui, je l'espère, serait alors ajouté à ma liste de fichiers, mais à la place, il efface ma liste de fichiers actuelle et lorsque je tape, :argsje n'ai test.plouvert.

Alors, comment puis-je ajouter et supprimer des fichiers dans ma liste d'arguments?

Edward Tanguay
la source
5
tmux ... utilise vim dans chaque volet
Tommy
4
@Tommy: de cette façon, vous ne pouvez pas coller de contenu retiré / supprimé entre les fichiers (tampon vims). S'il est disponible, seul un presse-papiers peut aider (voir la réponse acceptée: stackoverflow.com/questions/5532878/… )
ChristophS
1
:Nsemble être un moyen plus facile d'aller au fichier précédent ...
Gert van den Berg
vimcasts.org/categories/the-argument-list ? Les VimCasts sont vraiment fortement recommandés lors de l'apprentissage de Vim.
mcepl

Réponses:

1172

Pourquoi ne pas utiliser des onglets (introduits dans Vim 7)? Vous pouvez basculer entre les onglets avec :tabnet :tabp, Avec, :tabe <filepath>vous pouvez ajouter un nouvel onglet; et avec un habitué :qou :wqvous fermez un onglet. Si vous mappez :tabnet :tabpà vos touches F7/ F8, vous pouvez facilement basculer entre les fichiers.

S'il n'y a pas beaucoup de fichiers ou vous n'avez pas 7 vous pouvez Vim également diviser votre écran en plusieurs fichiers: :sp <filepath>. Ensuite, vous pouvez basculer entre les écrans fractionnés avec Ctrl+ Wpuis une touche fléchée dans la direction que vous souhaitez déplacer (ou au lieu des touches fléchées, wpour l' Wécran fractionné suivant et précédent)

fijter
la source
72
Pour enregistrer et fermer un onglet, vous pouvez également utiliser à la ZZplace de :wq(comme vous le feriez normalement pour enregistrer et fermer)
Andreas Grech
40
J'utilise le paquet vim-gnome dans Ubuntu 10.10, et je peux basculer entre les onglets en utilisant Ctrl + PageUp et Ctrl + PageDown. Je n'avais rien à configurer; c'était par défaut.
Joey Adams
268
En outre, en mode édition, gtpasse à l'onglet suivant et gTà l'onglet précédent.
Dean
40
Vous pouvez accéder à n'importe quel onglet à l'aide de ngt, où n est l'index de l'onglet (en commençant par un). Je pense qu'il y a une option qui affiche l'index de chaque onglet près du nom du fichier, mais je ne sais pas ce que c'est. Si quelqu'un sait, j'aimerais l'entendre.
void-pointer
81
Notez également que vous pouvez utiliser l' -pindicateur pour ouvrir plusieurs fichiers dans des onglets à partir de la ligne de commande. Par exemple, gvim -p main.pl maintenance.plouvrira ces deux fichiers dans des onglets.
Matthew Strawbridge,
555

Référencement

Pour voir une liste des tampons actuels, j'utilise:

:ls

Ouverture

Pour ouvrir un nouveau fichier, j'utilise

:e ../myFile.pl

avec complétion de tabulation améliorée (insérez set wildmenuvotre .vimrc).

Remarque: vous pouvez également utiliser :findqui recherchera un ensemble de chemins pour vous, mais vous devez d'abord personnaliser ces chemins.


Commutation

Pour basculer entre tous les fichiers ouverts, j'utilise

:b myfile

avec complétion améliorée des onglets (encore set wildmenu).

Remarque: :b#choisit le dernier fichier visité, vous pouvez donc l'utiliser pour basculer rapidement entre deux fichiers.


Utiliser des fenêtres

Ctrl-W set Ctrl-W vpour diviser la fenêtre actuelle horizontalement et verticalement. Vous pouvez également utiliser :splitet :vertical split( :spet :vs)

Ctrl-W wpour basculer entre les fenêtres ouvertes et Ctrl-W h(ou jou kou l) pour naviguer dans les fenêtres ouvertes.

Ctrl-W cpour fermer la fenêtre actuelle et Ctrl-W opour fermer toutes les fenêtres à l'exception de la fenêtre actuelle.

Démarrer vim avec un drapeau -oou -Oouvre chaque fichier dans sa propre division.


Avec tout cela, je n'ai pas besoin d'onglets dans Vim, et mes doigts trouvent mes tampons, pas mes yeux.

Remarque: si vous souhaitez que tous les fichiers aillent dans la même instance de Vim, démarrez Vim avec l' --remote-silentoption.

Sébastien RoccaSerra
la source
4
Si vous jouez avec plusieurs tampons, je recommanderais LustyJuggler .
Arun M
1
Merci d'avoir fait une très belle référence rapide pour les commandes vim utilisées le plus souvent lorsque vous travaillez avec plusieurs fichiers.
quanticle
9
:best une commande très puissante car elle peut accepter à la fois les numéros de tampon et les noms de tampon comme arguments. Quoi de plus? Il prend également en charge la saisie par tabulation sur n'importe quelle partie du nom de fichier. Dites, vous avez ouvert foo.txt dans le tampon 2, vous pouvez taper :b 2<Enter>ou :b foo.txtou :b oo<Tab><Enter>pour éditer ce fichier. Oui, le dernier compléterait «oo» à «foo.txt» lorsque vous appuyez sur <Tab>.
Susam Pal
21
J'ai cette ligne dans mon .vimrc: nnoremap gb :ls<cr>:b<space>. Lorsque je tape gben mode commande, il répertorie mes tampons et types ouverts :b , prêt pour moi à commencer à taper un nom / numéro de tampon.
nkorth
5
Il convient également de mentionner qui :bacceptera une correspondance de sous-chaîne tant qu'elle n'est pas ambiguë. Donc , si vous avez des fichiers ouverts foo, baret baz, juste :b zsuffit à vous passer à la bazmémoire tampon, et :b ooou :b ovous amène à la foomémoire tampon.
Soren Bjornstad
233
:ls

pour la liste des tampons ouverts

  • :bp tampon précédent
  • :bn tampon suivant
  • :bn( nun certain nombre) déplacer vers le cinquième tampon
  • :b <filename-part> avec touche de tabulation permettant la complétion automatique (génial !!)

Dans certaines versions de vim, bnet bpsont en fait bnextet bpreviousrespectivement. La saisie automatique des onglets est utile dans ce cas.

Ou lorsque vous êtes en mode normal, utilisez ^pour basculer vers le dernier fichier sur lequel vous travailliez.

De plus, vous pouvez enregistrer des sessions de vim

:mksession! ~/today.ses

La commande ci-dessus enregistre les tampons et les paramètres des fichiers ouverts actuels dans ~/today.ses. Vous pouvez charger cette session en utilisant

vim -S ~/today.ses

Pas de souci de vous rappeler où vous en étiez hier. ;)

shyam
la source
aller à un tampon spécifique: N CTRL- ^
Tom Yang
8
@shyam Je pense que je t'aime! D'une certaine manière, je ne savais pas avec certitude à propos de la commande mksession, mais aujourd'hui, à l'improviste, j'ai décidé qu'il DOIT y avoir un moyen d'enregistrer une liste de fichiers pour les ouvrir facilement. C'est encore mieux car il semble même stocker l'état complet des choses (fractionnements de fenêtres, emplacements des tampons, etc.). Donc merci!
Kasapo
Utilisez également la "marque pour revenir à l'endroit où vous vous trouviez dans le fichier la dernière fois.
Chrome
113

Pour ajouter à la argsliste:

:argadd

Pour supprimer de la argsliste:

:argdelete

Dans votre exemple, vous pouvez utiliser :argedittest.pl pour ajouter test.pl à la argsliste et modifier le fichier en une seule étape.

:help args donne beaucoup plus de détails et une utilisation avancée

MarkB
la source
4
C'est vraiment la réponse à la question posée, mais étant donné le titre, les autres réponses sont parfaitement justes.
Soren Bjornstad
48

J'utilise des commandes de tampon - :bn(tampon suivant), :bp(tampon précédent) :buffers(liste des tampons ouverts) :b<n>(tampon ouvert n) :bd(supprimer le tampon). :e <filename>va juste s'ouvrir dans un nouveau tampon.

Andy Whitfield
la source
18
: ls plus rapide que: buffers
aehlke
42

Je pense que vous utilisez peut-être la mauvaise commande pour consulter la liste des fichiers que vous avez ouverts.

Essayez de faire un :lspour voir la liste des fichiers que vous avez ouverts et vous verrez:

   1 %a   "./checkin.pl"            line 1
  2 #    "./grabakamailogs.pl"     line 1
  3      "./grabwmlogs.pl"         line 0
  etc.

Vous pouvez ensuite rebondir sur les fichiers en vous y référant par les numéros indiqués, par exemple: 3b

ou vous pouvez diviser votre écran en entrant le numéro mais en utilisant sb au lieu de simplement b.

En tant que côté,% fait référence au fichier actuellement visible et # fait référence au fichier alternatif.

Vous pouvez facilement basculer entre ces deux fichiers en appuyant sur Ctrl Shift 6

Modifier: comme :lsvous pouvez utiliser :regpour voir le contenu actuel de vos registres, y compris les registres 0-9 qui contiennent ce que vous avez supprimé. Ceci est particulièrement utile si vous souhaitez réutiliser du texte que vous avez précédemment supprimé.

Rob Wells
la source
2
Ravi de voir le côté des informations connexes comme% et #. +1
Ashish
35

Vim (mais pas le Vi original!) A des onglets que je trouve (dans de nombreux contextes) supérieurs aux tampons. Vous pouvez dire :tabe [filename]d'ouvrir un fichier dans un nouvel onglet. Le cycle entre les onglets se fait en cliquant sur l'onglet ou par les combinaisons de touches [ n ] gtet gT. Vim graphique a même des onglets graphiques.

Konrad Rudolph
la source
1
Merci, ça a l'air génial, mais nous n'avons malheureusement que VIM 6.1 installé sur le serveur.
Edward Tanguay
1
Les onglets sont très pratique avec des jokers: vim -p dir/*. La taille maximale de l'onglet est de 10, mais vous pouvez la modifier en ~/.vimrcdéfinissant tabpagemaxune autre valeur.
Campa
27

Beaucoup de réponses ici! Ce que j'utilise sans réinventer la roue - les plugins les plus célèbres (qui ne vont pas mourir de si tôt et qui sont utilisés par beaucoup de gens) pour être ultra rapides et geek.

  • ctrlpvim / ctrlp.vim - pour rechercher un fichier par son nom recherche floue par son emplacement ou simplement son nom
  • jlanzarotta / bufexplorer - pour parcourir les tampons ouverts (lorsque vous ne vous souvenez pas du nombre de fichiers que vous avez ouverts et modifiés récemment et que vous ne vous souvenez pas où ils se trouvent, probablement parce que vous les avez recherchés avec Ag)
  • rking / ag.vim pour rechercher les fichiers par rapport à gitignore
  • scrooloose / nerdtree pour voir la structure du répertoire, lookaround, ajouter / supprimer / modifier des fichiers

EDIT: J'ai récemment utilisé dyng / ctrlsf.vim pour rechercher avec une vue contextuelle (comme la recherche sublime) et j'ai changé le moteur de ag en ripgrep . La performance est exceptionnelle.

EDIT2: Avec CtrlSF, vous pouvez utiliser mg979 / vim-visual-multi , apporter des modifications à plusieurs fichiers à la fois, puis les enregistrer en une seule fois.

Petur Subev
la source
2
ctrlp a été déplacé et se trouve maintenant sur ctrlpvim / ctrlp.vim
Dave
1
CECI est la bonne réponse! Pourquoi n'a-t-il pas plus de votes positifs?
Thomas Möbius
2
Il n'y a pas plus de votes positifs car la question a été posée en 2008. :)
burnettk
exactement. Je ne peux pas imaginer vim dans un environnement de développement sans ces plugins.
Edgar Alloro
25

Des choses comme :eet :baddn'accepteront qu'un seul argument, donc les suivantes échoueront

:e foo.txt bar.txt
:e /foo/bar/*.txt
:badd /foo/bar/*

Si vous souhaitez ajouter plusieurs fichiers à partir de vim, utilisez arga[dd]

:arga foo.txt bar.txt
:arga /foo/bar/*.txt
:argadd /foo/bar/*
puk
la source
21

Certaines réponses dans ce fil suggèrent d'utiliser des onglets et d'autres suggèrent d'utiliser un tampon pour accomplir la même chose. Les onglets et les tampons sont différents. Je vous suggère fortement de lire cet article " Vim Tab Madness - Buffers vs Tabs ".

Voici un joli résumé que j'ai tiré de l'article:

Sommaire:

  • Un tampon est le texte en mémoire d'un fichier.
  • Une fenêtre est une fenêtre sur un tampon.
  • Une page à onglet est un ensemble de fenêtres.
Andrew
la source
2
Vous obtenez ce résumé en tapant :help windowVim
icc97
19

Lorsque j'utilise plusieurs fichiers dans vim, j'utilise principalement ces commandes (avec ~ 350 fichiers ouverts):

  • :b <partial filename><tab> (passer à un tampon)
  • :bw (effacement du tampon, supprimer un tampon)
  • :e <file path> (modifier, ouvrir un nouveau tampon>
  • pltags - permet de passer aux définitions de sous-programme / méthode
zigdon
la source
2
350 fichiers !!! C'est impressionnant. comment trouvez-vous le bon tampon pour sauter? Avez-vous déjà fait des scissions?
Brian O'Dell
3
@ BrianO'Dell le :b <partial filename><tab>plus set wildmenudans vos .vimrctravaux bien quand vous avez des tonnes de tampons ouverts. Ensuite, il vous suffit de faire correspondre partiellement et de faire défiler ceux qu'il trouve. Dans d'autres éditeurs décents, vous avez une recherche floue, mais normalement vous ne pouvez pas limiter cette recherche floue aux seuls fichiers que vous avez ouverts.
icc97
17

Ajouter une autre réponse car elle n'est couverte par aucune des réponses

Pour modifier tous les tampons à tabafficher.

 :tab sball

ouvrira tous les tampons en vue onglet. Ensuite, nous pouvons utiliser toutes les commandes liées aux onglets

gt or :tabn           "    go to next tab
gT or :tabp or :tabN  "    go to previous tab

détails à :help tab-page-commands.

Nous pouvons demander à vim d'ouvrir, sous forme d'onglet, plusieurs fichiers par vim -p file1 file2. alias vim='vim -p'Sera utile.
La même chose peut également être obtenue en suivant la commande automatique dans~/.vimrc

 au VimEnter * if !&diff | tab all | tabfirst | endif

Quoi qu'il en soit pour répondre à la question: Pour ajouter à la liste d'arguments: arga file ,

Pour supprimer de la liste d'arguments: argd pattern

Plus à :help arglist

dlmeetei
la source
16

Vous pouvez utiliser des marques globales Vim .

De cette façon, vous pouvez rapidement rebondir entre les fichiers, et même à l'emplacement marqué dans le fichier. De plus, les raccourcis clavier sont courts: 'C me conduisent au code avec lequel je travaille, 'T me conduisent au test unitaire avec lequel je travaille.

Lorsque vous changez de place, la réinitialisation des repères est également rapide: mC marque le nouveau point de code, mT marque le nouveau point de test.

user2179522
la source
12

J'utilise le même fichier .vimrc pour gVim et la ligne de commande Vim. J'ai tendance à utiliser des onglets dans gVim et des tampons dans la ligne de commande Vim, j'ai donc mon .vimrc configuré pour faciliter le travail avec les deux:

" Movement between tabs OR buffers
nnoremap L :call MyNext()<CR>
nnoremap H :call MyPrev()<CR>

" MyNext() and MyPrev(): Movement between tabs OR buffers
function! MyNext()
    if exists( '*tabpagenr' ) && tabpagenr('$') != 1
        " Tab support && tabs open
        normal gt
    else
        " No tab support, or no tabs open
        execute ":bnext"
    endif
endfunction
function! MyPrev()
    if exists( '*tabpagenr' ) && tabpagenr('$') != '1'
        " Tab support && tabs open
        normal gT
    else
        " No tab support, or no tabs open
        execute ":bprev"
    endif
endfunction

Cela détruit les mappages existants pour Het L, mais cela permet de basculer entre les fichiers extrêmement rapidement et facilement. Il suffit de frapper Hpour le suivant et Lpour le précédent; que vous utilisiez des onglets ou des tampons, vous obtiendrez les résultats escomptés.

Max Cantor
la source
1
J'aime ces mappings. Essayez également Ctrl-H, Ctrl-L. J'ai configuré Firefox et le terminal gnome avec les mêmes mappages. Très agréable d'avoir des raccourcis clavier cohérents.
cmcginty
4
utilisez votre clé de leader au lieu de ctrl pour éviter d'altérer les mappages existants
aehlke
10

Si vous allez utiliser plusieurs tampons, je pense que la chose la plus importante est de définir caché pour qu'il vous permette de changer de tampon même si vous avez des changements non enregistrés dans celui que vous quittez.

échancrure
la source
9

Si vous n'utilisez que des commandes intégrées vim , la meilleure que j'ai jamais vue pour basculer entre plusieurs tampons est la suivante:

nnoremap <Leader>f :set nomore<Bar>:ls<Bar>:set more<CR>:b<Space>

Il combine parfaitement les deux :lset les :bcommandes - listant tous les tampons ouverts et attendant que vous entriez la commande pour changer de tampon.

Étant donné le mappage ci-dessus dans vimrc, une fois que vous tapez <Leader>f,

  • Tous les tampons ouverts sont affichés
  • Vous pouvez:
    • Tapez 23pour aller au tampon 23,
    • Type # pour aller à la mémoire tampon alternative / MRU,
    • Tapez le nom partiel du fichier, puis tapez <Tab>ou<C-i> pour la saisie semi-automatique,
    • Ou tout simplement <CR>ou <Esc>pour rester sur le tampon actuel

Un instantané de la sortie pour le mappage de touches ci-dessus est:

:set nomore|:ls|:set more
  1  h    "script.py"    line 1
  2 #h  + "file1.txt"    line 6  -- '#' for alternative buffer
  3 %a    "README.md"    line 17 -- '%' for current buffer
  4       "file3.txt"    line 0  -- line 0 for hasn't switched to
  5     + "/etc/passwd"  line 42 -- '+' for modified
:b '<Cursor> here'

Dans l'instantané ci-dessus:

  • Deuxième colonne: %apour le courant, hpour le caché,# pour précédent, vide pour n'a pas été changé pour.
  • Troisième colonne: +pour modifié.

Aussi, je suggère fortement set hidden. Tu vois :help 'hidden'.

qeatzy
la source
C'est une bonne idée! J'utilise :bet :lsbeaucoup mais indépendamment. Je pense que cela devient moins utile lorsque vous avez plus d'une page de tampons, mais vous pouvez toujours revenir à:b
icc97
Heureux de voir que cela aide. À votre santé! :)
qeatzy
À partir de ce wikia Vim , vous pouvez le raccourcir un peu nnoremap <leader>f :ls<cr>:b<space>, ce qui pourrait
entraîner des
Oui, cela fonctionne parfaitement si moins de fichiers sont ouverts (le cas d'utilisation habituel). set moreles choses ne font de différence que lorsqu'il y a beaucoup de fichiers ouverts (plus d'une page), par exemple vim /usr/include/*, bien que moins utiles alors.
2017 à 7h01
8

J'utilise ce qui suit, cela vous donne beaucoup de fonctionnalités que vous attendez d'avoir dans d'autres éditeurs tels que Sublime Text / Textmate

  1. Utilisez des tampons et non des «pages à onglets». Les tampons sont le même concept que les onglets dans presque tous les autres éditeurs.
  2. Si vous voulez la même apparence d'avoir des onglets , vous pouvez utiliser la vim-aérienne plug - in avec le paramètre suivant dans votre .vimrc: let g:airline#extensions#tabline#enabled = 1. Cela affiche automatiquement tous les tampons comme en-têtes d'onglet lorsque vous n'avez aucune page d'onglet ouverte
  3. Utilisez vim-intact de Tim Pope qui donne [bet ]bpour passer aux tampons précédents / suivants respectivement (plus une foule d'autres goodies)
  4. Ayez set wildmenudans votre .vimrcpuis lorsque vous tapez :b <file part>+ Tabpour un tampon, vous obtiendrez une liste de tampons possibles que vous pouvez utiliser les flèches gauche / droite pour faire défiler
  5. Utilisez le plugin vim-obsession de Tim Pope pour stocker des sessions qui fonctionnent bien avec la compagnie aérienne (j'ai eu beaucoup de mal avec les sessions et les plugins )
  6. Utilisez le plugin vim-vinaigre de Tim Pope . Cela fonctionne avec le natif, :Exploremais il est beaucoup plus facile de travailler avec. Il vous suffit de taper -pour ouvrir l'explorateur, qui est la même clé que pour remonter un répertoire dans l'explorateur. Rend la navigation plus rapide (cependant avec fzf je l'utilise rarement)
  7. fzf (qui peut être installé en tant que plugin vim) est également un moteur de recherche flou très puissant que vous pouvez utiliser pour rechercher des fichiers (et des tampons également). fzf joue également très bien avec fd (une version plus rapide de find)
  8. Utilisez Ripgrep avec vim-ripgrep pour rechercher dans votre base de code, puis vous pouvez utiliser :cdoles résultats pour effectuer une recherche et remplacer
icc97
la source
fzf et fzf-vim ont changé ma vie, je ne le recommanderai jamais assez. Il fonctionne également très bien sur Windows, même dans la console pour la recherche floue de fichiers. Sur Windows, utilisez le backend ripgrep (rg), qui selon mon expérience surpasse tout autre outil find / grep (comme silversearcher ou les fenêtres par défaut trouvent que fzf utilise iirc). Vous pouvez l'utiliser pour rechercher dans n'importe quelle liste d'éléments: les fichiers utilisés les plus récents, les tampons actuellement ouverts, les lignes dans le tampon actuel, les lignes dans la base de code (cwd), les balises, .. vous pouvez facilement programmer votre propre recherche floue de liste. Tellement bon! (Je viens de ctrl-p et je n'ai jamais regardé en arrière)
Emile Vrijdags
7

Ma façon de travailler efficacement avec plusieurs fichiers est d'utiliser tmux.

Il vous permet de diviser les fenêtres verticalement et horizontalement, comme dans:

entrez la description de l'image ici

Je le fais fonctionner de cette façon sur mes machines Mac et Linux et je le trouve meilleur que le mécanisme de commutation de volet de fenêtre natif fourni (sur Mac). Je trouve la commutation plus facile et ce n'est qu'avec tmux que j'ai pu obtenir la `` nouvelle page dans le même répertoire actuel '' fonctionnant sur mon mac (malgré le fait qu'il semble y avoir des options pour ouvrir de nouveaux volets dans le même répertoire) qui est une pièce étonnamment critique. Un nouveau volet instantané à l'emplacement actuel est incroyablement utile. Une méthode qui fait de nouveaux volets avec les mêmes combinaisons de touches pour les deux systèmes d'exploitation est essentielle pour moi et un bonus pour tous pour une future compatibilité personnelle. Mis à part plusieurs volets tmux, j'ai également essayé d'utiliser plusieurs onglets, par exempleentrez la description de l'image ici et plusieurs nouvelles fenêtres, par exempleentrez la description de l'image iciet finalement, j'ai trouvé que plusieurs volets tmux étaient les plus utiles pour moi. Je suis très «visuel» et j'aime garder mes différents contextes juste devant moi, connectés les uns aux autres comme des volets.

tmux prend également en charge les volets horizontaux et verticaux, ce qui screenn'était pas le cas pour les anciens (bien que l'iterm2 de mac semble le prendre en charge, mais encore une fois, le paramètre de répertoire actuel ne fonctionnait pas pour moi). tmux 1.8

Michael Durrant
la source
1
J'ai dû lol quand j'ai vu votre exemple artificiel de "fenêtres multiples". J'espère que personne ne travaille comme ça :-) Quoi qu'il en soit, j'utilise le carrelage wm qui est encore mieux (je suis passé de tmux à i3wm). Juste pour compléter votre réponse.
lzap
1
Tmux est génial et j'ai utilisé cette approche pendant longtemps, mais cela rend la navigation, la copie et le collage entre deux fichiers plus difficiles.
neallred
1
J'avais l'habitude de faire cela, mais avoir plusieurs tampons vim est supérieur lorsque vous avez besoin de tirer / coller
Titou
3

J'utilise la ligne de commande et git beaucoup, j'ai donc cet alias dans mon bashrc:

alias gvim="gvim --servername \$(git rev-parse --show-toplevel || echo 'default') --remote-tab"

Cela ouvrira chaque nouveau fichier dans un nouvel onglet sur une fenêtre existante et créera une fenêtre pour chaque référentiel git. Donc, si vous ouvrez deux fichiers du repo A et 3 fichiers du repo B, vous vous retrouverez avec deux fenêtres, une pour le repo A avec deux onglets et une pour le repo B avec trois onglets.

Si le fichier que vous ouvrez n'est pas contenu dans un dépôt git, il ira dans une fenêtre par défaut.

Pour sauter entre les onglets, j'utilise ces mappages:

nmap <C-p> :tabprevious<CR>
nmap <C-n> :tabnext<CR>

Pour ouvrir plusieurs fichiers à la fois, vous devez combiner cela avec l'une des autres solutions.

Jens
la source
3

J'utilise plusieurs tampons qui sont définis cachés dans mon ~/.vimrc fichier.

Le script de l'explorateur de mini-tampons est également sympa pour obtenir une belle liste compacte de vos tampons. Ensuite :b1ou :b2... pour accéder au tampon approprié ou utilisez l'explorateur de mini-tampons et parcourez les tampons.

projecktzero
la source
2

essayez de suivre les cartes pour éditer facilement plusieurs fichiers

"fenêtres fractionnées

nmap <leader>sh :leftabove vnew<CR>

nmap <leader>sl :rightbelow vnew<CR>

nmap <leader>sk :leftabove new<CR>

nmap <leader>sj :rightbelow new<CR>

"se déplacer

nmap <C-j> <C-w>j

nmap <C-k> <C-w>k

nmap <C-l> <C-w>l

nmap <C-h> <C-w>h

user2663398
la source
2

J'ai fait une vidéo très simple montrant le flux de travail que j'utilise. Fondamentalement, j'utilise le Ctrl-P plugin Vim, et j'ai mappé la navigation du tampon à la touche Entrée.

De cette façon, je peux appuyer sur Entrée en mode normal, regarder la liste des fichiers ouverts (qui apparaît dans une petite nouvelle fenêtre au bas de l'écran), sélectionner le fichier que je veux modifier et appuyer à nouveau sur Entrée. Pour rechercher rapidement parmi plusieurs fichiers ouverts, tapez simplement une partie du nom de fichier, sélectionnez le fichier et appuyez sur Entrée.

Je n'ai pas beaucoup de fichiers ouverts dans la vidéo, mais cela devient incroyablement utile lorsque vous commencez à en avoir beaucoup.

Étant donné que le plugin trie les tampons à l'aide d'un ordre MRU, vous pouvez simplement appuyer sur Entrée deux fois et passer au fichier le plus récent que vous éditiez.

Une fois le plugin installé, la seule configuration dont vous avez besoin est:

nmap <CR> :CtrlPBuffer<CR>

Bien sûr, vous pouvez le mapper sur une clé différente, mais je trouve que le mappage à saisir est très pratique.

fede1024
la source
2

Je suggérerais d'utiliser le plugin

NERDtree

Voici le lien github avec les instructions.

Nerdtree

J'utilise vim-plug comme gestionnaire de plugins, mais vous pouvez également utiliser Vundle.

vim-plug

Vundle

thenakulchawla
la source
2

Dans mon et dans de nombreux autres utilisateurs de vim, la meilleure option est de,

  • Ouvrez le fichier en utilisant,

: e nom_fichier.extension

Et puis juste Ctrl + 6 pour passer au dernier tampon. Ou, vous pouvez toujours appuyer sur

: ls pour lister le tampon puis changer le tampon en utilisant b suivi du numéro de tampon.

  • Nous réalisons une division verticale ou horizontale en utilisant

: vsp pour le fractionnement vertical

: sp pour la division horizontale

Et puis <C-W><C-H/K/L/j>pour changer la division de travail.

Vous pouvez bien sûr éditer n'importe quel fichier en un nombre illimité de divisions.

Leo
la source
Veuillez modifier votre réponse pour vous assurer qu'elle améliore les autres réponses déjà présentes dans cette question.
Hongsy
1

Lorsque j'ai commencé à utiliser VIM, je ne savais pas que les onglets étaient censés être utilisés comme différentes dispositions de fenêtre, et le tampon sert de rôle pour l'édition / la commutation de plusieurs fichiers entre eux. En fait, au début, les onglets ne sont même pas là avant la v7.0 et je viens d'ouvrir un VIM à l'intérieur d'un onglet de terminal (j'utilisais gnome-terminal pour le moment), et de basculer entre les onglets en utilisant alt + chiffres, car je pensais utiliser des commandes comme : buffers,: bn et: bp étaient trop pour moi. Lorsque VIM 7.0 est sorti, je trouve qu'il est plus facile de gérer un grand nombre de fichiers et d'y basculer, mais récemment, je viens de réaliser que les tampons devraient toujours être la voie à suivre, sauf une chose: vous devez le configurer pour qu'il fonctionne correctement.

J'ai donc essayé vim-airlines et activé la barre de mémoire tampon en forme d'onglet, mais le graphique rencontrait des problèmes avec mon iTerm2, j'ai donc essayé quelques autres et il semble que MBE fonctionne le mieux pour moi. J'ai également défini shift + h / l comme raccourcis, car les originaux (se déplaçant vers la tête / la queue de la page actuelle) ne me sont pas très utiles.

map <S-h> :bprev<Return>
map <S-l> :bnext<Return>

Cela semble encore plus facile que gt et gT, et: e est plus facile que: tabnew aussi. Je trouve: bd n'est pas aussi pratique que: q cependant (MBE a un problème avec ça) mais je peux vivre avec tous les fichiers dans le tampon je pense.

superarts.org
la source
0

si vous êtes sur osx et que vous voulez pouvoir cliquer sur vos onglets, utilisez MouseTerm et SIMBL (prises à partir d' ici ). Consultez également cette discussion connexe .

Cpt. Senkfuss
la source
0

La plupart des réponses dans ce fil utilisent des commandes vim simples, ce qui est bien sûr bien, mais je pensais que je fournirais une réponse complète en utilisant une combinaison de plugins et de fonctions que je trouve particulièrement utiles (au moins certains de ces conseils proviennent du fichier de Gary Bernhardt conseils de navigation ):

  1. Pour basculer entre les deux derniers fichiers, appuyez simplement <leader>deux fois sur. Je recommande d'assigner <leader>à la barre d'espace:

    nnoremap <leader><leader> <c-^>
    
  2. Pour vous déplacer rapidement dans un projet, la réponse est une solution de correspondance floue telle que CtrlP . Je le lie à <leader>apour un accès rapide.

  3. Dans le cas où je veux voir une représentation visuelle des tampons actuellement ouverts, j'utilise le plugin BufExplorer . Simple mais efficace.

  4. Si je veux parcourir le système de fichiers, j'utiliserais la ligne de commande ou un utilitaire externe (Quicklsilver, Afred etc.) mais pour regarder la structure actuelle du projet, NERD Tree est un classique. Ne l'utilisez pas à la place de 2comme méthode de recherche de fichier principale. Cela va vraiment vous ralentir. J'utilise la reliure <leader>ff.

Ceux-ci devraient être suffisants pour rechercher et ouvrir des fichiers. De là, bien sûr, utilisez des séparations horizontales et verticales. Concernant les scissions, je trouve ces fonctions particulièrement utiles:

  1. Ouvrez de nouvelles divisions dans des zones plus petites lorsqu'il n'y a pas assez de place et agrandissez-les lors de la navigation. Reportez-vous ici pour des commentaires sur leur fonction exacte:

    set winwidth=84
    set winheight=5
    set winminheight=5
    set winheight=999
    
    nnoremap <C-w>v :111vs<CR>
    nnoremap <C-w>s :rightbelow split<CR>
    set splitright
    
  2. Passez du split au split facilement:

    nnoremap <C-J> <C-W><C-J>
    nnoremap <C-K> <C-W><C-K>
    nnoremap <C-L> <C-W><C-L>
    nnoremap <C-H> <C-W><C-H>
    
Dionyse
la source
0

Vous pouvez être un fou absolu et alias vimà vim -pen ajoutant dans votre .bashrc:

alias vim="vim -p"

Cela se traduira par l'ouverture de plusieurs fichiers à partir du shell dans des onglets, sans avoir à appeler :tab balldepuis l'intérieur de vim par la suite.

npit
la source