2015-07-24 6 views
1

Я хочу remap:q в :bd, потому что я действительно не хочу, чтобы буфер остаться вокруг в сеансе продолжительном vim (где он может держать .swp файл конфликтует с другим vim сеанс того же файла).Закройте Vim, когда все буферы закрыты после того, как: бд

Единственная проблема с этим: :bd не уходит vim, если это последний буфер слева. Как я могу это достичь?

+1

Вы смотрели на [BBye] (https://github.com/moll/vim-bbye)? Однако это указывает на то, что может не удовлетворить ваш вопрос: «Показывает пустой файл, если у вас нет других открытых файлов». –

+0

Спасибо, Мика. Мне действительно не нужны фантастические функции «BBye». Я хочу, чтобы ': q' означал': bd', но просто сделайте ': q' (т. Е. Выйдите из' vim'), если это последний буфер. –

+1

Попробуйте следующее: http://superuser.com/questions/668528/vim-quit-if-buffer-list-is-empty/930871#930871. – ryuichiro

ответ

1

Что-то, как это должно работать:

fun! s:quitiflast() 
    bdelete 
    let bufcnt = len(filter(range(1, bufnr('$')), 'buflisted(v:val)')) 
    if bufcnt < 2 
     echo 'shutting everything down' 
     quit 
    endif 
endfun 

command! Bd :call s:quitiflast() 

cmap q Bd 
+0

Простой 'cmap q Bd' - очень плохая идея, после этого вы не сможете написать какое-либо слово, содержащее« q »в командной строке. См. [Wiki] (http://vim.wikia.com/wiki/Mapping_to_enter_colon_commands) для лучшего способа сделать это. –