将vim的:x重映射为关闭缓冲区,仅在它是最后一个缓冲区时退出。

4
我想要更改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'

所以:x(或者:wq)将保存并关闭当前缓冲区,而:q则只会关闭它。

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

这个可行吗?


1
你试过用:q代替:x吗?它基本上可以实现你想要的功能,但退出时不会保存(你可以使用:wq强制保存)。 - Prince Goulash
:q不会关闭缓冲区,它只是隐藏了它。 - starfry
抱歉,我没有完全阅读问题。 - Prince Goulash
你可以简单地使用 :bd 命令关闭当前缓冲区。 - ThiefMaster
1
我知道。但是打了20年的:x,老习惯难改 ;) - starfry
1个回答

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接