Comment préférez-vous basculer entre les tampons dans Vim?

92

J'ai essayé MiniBufExplorer , mais je me retrouve généralement avec plusieurs fenêtres le montrant ou le fermant complètement. Ce que j'aimerais, c'est quelque chose comme LustyJuggler avec recherche incrémentale, la façon dont je passe d'un tampon à l'autre dans Emacs. Il existe sûrement un script comme celui-ci?

Alexey Romanov
la source

Réponses:

23

J'utilise le plugin vim Command-T de Wincent Colaiuta depuis quelques mois maintenant. Wincent a écrit les parties qui doivent être rapides en C, et je dois dire que c'est le cas! Et, je pense que sa logique de correspondance de modèle de fichier est encore meilleure que Command-T de Textmate. Découvrez le screencast .

Le plug-in Command-T pour VIM fournit un mécanisme extrêmement rapide et intuitif pour ouvrir des fichiers avec un nombre minimal de frappes. Il s'appelle "Command-T" car il est inspiré de la fenêtre "Go to File" liée à Command-T dans TextMate.

Les fichiers sont sélectionnés en tapant les caractères qui apparaissent dans leurs chemins et sont classés par un algorithme qui sait que les caractères qui apparaissent à certains endroits (par exemple, immédiatement après un séparateur de chemin) doivent avoir plus de poids.

Une commutation de tampon plus facile contient de nombreux conseils utiles. J'ai adapté ce qui suit à mon .vimrc, qui effectue l'auto-complétion du nom de tampon, mappe les commandes de commutation de tampon les plus utiles à mes touches de ligne d'accueil <Leader> et de gauche, et affiche le numéro de tampon actuel dans la ligne d'état :

"" Tab triggers buffer-name auto-completion
set wildchar=<Tab> wildmenu wildmode=full

let mapleader = ","

map <Leader>t :CommandT<Return>
map <Leader>a :bprev<Return>
map <Leader>s :bnext<Return>
map <Leader>d :bd<Return>
map <Leader>f :b 

"" Show the buffer number in the status line.
set laststatus=2 statusline=%02n:%<%f\ %h%m%r%=%-14.(%l,%c%V%)\ %P

J'utilise également MiniBufExplorer , qui fournit une liste compacte de chaque tampon répertorié dans son propre haut fractionné horizontal.

David Rivers
la source
73

J'avais l'habitude d'utiliser une combinaison d'onglets et de plusieurs instances gvim, en conservant des groupes de fichiers associés sous forme d'onglets dans chaque instance. Tant que je ne me suis pas retrouvé avec trop d'onglets dans une seule instance, la barre d'onglets vous montre le nom de chaque fichier que vous modifiez en un coup d'œil.

Ensuite, j'ai lu un article de Jamis Buck sur la façon dont il est passé de TextMate à vim , et j'ai appris de très bonnes astuces:

  • Ctrl-w s et Ctrl-w v pour diviser la fenêtre courante
  • Ctrl-6 pour basculer entre deux tampons dans la même fenêtre.
  • l'impressionnant fuzzyfinder.vim qui vous permet de rechercher automatiquement des fichiers dans votre répertoire actuel ou des tampons que vous avez actuellement ouverts
  • Les propres fuzzy_file_finder et fuzzyfinder_textmate de Jamis , qui modifient légèrement le fonctionnement de fuzzyfinder pour se comporter davantage comme une fonctionnalité similaire dans TextMate (pour autant que je sache, la différence est qu'il correspond n'importe où dans le nom de fichier au lieu de seulement depuis le début). Regardez cette vidéo pour la voir en action.

Maintenant, je n'ai qu'une seule instance de gvim, agrandie et divisée en plusieurs fenêtres pour que je puisse voir plusieurs fichiers à la fois. J'ai lié Ctrl-F à fuzzyfinder_textmate, donc maintenant si je tape (disons) Ctrl-F, mod/usobcela ouvre app / models / user_observer.rb. Je ne me soucie presque plus des onglets.

