在 vim 中按 Enter 之前不要展开命令行映射 (cmap)

在 vim 中按 Enter 之前不要展开命令行映射 (cmap)

我有

cmap w!! %!sudo tee > /dev/null %

在我的.vimrc

当我w在 vim 命令行(之后:)中输入 a 时,光标会w在向右移动之前停留在 上几秒钟。这有时会打断我的思路,让我困惑几秒钟。有没有办法让映射在命令后按 Enter 时发生,这样它就不会在w我每次按它时暂时“吃掉”?

(顺便说一句,当我输入搜索查询时,此映射也会w!!扩展,这在实践中并不烦人(除了w类似延迟的事实),但看起来很奇怪。)

答案1

我刚刚尝试过:

cabbrev w!! %!sudo tee > /dev/null %

延迟展开直到按空格或回车键,但奇怪地写出密码提示在之上命令的扩展,所以命令行看起来像

Password:ee > /dev/null %

(如果忽略显示错误,则可以正常工作)。

答案2

您可以使用以下命令更改此行为timeouttimeoutlen选项。引用文档:

如果 'timeout' 选项打开(这是默认值),Vim 将只等待一秒(或与 'timeoutlen' 选项指定的时间一样长)。之后,它假设该字符将被如此解释。

相关内容