在:bd之后关闭所有缓冲区时退出vim

在:bd之后关闭所有缓冲区时退出vim,vim,Vim,我想要:q作为:bd,因为我真的不希望缓冲区停留在长时间运行的vim会话中(在该会话中,缓冲区可以容纳一个.swp文件与同一文件的另一个vim会话冲突) 唯一的问题是:如果是剩下的最后一个缓冲区,bd不会退出vim。我怎样才能做到这一点呢?像这样的方法应该可以奏效: fun! s:quitiflast() bdelete let bufcnt = len(filter(range(1, bufnr('$')), 'buflisted(v:val)')) if bufcnt

我想要
:q
作为
:bd
,因为我真的不希望缓冲区停留在长时间运行的
vim
会话中(在该会话中,缓冲区可以容纳一个
.swp
文件与同一文件的另一个
vim
会话冲突)


唯一的问题是
:如果是剩下的最后一个缓冲区,bd
不会退出
vim
。我怎样才能做到这一点呢?

像这样的方法应该可以奏效:

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
有趣!s:quitiflast()
核销
设bufcnt=len(过滤器(范围(1,bufnr(“$”),“buflisted(v:val)”)
如果bufcnt<2
echo“关闭一切”
退出
恩迪夫
结束
命令!Bd:调用s:quitiflast()
cmap q Bd

您看过吗?但是,它确实说明了这一点,这可能无法满足您的问题:“如果您没有打开其他文件,则显示一个空文件。”谢谢Micah。实际上,我不需要花哨的
BBye
功能。我想
:q
意思是
:bd
,但如果这是最后一个缓冲区,就做
:q
(即退出
vim
)吧。试试这个:.Plain
cmap q bd
真是个坏主意,之后你就不能在命令行上写任何包含“q”的字了。有关更好的方法,请参阅。