3 votes

Vim : quitter si la liste des tampons est vide

J'aimerais :bd et :bw pour quitter ma session vim si, après la suppression du tampon actuel, la liste des tampons est vide (c'est-à-dire si, avant d'exécuter la commande :bd o :bw Je n'avais que le buffer actuel dans la liste des Buffers). Comment puis-je réaliser cela ? Je suppose que c'est assez facile, mais je n'ai rien trouvé d'utile en cherchant sur Google, et jusqu'à présent je n'ai pas réussi à écrire un fichier autocmd pour y parvenir.

7voto

jopa Points 800

Pour vérifier la présence d'un seul tampon, il faut itérer sur tous les tampons potentiels et vérifier s'ils sont toujours répertorié (par exemple en :ls ). La vérification est déclenchée chaque fois qu'un tampon est supprimé :

:autocmd BufDelete * if len(filter(range(1, bufnr('$')), '! empty(bufname(v:val)) && buflisted(v:val)')) == 1 | quit | endif

1voto

Christophe Herreman Points 11844

La solution proposée peut être problématique pour certains plugins. C'est le raccourci qui a fait l'affaire pour moi et il semble plus sûr car il ne repose pas sur les autocmds :

nn q :if ((len(filter(range(1, bufnr('$')), 'buflisted(v:val)')) == 1) && expand('%') == '')<Bar>exe 'q'<Bar>else<Bar>exe 'bd'<Bar>endif<cr>

Il utilise bd à moins qu'il n'y ait un seul tampon sans nom lorsqu'il utilise quit au lieu de cela.

0voto

Modifier à partir du haut :

    func  Smart_qq()
        if expand('%') == '' && ( len( filter( range(1, bufnr('$')),  'buflisted(v:val)' ) )  == 1 )
            exe 'quit!'
        else
            exe 'bdel!'
        endif
    endfunc

    nn  qq :call Smart_qq()<cr>
    vn  qq :call Smart_qq()<cr>

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X