代码之家  ›  专栏  ›  技术社区  ›  voltrevo

在vim中,如何创建一个记住光标下单词的命令?

  •  1
  • voltrevo  · 技术社区  · 11 年前

    我目前正在研究一些C++代码,这些代码通过宏定义了很多东西,我已经找到了以下正则表达式,在查找符号定义时,它在包含这些宏方面非常有效:

    egrep -nrw --include=*.{c,h,i}{pp,xx} '^ *((struct|class|using|namespace) |typedef.*|[A-Z][_A-Z]*.)Symbol' .
    

    我正在尝试将Ctrl+F映射到vim中的这个命令,目前有以下命令:

    map <C-F> :tabnew<CR>:redraw!<CR>:r! egrep -nrw --include=*.{c,h,i}{pp,xx} '^ *((struct<bar>class<bar>using<bar>namespace) <bar>typedef.*<bar>[A-Z][_A-Z]*.)Symbol' .
    

    这是可行的,但如果能自动替换 Symbol 当我按Ctrl+F时,光标下有单词。我最好的猜测是更换 象征 具有 <C-r><C-w> ,但这似乎失败了,因为前面的命令将光标从我要查找的符号上移开。

    我如何让vim记住 <C-反应>&书信电报;C-w> 以便我稍后插入?

    (此外,我猜这种方法可能需要一些改进。我看到过一个特殊的窗口,显示编译器错误,之前它作为拆分缓冲区打开,当我点击enter时,它会跳到那个位置。类似的东西也会很有用。)

    1 回复  |  直到 11 年前
        1
  •  1
  •   EvergreenTree    11 年前

    您可以使用 <expr> 映射。这允许您将键绑定到函数的输出。当结合@Zach的回答时,这应该可以做到你想要的:

    map <expr> <C-F> ":tabnew<CR>:redraw!<CR>:r! egrep -nrw --include=*.{c,h,i}{pp,xx} '^ *((struct<bar>class<bar>using<bar>namespace) <bar>typedef.*<bar>[A-Z][_A-Z]*.)" . expand("<cword>") . "' ."
    

    相关帮助主题:

    :help :map-<expr>
    :help matchstr()
    :help getline()
    :help col()