Vim:在用户定义的命令中发出普通模式命令

时间:2014-09-11 15:17:29

标签: vim

我确定会在某个地方提出这个问题,但我不能在我的生活中找到它,而且它不在Vim文档的Defining command-line commands部分中

我想创建一个用户定义的命令,它会在当前单词之前插入单词foo

(注意:我希望它是一个功能,因为我不相信自己记住另一个快捷键。我知道如何使用{{1} } ...)功能

在我的noremap我添加:

.vimrc

但是当我输入command AddFoo bifoo<esc>w 时,我会:AddFoo

是否可以使用发出普通模式命令的功能?

3 个答案:

答案 0 :(得分:4)

:normal Ex命令允许发出任意正常模式命令。

command AddFoo normal! bifoo<esc>w

如果要插入表达式等,则需要使用:execute;我将使用:help key-notation

再次展示您的示例
command AddFoo execute "normal! bifoo\<esc>w"

!之后的:normal会阻止使用自定义映射,例如:noremap(vs :map)。

答案 1 :(得分:1)

请确保您获得命令和功能之间的区别。

命令定义的右侧应该至少一个Ex命令,如writebnext

command! Foo update | tabnext

你可以调用一个函数:

command! Bar call Bar()

或执行普通模式宏:

command! Baz normal ciw"<C-r>""

请参阅:help :normal

答案 2 :(得分:0)

应该很容易得到你想要的东西,你只需要切换到正常模式进行更改:

command AddFoo normal bifoo<esc>w