web-dev-qa-db-fra.com

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

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 une recherche incrémentale, la façon dont je permute entre les tampons dans Emacs. Il y a sûrement un script comme ça?

92
Alexey Romanov

J'utilise Wincent Colaiuta plugin Command-T vim depuis quelques mois maintenant. Wincent en 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 est nommé "Command-T" car il est inspiré par le "Go vers le fichier "lié à Command-T dans TextMate.

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

Changement 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 du tampon, mappe les commandes de changement de tampon les plus utiles à mes <Leader> et aux touches de la ligne d'accueil 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 sa propre division horizontale supérieure.

23
David Rivers

J'avais l'habitude d'utiliser une combinaison d'onglets et de plusieurs instances gvim, en gardant 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 quelques astuces intéressantes:

  • Ctrl-w s et Ctrl-w v pour diviser la fenêtre actuelle
  • Ctrl-6 pour basculer entre deux tampons dans la même fenêtre.
  • le génial fuzzyfinder.vim qui vous donne la recherche de saisie semi-automatique des fichiers dans votre répertoire actuel ou des tampons que vous avez actuellement ouverts
  • Les propres de Jamis fuzzy_file_Finder et fuzzyfinder_textmate , 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'elle 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 afin que je puisse voir plusieurs fichiers à la fois. J'ai lié Ctrl-F à fuzzyfinder_textmate, donc maintenant si je tape (disons) Ctrl-F mod/usob il ouvre app/models/user_observer.rb. Je ne me soucie presque plus des onglets.

Mise à jour 2010/08/07

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

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

73
Sam Stokes

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

33
orip

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) avec ctrl enfoncé pour se déplacer entre les fenêtres divisé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>

Ceux-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 le savoir.

31
Dave Ray
nmap <Leader>bb :ls<CR>:buffer<Space>

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

18
KOlegA

J'utilise

CTRL-J pour le tampon suivant

CTRL-K pour le tampon précédent

CTRL-L pour l'onglet suivant

CTRL-H pour l'onglet précédent

Voici la .vimrc configuration:

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/

14
Olivier Lalonde
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>
5
Terminus

Je suis récemment devenu plus minimaliste.

Pour faire défiler les tampons que j'utilise ]b et [b de non altéré: https://github.com/tpope/vim-unimpaired

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

De même pour ouvrir les tampons que j'utilise :e avec chemins relatifs et onglet terminés.

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

Pour se débarrasser d'un tampon que j'utilise :bw pour effacer le tampon. Je fais habituellement une séparation temporaire et change les tampons pour conserver ma disposition :bw ferme également la fenêtre active.

Toutes les choses que j'ai essayées sur le minibuf ont fini par m'ennuyer, et je ne veux pas qu'une correspondance intelligente 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 également laissé tomber Yankring (parce qu'il fout xp) et j'ai commencé à utiliser des registres, et j'ai récemment décidé f/t les mouvements sont la plus grande chose jamais ...

5
kitsu.eb

Pour répertorier 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>
2
diegoviola

J'ai passé un bon moment à construire mon .vimrc pour travailler avec ce projet HTML :: Mason sur lequel je travaille depuis quatre ans, j'ai donc un mélange étrange d'onglets et de fenêtres divisé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>
2
Jack M.

J'utilise tselectbuffer . C'est vraiment rapide et contrairement à bufexplorer 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.

2
Taurus Olson

J'utilise tselectbuffer. C'est vraiment rapide et contrairement à bufexplorer 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.

2
anita

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

2
csexton

J'ai cartographié <S-J> et <S-K> à :bp et :bn, bien que j'avoue 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 4 projets différents sur lesquels je travaille. Je souhaite toujours vraiment que le tampon suivant et précédent aille à l'historique des tampons sur lesquels j'ai travaillé, et non à l'ordre dans la liste des tampons.

2
puk

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

0
castor

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

0
Eimantas