2015-01-26 131 views
0

使用vim和vim-airline,我有一种情况,我希望能够关闭缓冲区(如果存在),并且如果不关闭vim。Vim-airline关闭缓冲区/退出vim

因为速度原因,我首先将:x重新映射到;x

nnoremap : ; 

然后我映射;x关闭与VIM航空公司

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

打开缓冲区现在的问题是,当我最后关闭所有的缓冲区,我不能用;x退出Vim。

有什么办法检查vim-airline中是否存在缓冲区并关闭它? 看到this post但它更多的是NERDTree。

+1

['nnoremap'是非递归](http://stackoverflow.com/q/3776117/78845),并不会调用您的其他映射。 – Johnsyweb 2015-01-26 23:29:01

+0

好的,那是否意味着我的'nnoremap:;'需要更改或缓冲区关闭命令? – mhartington 2015-01-27 00:01:25

回答

1

问题:nnoremap : ;将改变:键来调用;命令的原来的值,即跳到由fFtT匹配下一个字符。如果您想使用;x,则需要重新映射相反:nnoremap ; :

nnoremap :x ...将使用:的原始值:x,所以一切都应该正常工作。另外,也可能不太安全,如果您指定了map! x,cmap x,lmap x或它们的非递归变体,则可以执行nmap ;x ...以调用:的重新定义值(并且可能重新定义值为x)。

另外,:bd不会关闭Vim,只有缓冲区和一个窗口。如果你在最后一个缓冲区,你会被转储到一个新的未命名的缓冲区(比如:enew)。要关闭缓冲区或Vim,请使用:q,这就是它的用途。 (另外,我不明白你的意思是“vim-airline中存在缓冲区”,Airline是一个状态栏插件,缓冲区既可以存在也可以不存在,两者无关,至少不以我明显的方式)。