Est-ce que quelqu'un sait comment fermer un tampon dans VIM en utilisant NERDTree sans gâcher toutes vos fenêtres? L'arbre NERD découpe normalement votre affichage en deux fenêtres verticales (le navigateur sur votre gauche, puis votre fenêtre principale sur la droite). Si vous fermez un tampon, vous êtes réduit à une fenêtre de navigation de fichiers géants. Si vous sélectionnez un autre fichier, il ouvre une deuxième fenêtre mais en le séparant horizontalement. Des idées?Arbre VIM et NERD - fermer un tampon correctement
Répondre
Je n'utilise pas l'arbre NERD, mais si je comprends bien, vous voulez fermer un tampon sans fermer une fenêtre. Si mon raisonnement est correct, essayez ce script.
" Delete buffer while keeping window layout (don't close buffer's windows).
" Version 2008-11-18 from http://vim.wikia.com/wiki/VimTip165
if v:version < 700 || exists('loaded_bclose') || &cp
finish
endif
let loaded_bclose = 1
if !exists('bclose_multiple')
let bclose_multiple = 1
endif
" Display an error message.
function! s:Warn(msg)
echohl ErrorMsg
echomsg a:msg
echohl NONE
endfunction
" Command ':Bclose' executes ':bd' to delete buffer in current window.
" The window will show the alternate buffer (Ctrl-^) if it exists,
" or the previous buffer (:bp), or a blank buffer if no previous.
" Command ':Bclose!' is the same, but executes ':bd!' (discard changes).
" An optional argument can specify which buffer to close (name or number).
function! s:Bclose(bang, buffer)
if empty(a:buffer)
let btarget = bufnr('%')
elseif a:buffer =~ '^\d\+$'
let btarget = bufnr(str2nr(a:buffer))
else
let btarget = bufnr(a:buffer)
endif
if btarget < 0
call s:Warn('No matching buffer for '.a:buffer)
return
endif
if empty(a:bang) && getbufvar(btarget, '&modified')
call s:Warn('No write since last change for buffer '.btarget.' (use :Bclose!)')
return
endif
" Numbers of windows that view target buffer which we will delete.
let wnums = filter(range(1, winnr('$')), 'winbufnr(v:val) == btarget')
if !g:bclose_multiple && len(wnums) > 1
call s:Warn('Buffer is in multiple windows (use ":let bclose_multiple=1")')
return
endif
let wcurrent = winnr()
for w in wnums
execute w.'wincmd w'
let prevbuf = bufnr('#')
if prevbuf > 0 && buflisted(prevbuf) && prevbuf != w
buffer #
else
bprevious
endif
if btarget == bufnr('%')
" Numbers of listed buffers which are not the target to be deleted.
let blisted = filter(range(1, bufnr('$')), 'buflisted(v:val) && v:val != btarget')
" Listed, not target, and not displayed.
let bhidden = filter(copy(blisted), 'bufwinnr(v:val) < 0')
" Take the first buffer, if any (could be more intelligent).
let bjump = (bhidden + blisted + [-1])[0]
if bjump > 0
execute 'buffer '.bjump
else
execute 'enew'.a:bang
endif
endif
endfor
execute 'bdelete'.a:bang.' '.btarget
execute wcurrent.'wincmd w'
endfunction
command! -bang -complete=buffer -nargs=? Bclose call <SID>Bclose('<bang>', '<args>')
nnoremap <silent> <Leader>bd :Bclose<CR>
nnoremap <silent> <Leader>bD :Bclose!<CR>
:bd
fonctionne pour moi à 7.3 et NERDTree Vim 4.1.0.
Ouais, juste mis à jour MacVim à 7.3, maintenant ça marche aussi pour moi. – mxgrn
Hm, je suis sur Vim 7.3 et NERDTree 4.1 sur Ubuntu 12.04 et j'ai encore le problème de l'OP. – Milimetric
Ne fonctionne pas pour moi sur Vim 7.4, NERDTree 4.2.0 sur une machine Windows 7. – Juan
Le plug-in bufkill semble également résoudre ce problème.
Essayez cette application: nnoremap <leader>q :bp<cr>:bd #<cr>
Fonctionne très bien et si simple :) – newUserNameHere
Absolument magnifique solution. C'était sur le bout de ma langue. – cbartondock
- 1. Vim - Nerd commentateur. Première ligne commentée différemment
- 2. Comment démarrer VIM avec l'arbre NERD ouvert automatiquement?
- 3. Annuler l'onglet Fermer dans Vim
- 4. Remappage 'wq' pour enregistrer et fermer le tampon au lieu d'enregistrer et quitter
- 5. Comment puis-je réaffecter un numéro de tampon dans VIM?
- 6. vim: confirmez avant de fermer plusieurs onglets
- 7. comment quitter un buf dans vim
- 8. Onglets Vim et tampons
- 9. Comment organiser correctement un arbre de dépendance de module/module?
- 10. Qu'est-ce qu'une arborescence Splay, un arbre rouge-noir, un arbre AVL, un arbre B et un arbre-T?
- 11. Comment fermer correctement un canal de socket non bloquant?
- 12. Vim afficher le texte wchar correctement
- 13. Vim: Remplacer la sélection par le tampon par défaut sans écraser le tampon
- 14. Conserver le tampon d'annulation après avoir quitté VIM?
- 15. Vim, comment faire défiler vers le bas d'un tampon nommé
- 16. Yank nom de fichier/chemin du tampon courant dans Vim
- 17. Commande de copie vim dans le presse-papiers/tampon
- 18. Fermer une fenêtre fractionnée dans Vim sans redimensionner les autres fenêtres
- 19. Vim: ajouter un tampon de pâte à chaque fois un certain texte se trouve
- 20. comment puis-je savoir si un tampon vim est répertorié ou non dans l'api python de vim?
- 21. Traverser et filtrer un arbre en haskell
- 22. Définir un tampon caché comme 'nobuflisted'
- 23. fonction wm_concat et un petit tampon characer
- 24. Comment survivre à la transition du codage basé sur les onglets au tampon (Vim)
- 25. Divisions et fenêtres dans vim/emacs/etc .: pouvons-nous avoir des séparations spécifiques au tampon?
- 26. Nerd Dinner n'attrapant pas les erreurs
- 27. Fermer UIAlertView et remplacer par un autre
- 28. Didacticiel ASP.NET MVC 2.0 (Like Nerd Dinner)
- 29. Vim: ligne courante Indentation (blanc) et insérez
- 30. Comment faire pour exporter la sortie d'une commande externe vers un nouveau tampon dans Vim?
impressionnant ... c'est exactement ce que je cherchais –
thakns, fonctionne très bien - et utile non seulement pour NERDTree! – nihique