我目前正在研究一些通过宏定义许多内容的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' .
这样可行,但是当我按下Ctrl + F时,自动将Symbol
替换为光标下的单词会很棒。我最好的猜测是将Symbol
替换为<C-r><C-w>
,但这似乎失败了,因为之前的命令将光标从我想要找到的符号中移开。
如何让vim记住<C-r><C-w>
以便我以后可以插入它?
(另外,我猜这种方法可以使用一些改进。我已经看到一个特殊的窗口显示编译器错误,之前打开作为分割缓冲区,当我点击输入时它跳转到那个位置。这样也非常有帮助。)
答案 0 :(得分:1)
您可以使用<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()