Я бы хотел, чтобы :bd
и :bw
фактически вышли из сеанса vim, если после удаления текущего буфера список буферов пуст (т. Е. Если до выполнения :bd
или :bw
меня был только текущий буфер в буфере список). Как я могу сделать это? Я предполагаю, что это должно быть довольно легко, но поиск в Google не принес ничего полезного, и до сих пор мне не удалось написать autocmd
для достижения этой цели.
3
2 ответа
7
Чтобы проверить наличие одного буфера, вам нужно перебрать все потенциальные буферы и проверить, все ли они перечислены (например, в :ls
). Проверка запускается всякий раз, когда буфер удаляется:
:autocmd BufDelete * if len(filter(range(1, bufnr('$')), '! empty(bufname(v:val)) && buflisted(v:val)')) == 1 | quit | endif
1
Предлагаемое решение может быть проблематичным в отношении некоторых плагинов. Это ярлык, который сделал это для меня, и он кажется более безопасным, так как не использует 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>
Он использует bd
если нет единственного буфера без имени, когда он использует вместо этого quit
.