Mise à jour 07/08/2010

Bien que fuzzyfinder_textmate reste génial, comme le souligne Casey dans les commentaires, il n'est plus maintenu. En outre, il (et / ou fuzzyfinder.vim) devient un peu lent et instable lorsque vous travaillez avec de gros projets (beaucoup de répertoires ou de fichiers), donc j'ai cherché une alternative.

Heureusement, il semble y avoir une très belle alternative sous la forme de Wincent Colaiuta de plug - in Commande-T . Cela a un comportement très similaire (sinon légèrement meilleur) à celui de fuzzyfinder_textmate, mais est nettement plus rapide; il a également des fonctionnalités intéressantes comme la possibilité d'ouvrir le fichier trouvé dans une division ou une division verticale. Merci (et votes positifs!) À David Rivers pour l'avoir signalé.

Sam Stokes
la source
Oui, Fuzzyfinder est très proche de ce que je veux.
Alexey Romanov
Le fuzzyfinder_textmate de Jamis termine vim. Cela devrait vraiment devenir une fonctionnalité essentielle!
csexton
Il semble que Jami ait cessé de travailler sur ce projet. Peut-être que l'auteur original intégrera ces fonctionnalités? weblog.jamisbuck.org/2009/1/28/…
cmcginty
Sam, merci pour les accessoires que tu m'as donnés (le jour de mon anniversaire!): D
David Rivers
14
Essayez le plugin ctrlp vim ( kien.github.com/ctrlp.vim ), il implémente fuzzyfinder mais avec une tonne de fonctionnalités plus utiles :)
Philip
33

J'utilise les bases - ' :ls' + ' :bn' / ' :bp' + ' :b <part-of-name>'

orip
la source
8
:-) Je n'aurais jamais pensé voir "simple" et "': ls' + ': bn' / ': bp' + ': b <part-of-name>'" dans la même phrase.
paxdiablo
16
Pax, je ne le vois toujours pas. :-)
csexton
Ceci, plus :map <c-n> :bn<cr>et :map <c-p> :bp<cr>, puisque C-net C-psont rapides à taper et permettent de passer d'un tampon à l'autre si vous appuyez dessus à plusieurs reprises. (Je ne les ai jamais utilisés dans leur but initial.) C'est comme parcourir les onglets du navigateur avec C-PgUpet C-PgDnou tout autre raccourci de votre navigateur.
Tobia
Ctrl + N est la norme pour «Nouveau fichier» dans la majorité des autres éditeurs et Ctrl + P est la commande Coller, donc pour la plupart des gens, cela sera vraiment déroutant. Vim-unimpaired de Tim Pope vous donne [bpour le tampon précédent et ]bpour le tampon suivant. Plus de nombreux autres goodies qui utilisent le concept du ]suivant et [du précédent.
icc97
31

J'aime "ctrl-w s" et "ctlr-w v" pour diviser la fenêtre. Ensuite, je mappe les touches de mouvement (h, j, k, l) en maintenant la touche Ctrl enfoncée pour se déplacer entre les fenêtres séparées:

" Map ctrl-movement keys to window switching
map <C-k> <C-w><Up>
map <C-j> <C-w><Down>
map <C-l> <C-w><Right>
map <C-h> <C-w><Left>

Devoir déplacer ma main sur les touches fléchées est ennuyeux.

Ensuite, j'ai configuré ctlr-tab pour basculer entre les tampons dans la fenêtre actuelle (comme beaucoup d'autres environnements):

" Switch to alternate file
map <C-Tab> :bnext<cr>
map <C-S-Tab> :bprevious<cr>

Celles-ci ont plutôt bien fonctionné pour moi au cours des dernières années, bien que vim ait toujours plus de secrets que vous ne pouvez en imaginer.

