这真的是noob问题。有一组vim命令
:command1:command2
等等,我会经常用原始的方式输入。如何让它自动化?它是简单的regexp替换命令集,但我不能在 sed 中编写脚本,因为它涉及非拉丁语言环境,并且出于某种原因 vim 句柄非拉丁正则表达式正确,而 sed 则没有。
答案 0 :(得分:2)
为什么不把它们放在一个函数中,然后调用函数?
答案 1 :(得分:2)
如果命令集不总是相同,则命令可以记录在宏中:
qq
开始录制宏(第二个q是宏的“名称”)@q
重播宏与任何其他命令一样,宏可以连续多次执行,例如5@q
。
如果设置了:noremap
,则可以将宏从一个会话保存到另一个会话作为注册。
答案 2 :(得分:1)
你可以
将它们设为命令
:command! DoStuff thing1 | thing2
然后用
执行它:DoStuff
或宏
qq:thing1<CR>:thing2<CR>q
(<CR>
表示“按ENTER”)表示您
访问
@q
或功能
:funct! DoStuff()
: thing1
: thing2
:endfunct
你
致电
:call DoStuff()
或通过命令访问
:command! DoStuff call DoStuff()
您使用
执行:DoStuff
或只是运行
:thing1 | thing2
在单个命令行中然后
点击:thi
(即前几个字母
()命令)然后使用
向上箭头回忆最近的
已启动的命令历史记录行
用那个命令。
使用“bar”,即|
,命令分隔符不适用于所有命令,但可以与大多数命令一起使用。如果thing1
或thing2
是无法使用条形码排序的命令之一,则您必须
或者你可以做
:exec 'thing1' | exec 'thing2'
在命令行或:command
中,但如果thing1
或thing2
本身包含单引号,则必须小心。
选择哪种选项最合适通常取决于您想要做的事情的复杂性。
功能可以轻松参数化您的命令,即在其中使用变量,并且对于组合一系列长命令非常有用,但有点啰嗦对于简单的案例。有关详细信息,请参阅:help user-functions
。
宏很方便,但你只能拥有其中的26个而且它们的命名通常很差(即带有一些字母的字母)。另请注意,如果您通过y
,c
等将相关内容存储在同一个寄存器中,则会覆盖您的宏。有关详细信息,请参阅:help recording
。
命令让你给你的例程一个有意义的名字,可以用不同于函数的方式进行参数化,并且可以做其他奇特的事情,比如tab完成。命令必须写在一行上,这就是为什么vim脚本实现除了调用函数之外什么都不做的命令的常见原因。有关详细信息,请参阅:help user-commands
。
如果这一系列命令最终成为您定期使用的内容,则可以将宏/命令/函数定义添加到 vimrc
文件中,这将导致它每当你使用vim时准备好去。在linux或OS / X下,您的vimrc文件是文件~/.vimrc
。在你的vimrc中设置宏是有点棘手的,如果你要去那个长度你也可以把它变成一个函数或命令。