2015-01-26 1 views
0

С vim и vim-авиакомпанией у меня есть ситуация, когда я хочу иметь возможность закрыть буфер, если он существует, и если не закрыть vim.Vim-авиакомпания закрыть буфер/quit vim

Итак, я сначала перечислил :x в ;x по соображениям скорости.

nnoremap : ; 

Тогда я сопоставляюсь ;x закрыть буфера открыт с ВИМОМ-авиакомпанией

nnoremap :x :bp <BAR> bd #<CR> 

Теперь вопрос, когда я, наконец, закрыть все буфера, я не могу использовать ;x бросить Vim.

Есть ли способ проверить, существует ли буфер в vim-авиакомпании и закрыть его? Пила this post, но больше для NERDTree.

+1

['nnoremap' является нерекурсивным] (http://stackoverflow.com/q/3776117/78845) и не будет вызывать другие сопоставления. – Johnsyweb

+0

Хорошо, так это значит, что моя «nnoremap:;» должна быть изменена или команда закрытия буфера? – mhartington

ответ

1

Проблемы: nnoremap : ; изменит ключ :, чтобы вызвать первоначальное значение команды ;, т.е. переход к следующему символу, найденной f, F, t или T. Если вы хотите использовать ;x, вам необходимо переназначить обратное: nnoremap ; :.

nnoremap :x ... будет использовать исходное значение : для :x, поэтому все должно работать нормально. Альтернативно и менее безопасно вы можете сделать nmap ;x ..., чтобы вызвать переопределенное значение : (и, возможно, переопределенное значение x, если вы указали map! x, cmap x, lmap x или их нерекурсивные варианты).

Кроме того, :bd не будет закрывать Vim, только буфер и окно. Если вы находитесь в своем последнем буфере, вы попадаете в новый неназванный буфер (например, с :enew). Чтобы закрыть буфер или Vim, используйте :q, вот для чего он нужен.

(Кроме того, я не понимаю, что вы имели в виду под «буфером в vim-авиакомпании». Авиакомпания - это плагин состояния. Буферы существуют или нет. Оба не имеют ничего общего друг с другом, по крайней мере не так, как это очевидно для меня.)