如何在raw中运行几个vim命令

时间:2010-06-05 08:13:30

标签: bash vim scripting

这真的是noob问题。有一组vim命令

  

:command1:command2

等等,我会经常用原始的方式输入。如何让它自动化?它是简单的regexp替换命令集,但我不能在 sed 中编写脚本,因为它涉及非拉丁语言环境,并且出于某种原因 vim 句柄非拉丁正则表达式正确,而 sed 则没有。

3 个答案:

答案 0 :(得分:2)

为什么不把它们放在一个函数中,然后调用函数?

答案 1 :(得分:2)

如果命令集不总是相同,则命令可以记录在宏中:

  • qq开始录制宏(第二个q是宏的“名称”)
  • 执行命令集(记录命令和光标移动)
  • 按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”,即|,命令分隔符不适用于所有命令,但可以与大多数命令一起使用。如果thing1thing2是无法使用条形码排序的命令之一,则您必须

  • 使用宏或函数
  • 执行此操作
  • 或者你可以做

    :exec 'thing1' | exec 'thing2'
    

    在命令行或:command中,但如果thing1thing2本身包含单引号,则必须小心。

选择哪种选项最合适通常取决于您想要做的事情的复杂性。

功能可以轻松参数化您的命令,即在其中使用变量,并且对于组合一系列长命令非常有用,但有点啰嗦对于简单的案例。有关详细信息,请参阅:help user-functions

很方便,但你只能拥有其中的26个而且它们的命名通常很差(即带有一些字母的字母)。另请注意,如果您通过yc等将相关内容存储在同一个寄存器中,则会覆盖您的宏。有关详细信息,请参阅:help recording

命令让你给你的例程一个有意义的名字,可以用不同于函数的方式进行参数化,并且可以做其他奇特的事情,比如tab完成。命令必须写在一行上,这就是为什么vim脚本实现除了调用函数之外什么都不做的命令的常见原因。有关详细信息,请参阅:help user-commands

如果这一系列命令最终成为您定期使用的内容,则可以将宏/命令/函数定义添加到 vimrc 文件中,这将导致它每当你使用vim时准备好去。在linux或OS / X下,您的vimrc文件是文件~/.vimrc。在你的vimrc中设置宏是有点棘手的,如果你要去那个长度你也可以把它变成一个函数或命令。