2010-06-05 107 views
0

这真的是空白的问题。有一组VIM的命令如何在原始模式下运行几个vim命令

:命令1:命令2

等,我会以啃老族在原始经常打字。我如何使它自动?这是简单的正则表达式替换命令集,但我不能脚本那些sed的,因为它涉及非拉丁语言环境中,由于某种原因VIM处理非拉丁正则表达式正确,而sed的不。

回答

2

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

+0

我不熟悉vim函数。需要读一点关于它。 – Temujin 2010-06-05 09:58:50

+0

@ temujin.ya.ru - 除了vim的帮助,请尝试vim.wikia.org - 有一些很好的例子。 – Rook 2010-06-05 14:14:56

2

如果命令集并不总是相同的,这些命令可以被记录在一个宏:

  • qq开始录制宏(第二q是宏的“名称”)
  • 执行该组命令(命令ANS光标移动被记录)
  • 按q的停止记录
  • 位置的光标的下一个组(或更好的记录,在宏观本身),并使用@q重播宏

与其他任何命令一样,宏可以连续执行几次,例如, [email protected]

如果设置了:noremap,宏可以从一个会话保存到另一个寄存器。

+0

谢谢!我认为我需要的是一个宏。很好的解释。 – Temujin 2010-06-05 10:12:47

1

你可以

  • 使他们命令

    :command! DoStuff thing1 | thing2 
    

    然后用

    :DoStuff 
    
  • 0123执行它
    qq:thing1<CR>:thing2<CR>q 
    

    <CR>的意思是 “按ENTER”),您 访问与

    @q 
    
  • 功能

    :funct! DoStuff() 
    : thing1 
    : thing2 
    :endfunct 
    

    • 电话与

      :call DoStuff() 
      
    • 或访问通过命令

      :command! DoStuff call DoStuff() 
      

      您使用

      :DoStuff 
      
  • 或执行只是运行

    :thing1 | thing2 
    

    在一个命令行,然后 打:thi(即前几个字母命令 ),然后使用 向上箭头回顾最近 线以该命令启动 命令历史。

使用“栏”,即|,命令分隔符不会与所有的命令工作,但将大部分工作。如果thing1thing2是不能用条被测序的一个命令,你就必须要么

  • 与宏或函数
  • ,或者你可以做

    :exec 'thing1' | exec 'thing2' 
    

    on the command line or in :command,但如果thing1thing2本身包含单引号,则必须小心。

选择其中的这些选项是最合适的,通常是根据你想做的事情的复杂性。

功能可以很容易地参数你的命令,即在他们使用的变量,并且是结合了一长串的命令是有用的,但有点啰嗦了简单的情况。有关详细信息,请参阅:help user-functions

很方便,但你只能有26个,他们通常很差的命名(即与一些字母的字母)。另外请注意,如果你通过yc等存储了相同的寄存器,它会覆盖你的宏。详情请参阅:help recording

命令让你给你的程序一个有意义的名字,可以在比函数以不同的方式进行参数化,并可以做其他花哨的东西像标签完成。命令必须写在一行中,这是vim脚本执行除了调用函数之外什么都不做的命令的常见原因之一。有关更多信息,请参阅:help user-commands

如果这一系列的命令最终被你定期使用的东西,你可以在你的宏/命令/函数定义添加到您的vimrc文件,这将导致它准备去当你使用VIM。在linux或OS/X下,您的vimrc文件是文件~/.vimrc。在你的vimrc中设置宏是非常棘手的,如果你想要达到这个长度,不妨将它设置为函数或命令。