Dave Ray
la source
3
Votre commentaire "basculer vers un fichier alternatif" est trompeur car Vim a déjà un fichier alternatif, c'est le fichier précédent sur lequel vous étiez, et vous pouvez facilement changer les fichiers actuels (%) et alternatifs (#) en utilisant ctrl-6.
graywh
10
De plus, <Cw> avec hjkl changera de fenêtre - les touches fléchées ne sont pas nécessaires.
graywh
4
<CS-Tab> demande RSI. J'ai mappé <SJ> :bpet <SK> vers:bn
puk le
3
Remapper <SJ> semble être un mauvais choix en mode normal, car cela est couramment utilisé (pour concaténer des lignes).
Michael Percy
18
nmap <Leader>bb :ls<CR>:buffer<Space>

et personne n'a mentionné le joli plugin ctrlp.vim . En utilisant ce plugin, vous pouvez rechercher le tampon par nom.

KOlegA
la source
J'aime cette cartographie! Intelligent et flexible.
ivan
14

j'utilise

CTRL- Jpour le prochain tampon

CTRL- Kpour le tampon précédent

CTRL- Lpour l'onglet suivant

CTRL- Hpour l'onglet précédent

Voici la .vimrcconfiguration:

map <C-J> :bnext<CR>
map <C-K> :bprev<CR>
map <C-L> :tabn<CR>
map <C-H> :tabp<CR>

Voir http://syskall.com/my-biggest-vim-productivity-boost/

Olivier Lalonde
la source
5
imap <A-1> <Esc>:tabn 1<CR>i
imap <A-2> <Esc>:tabn 2<CR>i
imap <A-3> <Esc>:tabn 3<CR>i
imap <A-4> <Esc>:tabn 4<CR>i
imap <A-5> <Esc>:tabn 5<CR>i
imap <A-6> <Esc>:tabn 6<CR>i
imap <A-7> <Esc>:tabn 7<CR>i
imap <A-8> <Esc>:tabn 8<CR>i
imap <A-9> <Esc>:tabn 9<CR>i

map <A-1> :tabn 1<CR>
map <A-2> :tabn 2<CR>
map <A-3> :tabn 3<CR>
map <A-4> :tabn 4<CR>
map <A-5> :tabn 5<CR>
map <A-6> :tabn 6<CR>
map <A-7> :tabn 7<CR>
map <A-8> :tabn 8<CR>
map <A-9> :tabn 9<CR>
Terminus
la source
1
La chose la plus intéressante avec Vim est que vous pouvez apprendre quelque chose tous les jours!
Luc M
La question concerne les tampons , pas les onglets ... mais vous pouvez d' :tab sballabord, ou au lieu d'utiliser, :tabnvous devriez utiliser:buffer
para
5

Je suis récemment devenu plus minimaliste.

Pour faire un cycle des tampons que j'utilise ]bet sans [baltération: https://github.com/tpope/vim-unimpaired

Pour passer directement à un tampon ouvert, utilisez simplement la complétion de tabulation de Vim avec :b. Quelques lettres suffisent pour accéder à n'importe quel tampon ouvert avec un onglet ou deux.

De même pour ouvrir les tampons que j'utilise :eavec des chemins relatifs et des onglets complets.

J'utilise aussi :lsoccasionnellement pour voir quels tampons j'ai ouverts (et pour vérifier leur statut modifié).

Pour me débarrasser d'un tampon, j'utilise :bwpour essuyer le tampon. Je fais généralement une division temporaire et change les tampons pour préserver ma mise en page, car :bwferme également la fenêtre active.

Toutes les choses minibuf que j'ai essayées ont fini par m'ennuyer, et je ne veux pas de chose intelligente qui ouvre des fichiers aléatoires pour moi. Si j'ai vraiment besoin de rechercher quelque chose, j'utilise NERDtree ( :e .).

