web-dev-qa-db-fra.com

Quitter automatiquement vim si NERDTree est le dernier et unique tampon

J'ai le suivant dans mon .vimrc:

""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Open NERDTree by default
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
autocmd VimEnter * NERDTree
autocmd VimEnter * wincmd p

Alors,

% vim file.txt

ouvre NERDTree et déplace le curseur dans la mémoire tampon file.txt. Je fais mes modifications et tape: q sur le tampon, et il me reste. . . NERDTree. C'est énervant.

Je pourrais utiliser: qa pour fermer tous les tampons et quitter vim, mais je suis habitué au trope: q. Je me demande donc s'il existe un moyen de détecter que le seul tampon restant est NERDTree et de "fédérer" les deux tampons, aux fins de: q

Modifier

Demandez et vous recevrez: https://github.com/scrooloose/nerdtree/issues#issue/21

46
g33kz0r

Un script permettant de faire exactement cela a été posté sur la liste des problèmes NERDTree. Checkout numéro 21 sur GitHub pour nerdtree.

Ceci mène à la commande de ligne unique pour votre vimrc here :

autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTree") && b:NERDTree.isTabTree()) | q | endif
79
Andrew
function! s:CloseIfOnlyControlWinLeft()
  if winnr("$") != 1
    return
  endif
  if (exists("t:NERDTreeBufName") && bufwinnr(t:NERDTreeBufName) != -1)
        \ || &buftype == 'quickfix'
    q
  endif
endfunction
augroup CloseIfOnlyControlWinLeft
  au!
  au BufEnter * call s:CloseIfOnlyControlWinLeft()
augroup END

De mon vimrc , basé sur une version de janus repo .

Améliorations: se ferme également si seulement une fenêtre de correction rapide est laissée. Il utilise à la place la commande automatique BufEnter, qui est requise pour que &bt fonctionne correctement.

12
blueyed

Une idée à mettre en œuvre:

Vous pourriez écrire une fonction qui, lorsqu'elle est appelée, vérifie si le seul tampon restant (ou peut-être le seul tampon autre que d'aide, si vous préférez) est un tampon NERDTree et, si tel est le cas, le supprime (ou quitte simplement).

Puis demandez à un autocmd de le lancer chaque fois qu'un tampon est supprimé/caché/quoi que ce soit qui se passe réellement quand vous: q (cela me fait honte d'admettre que je ne suis pas tout à fait sûr!).

1
Michał Marczyk

J'aime faire ceci: cmap bq :bufdo q<CR> pour fermer tous les tampons avec deux frappes de touche en mode commande.

0

Vous pourriez :cabbrv q qa mais je déconseillerais cela car vous l'oublierez quand vous voudrez réellement q.

0
Randy Morris