微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在vim中有效撤消自动完成

现在我正在使用 vim中的自动完成功能,我已经确定了 supertab来处理我的完成情况.虽然它的运行非常顺利(我认为)正如它的设计,我想知道如何改变一些东西.

首先,我在Ubuntu 12.04LTS上运行7.3.429

set completeopt=menuone,preview,longest

所以我有supertab的bash类型自动完成,认完成.

假设我的文件中有以下内容

aaabbbcccddd
aaabbccddeef
aaabbcddeeff

如果我输入aa并点击Tab,那么vim意识到aaabb是匹配中最长的常用字符串,因此它会插入aaabb并显示包含三个选项的菜单.如果我确实想要其中一个选项,那么一切都很好.但也许我真的想要aaaaazzzzz,但没有意识到我还没有输入它.

是否有一个很好的方式来对vim说:“哦,我很抱歉!毕竟我并不是要完成任务!请假装我没有.”

现在,对我来说明显的选择是:

>点击Tab或Shift Tab足够的时间回到我的初始.但是如果有很多相似的词,特别是不同的长度,这很烦人.
>然后多次必要的退格,或其他一些天真的删除.但这些肯定是不必要的关键.
>点击Esc u以获得撤消,但这会撤消我的全部信息(如果我快速键入,则会更多).这是完全不可接受的.然后,我需要重新进入插入模式并重新输入.毛.
>按住Ctrl U可以撤消而不离开插入模式.但这也有过多的消除方式.
>按Ctrl W删除最后一个单词.虽然我在不退出插入模式的情况下执行此操作,但仍需要重新键入.这是迄今为止我发现的最好的.

如果我没有启用最长时间,那么我可以使用Ctrl E,退出菜单而不插入任何其他内容.但是,由于最长时间打开,它会停止自动完成,但会保留输入的最长公共匹配.

当然必须有更好的方法来做到这一点.

解决方法

在vim中有两种本地方法可以做到这一点.如果您知道该项目不在完成菜单中的正确方式,您可以使用< c-y>. c为C-Y GT;接受当前匹配,如果您没有移动,则任何完成将仅返回您插入的文本. (第二种方式)但是,如果您确实在完成菜单中移动,则可以移动直至返回原始文本.

但是我想,简单地接受最长的匹配并编辑单词并不难.您还可以使用< c-g> u将撤消块拆分为< tab>映射.虽然这可能会超过你想要的历史.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