Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
重新映射vim:x以关闭缓冲区,仅当它是最后一个缓冲区时才退出_Vim - Fatal编程技术网

重新映射vim:x以关闭缓冲区,仅当它是最后一个缓冲区时才退出

重新映射vim:x以关闭缓冲区,仅当它是最后一个缓冲区时才退出,vim,Vim,我想更改Vim中的:x命令,以便它关闭一个缓冲区,除非它是最后一个缓冲区,否则它应该像现在一样工作(即关闭Vim) 我读过一些东西,但不是一路读下去的。我也使用NERDTree,希望在考虑它是否是最后一个缓冲区时忽略它 我有一个基于我提到的链接的部分工作解决方案,但这使得无法使用vim命令退出vim(因为退出命令已重新映射) 我有 cnoreabbrev <expr> x getcmdtype() == ":" && getcmdline() == 'x' ? 'w&

我想更改Vim中的:x命令,以便它关闭一个缓冲区,除非它是最后一个缓冲区,否则它应该像现在一样工作(即关闭Vim)

我读过一些东西,但不是一路读下去的。我也使用NERDTree,希望在考虑它是否是最后一个缓冲区时忽略它

我有一个基于我提到的链接的部分工作解决方案,但这使得无法使用vim命令退出vim(因为退出命令已重新映射)

我有

cnoreabbrev <expr> x getcmdtype() == ":" && getcmdline() == 'x' ? 'w<bar>bd' : 'x'
cnoreabbrev <expr> wq getcmdtype() == ":" && getcmdline() == 'wq' ? 'w<bar>bd' : 'wq'
cnoreabbrev <expr> q getcmdtype() == ":" && getcmdline() == 'q' ? 'bd' : 'q'
cnoreabrev x getcmdtype()==”:“&&getcmdline()=='x'?'wbd':'x'
cnoreabbrev wq getcmdtype()==”:“&&getcmdline()=='wq'?'wbd':'wq'
cnoreabbrev q getcmdtype()==”:“&&getcmdline()=='q'?'bd':'q'
因此:x(或:wq)将保存并关闭当前缓冲区,而:q将仅关闭它

我想补充的是。。。如果该缓冲区也是最后一个缓冲区(忽略NERDTree),则它也将退出vim

这可能吗?

来自works的回答:


您是否尝试过用
:q
代替
:x
?它可以做你想做的事情,但在退出时不保存(你可以使用
:wq
):q不关闭缓冲区,它只是隐藏它。很抱歉,我没有完全阅读这个问题。仅供参考,你可以简单地使用
:bd
关闭当前缓冲区。我知道。但是经过20年的打字:x,旧习惯很难改掉;)
autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTreeType") && b:NERDTreeType == "primary") | q | endif