3

Я бы хотел, чтобы :bd и :bw фактически вышли из сеанса vim, если после удаления текущего буфера список буферов пуст (т. Е. Если до выполнения :bd или :bw меня был только текущий буфер в буфере список). Как я могу сделать это? Я предполагаю, что это должно быть довольно легко, но поиск в Google не принес ничего полезного, и до сих пор мне не удалось написать autocmd для достижения этой цели.

2 ответа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 .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .