Réponses:
Vous pouvez utiliser ce script depuis vim.org:
http://www.vim.org/scripts/script.php?script_id=1071
Placez-le simplement dans votre .vim/plugin
répertoire, puis utilisez la :BufOnly
commande pour fermer tous les tampons sauf celui actif. Vous pouvez également le cartographier ailleurs dans votre fichier .vimrc
.
Source sur Github (via le miroir vim-scripts): https://github.com/vim-scripts/BufOnly.vim/blob/master/plugin/BufOnly.vim
Essaye ça
bufdo bd
bufdo exécute la commande pour tous les tampons
bd
commande de fermer le vim lui-même; nnoremap <silent> <leader>c :NERDTreeClose<bar>bufdo bd<CR>
.
J'ai pu le faire assez facilement comme ceci:
:%bd|e#
:%bd|e#
%bd
= supprimer tous les tampons. e#
= ouvrir le dernier tampon pour l'édition. Le tuyau entre les deux exécute simplement une commande après l'autre.
%bd|e#|bd#
pour supprimer le [No Name]
tampon qui est créé.
command! BufOnly silent! execute "%bd|e#|bd#"
|
:map <leader>o :%bd\|e#<cr>
Si vous ne vous souciez pas de l'actuel, il est plus simple de faire quelque chose comme (pas besoin de script):
1,100bd
nnoremap <leader>bd :%bd | NERDTree<cr>
E16: Invalid range
parce que certains des tampons de la plage n'existent pas réellement. Il ignorait cela jusqu'à récemment.
:ls
pour voir le plus grand tampon que vous avez réellement ouvert, et définissez votre plage sur cela (c'est-à-dire si votre tampon le plus élevé est 22, alors :1,22bd
). J'ai eu la même erreur jusqu'à ce que je fasse cela.
je fais ça
:w | %bd | e#
Mon préféré si je veux juste que mon tampon actuel ouvre et ferme tous les autres.
Fonctionnement: commencez par écrire les modifications du tampon en cours, puis fermez tous les tampons ouverts, puis rouvrez le tampon sur lequel j'étais actuellement. Dans Vim, |
enchaîne l'exécution des commandes ensemble. Si votre tampon est à jour, ce qui précède peut être réduit à:%bd | e#
%
ne peut pas fonctionner comme tous les sélecteurs. Pourriez-vous deviner quelque chose?
bufnr("$")
qui renvoie le dernier numéro de tampon. mais je n'ai aucune idée d'interpoler à la chaîne lorsque j'utilise comme ça :1,bufnr("$")bd
. Peut-être .. la meilleure solution serait :1,9999bd
.
:help :bd
montre :%bdelete " delete all buffers
. C'est %
exactement ce que vous voulez. J'utilise une variante de votre solution: :%bd<CR><C-O>:bd#<CR>
cela supprimera tous les tampons, puis utilisera <C-O>
pour récupérer la position dans le fichier actuel, puis :bd#
pour supprimer le tampon non nommé. Cela ferme tous les tampons et vous laisse au même emplacement dans le fichier.
S'appuyant sur la réponse de juananruiz.
Faites un petit changement dans le tampon que vous souhaitez conserver, puis
:1,1000bd
La commande bd
(suppression du tampon) ne supprimera aucun tampon avec des modifications non enregistrées. De cette façon, vous pouvez conserver le fichier actuel (modifié) dans la liste des tampons.
Modifier: veuillez noter que cela supprimera également votre NERDTreeBuffer. Vous pouvez le récupérer avec: NERDTree
set nohidden
d'être réglé?
Fermeture de tous les tampons ouverts:
silent! execute "1,".bufnr("$")."bd"
Fermeture de tous les tampons ouverts à l' exception du tampon actuel :
function! CloseAllBuffersButCurrent()
let curr = bufnr("%")
let last = bufnr("$")
if curr > 1 | silent! execute "1,".(curr-1)."bd" | endif
if curr < last | silent! execute (curr+1).",".last."bd" | endif
endfunction
Ajoutez cette fonction à .vimrc
et appelez-la avec :call CloseAllBuffersButCurrent()
.
Carte pratique:
nmap <Leader>\c :call CloseAllBuffersButCurrent()<CR>
:%bd|e#|bd#
nmap <Leader>\c :call CloseAllBuffersButCurrent()<CR>:NERDTree<CR>
Je mets cela dans mon fichier .vimrc
nnoremap <leader>ca :w <bar> %bd <bar> e# <bar> bd# <CR>
puis votre leader + ca
(tout fermer) ferme tous les tampons sauf le courant.
Ce qu'il fait c'est
: w - sauvegarde le tampon actuel
% bd - ferme tous les tampons
e # - ouvre le dernier fichier modifié
bd # - ferme le tampon sans nom
Il y a un plugin qui fait exactement cela et un peu plus!
Découvrez close-buffers.vim
Voici ce que je fais. Donc, j'aime garder la position de mon curseur après avoir supprimé tous les tampons et la plupart des solutions ci-dessus ignorent simplement ce fait. Je pense également que le remappage de la commande est préférable à la frappe, alors ici, j'utilise <leader>bd
pour supprimer tous les tampons et revenir à la position d'origine du curseur.
noremap <leader>bd :%bd\|e#\|bd#<cr>\|'"
%bd
= supprimer tous les tampons.
e#
= ouvrir le dernier tampon pour l'édition (quel est le tampon sur lequel je travaille).
bd#
pour supprimer le tampon [No Name] qui est créé lorsque vous utilisez %bd
.
Le tuyau entre les deux ne fait qu'une commande après l'autre. Vous devez y échapper en utilisant\|
'"
= garder la position de mon curseur.
J'aime 1,100bd
( suggéré par juananruiz ) qui semble fonctionner pour moi.
J'ai ajouté un quit!
à ma cartographie pour me donner
nnoremap <leader>bd :1,100bd<CR>
nnoremap <leader>bdq :1,100bd<CR>:q!<CR>
Cela tue tous les tampons et arrête Vim, ce que je cherchais principalement.
bdq
mappage qui ferme tous les tampons et quitte vim avec :q!
, alors que vous pouvez simplement l'utiliser :qa!
. Sauf si je
Que diriez-vous simplement:
ctrl-w o
(merci à https://thoughtbot.com/blog/vim-splits-move-faster-and-more-naturally )