假设我正在编写一些PHP代码,我想出了一个函数调用,我知道它在这个文件中定义。我想创建一个映射,以便它自动查找'function <WORD_UNDER_CURSOR>'
.
我设法通过使用 nmap <Leader>8 /function <C-r><C-w><CR>
来做到这一点,但问题是我的搜索包装已关闭(我希望这样(,所以有一半时间我最终会出现屏幕末尾错误,不得不按N
自己向上看。我试图在映射(nmap <Leader>8 /function <C-r><C-w><CR>Nn
(的末尾附加一个Nn
,但它不起作用。我不知道为什么!事实上,我放在<CR>
之后的任何东西似乎都没有任何效果。
你们能给我建议并向我解释一下吗?我发现关于 Vim 映射的文档真的很难找到你要找的东西。例如,我仍然不知道<C-r><C-w>
是什么!
要向前搜索,请使用/
,要向后搜索,请使用?
。因此,只需使用现有地图中的?
而不是/
。
<C-r><C-w>
是 Emacs 表示法表示^R^W
。我不知道 emacs 符号在 vi 实现中做了什么,但它就在那里。 不过:help ^R^W
有效。它只是在光标下方插入单词。
Vim 可以用 gd
原生地做到这一点,这意味着"转到定义",顺便说一下,这不限于函数。请参阅:help gd
。
<C-r><C-w>
表示法在 Vim 的文档中随处可见,在谈论 vim 时或多或少是编写组合的标准方式。Emacs 的标准符号是 C-r C-w
,没有<>
。
键入 :help
以获取有关使用文档的快速提示,:help key-notation
有关键/组合问题的更多详细信息以及...键表示法。
在您的情况下,:help ctrl-r_ctrl-w
或:help <c-r>_<c-w>
(注意下划线(会对您有所帮助。
这是一个基于:grep
的映射,应该做你想要的(有关更多信息,请参阅此处(:
map <buffer> <F3> :grep 'function.*<C-r><C-w>' %<CR><CR>
我从上面的所有答案和评论以及帮助文件中收集了信息,并编译了这个答案,因为没有人直接回答。我找到了两个解决方案:
1-我们可以yiw
光标下复制单词,然后gg
到文件的顶部。最后我们搜索" function <C-r>"
这意味着,来自寄存器的函数空间内容"(最后的拉克(。副作用:如果什么也没找到,你现在在你的文件顶部,弄乱寄存器。:-/
nmap <Leader>8 yiwgg /function <C-r>"<CR>
阿拉伯数字-我的个人创作,是对问题中原始命令的更正:
nmap <Leader>8 /function <C-r><C-w><CR> Nn
不起作用,因为/命令抛出"未找到错误",这中止了其余的映射。因此,我们可以找到一种方法来忽略错误(我寻找但找不到(,或者使用:
:nmap <Leader>8 :call search('function <C-r><C-w>','w')<CR>
注意"w"标志,这意味着环绕!寻找:help search
.
额外:
3-完美的世界right_way_to_do_it: 如果您的文件是有组织的或 ctag 的,请使用 gD
。
出于好奇,我使用了<Leader>8
,因为 * 在 8 之上。 :)