IDK, Dernièrement, j'ai aussi abandonné Yankring (parce que ça se passe mal xp) et j'ai commencé à utiliser des registres, et j'ai récemment décidé que les mouvements f/ tétaient la meilleure chose qui soit ...

kitsu.eb
la source
Ce sont tous de bons conseils. J'ai mappé <leader>llà :ls. De plus, il est vraiment utile de vous assurer que vous avez set wildmenudans votre .vimrccar alors vous obtenez un petit menu qui propose toutes les alternatives pour:b
icc97
2

L'excellent Buffer Explorer , le be est devenu une mémoire musculaire si forte que je me surprends à souhaiter pouvoir l'utiliser dans d'autres applications. Je trouve que c'est extrêmement rapide lors de l'édition active de plus de deux fichiers.

csexton
la source
2

J'ai passé pas mal de temps à construire mon .vimrc pour travailler avec ce projet HTML :: Mason sur lequel je suis depuis quatre ans, donc j'ai un étrange mélange d'onglets et de fenêtres fractionnées. Pour votre plaisir visuel:

map ;o :Sex <CR>
map <C-J> <C-W>j
map <C-K> <C-W>k
map <C-l> <C-W>l
map <C-h> <C-W>h
map ;] :tabnext<CR>
map ;[ :tabprev<CR>
map <C-t> :tabe +"browse ."<CR>
map <C-O> :NERDTreeToggle ~/curr/trunk/<CR>
Jack M.
la source
2

J'utilise tselectbuffer . C'est vraiment rapide et contrairement à bufexplorer, il ne prend pas de place dans votre fenêtre. Il a également une recherche incrémentielle, j'ai essayé minibufexplorer et j'ai trouvé la navigation dans le tampon un peu difficile.

Taureau Olson
la source
Merci pour le pointeur, maintenant j'utilise les deux. Les valeurs par défaut pour BufExplorer sont ,be, ,bs, ,bv, donc je cartographié TSelectBuffer à ,bb.
Brady Trainor
2

Pour lister et basculer entre les tampons que j'utilise:

nnoremap <Leader>l :ls<CR>:b<space>

Pour basculer entre les tampons:

map <Leader>n :bn<CR>
map <Leader>p :bp<CR>
diegoviola
la source
2

J'ai mappé <S-J>et <S-K>vers :bpet :bn, bien que j'admette que je ne l'utilise pas car le nombre de fichiers est supérieur à 10. J'ai ensuite mappé <C-J>et <C-K>aux onglets précédent et suivant de Gnome Terminal, et j'exécute généralement 4 instances de vim pour chacun des les 4 différents projets sur lesquels je travaille. Je souhaite toujours vraiment que le tampon suivant et précédent aille dans l'historique des tampons sur lesquels j'ai travaillé, et non dans l'ordre dans la liste de tampons.

vomir
la source
2

J'utilise tselectbuffer. C'est vraiment rapide et contrairement à bufexplorer, il ne prend pas de place dans votre fenêtre. Il a également une recherche incrémentielle, j'ai essayé minibufexplorer et j'ai trouvé la navigation dans le tampon un peu difficile.

anita
la source
0

J'utilise simple: vsplit avec ^ W + w / ^ W + r et: tabnew avec les combinaisons de touches Ctrl + Alt + PgUp / PgDown.

Eimantas
la source
1
Je suis d'accord avec ce que Zathrus a dit ici . Les onglets dans Vim (ou Emacs avec TabBar d'ailleurs) ne fonctionnent tout simplement pas comme dans les interfaces à onglets habituelles.
Alexey Romanov
0

Lorsqu'il y a plusieurs tampons ouverts dans une session Vim, il peut devenir difficile de garder une trace des tampons et de leurs numéros de tampons respectifs. Si tel est le cas, le passage à un autre fichier peut être facilité à l'aide d'une simple carte:

: nnoremap (F5): tampons (CR): tampon (espace)

vim.wikia.com

castor
la source