使用vim的命令行补全功能

网友Karl问:

有时,我在VIM中想把一个单词替换成另一个单词,用yw,然后到要被替换的单词那里:dw 然后”0P,很多个步骤。yw,dw,”0P,这样子感觉按键多而且不顺手,请问你是怎么替换的?(:s/a/b这种要敲两个单词速度也不快)

我的回答见这个链接:https://blog.easwy.com/archives/an-article-about-how-to-write-vim-script/#comment-947

Karl说用替换的方式,要敲两个单词,速度不会很快。其实,如果掌握了命令行补全功能,用替换命令的速度也不会慢。

例如,我们可以这样操作,首先移到到第一个单词处,使用“ayw把这个单词拷贝到a寄存区,然后把光标移动到第二个单词下,接着输入下面的命令:

    :%s/<C-R>a/<C-R><C-W>/g 

上面的命令使用了两个命令行补全功能,其中<C-R>a需要按住<CTRL>-R键,这时光标处会显示一个”,接下来再按a键,这个按键序列的功能是插入a寄存区所保存的内容,在我们的例子里,就是插入第一个单词;后面的<C-R><C-W>则是在命令行插入编辑区中光标下的单词,在我们的例子里,编辑区光标下的单词就是第二个单词。

如果要替换的个数比较多,使用上面的办法就比较好,可以用较少的按键完成替换功能,而且还不用担心输错单词。

命令行补全的帮助手册为:c_CTRL-Rc_CTRL-R_CTRL-W,我们可以看到,使用<C-R>系列命令,不仅可以插入各个暂存区中的内容、光标下的内容,你甚至可以使用一个表达式,来完成更复杂的工具,事实上,很多脚本中就在这样使用。

“使用vim的命令行补全功能”的4个回复

  1. 谢谢大哥回复,我跑去vim-user邮件列表里问里一把,一个老外说这样设置
    set completeopt=longest,menuone
    主要是menuone,然后就可以支持C语言了

  2. 请问大哥omni compete是对于C语言复杂的结构体不起作用如何处理?
    比如我对于一个结构体指针变量后面输入->后按下CTRL+X CTRL+O弹出来一级成员,
    成员里有其他结构体变量,选中结构体变量后在该变量名字后面的.再按CTRL+X CTRL+O,
    这时弹出来的补全选择依然是前面结构体指针变量结构的一级成员列表。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注