使用" /"进行搜索时在vim中我发现自己经常想要去文件的第一场比赛。
我知道我可以做到:
gg/<pattern>
但&#34; gg&#34;在我的跳转列表中添加一个我可能不想要的条目。
我觉得模式中应该有一种方法可以跳转到文件的第一个匹配项。
类似的东西:
/<pattern>/<argument to specify first in file>
此功能是否存在,或者是否有人可以提供映射?
答案 0 :(得分:4)
为了避免添加到跳转列表,可以使用:keepjumps
命令,但是你会得到一个长命令,因为这现在通过Ex命令,你需要:execute
总结<Enter>
:
:execute "keepjumps normal! gg/<pattern>/\<CR>"
另一种方法是使用:range
; 0
(转到顶部)和/.../
(搜索)的组合与;
结合使用匹配进入第一个行:
:0;/<pattern>/
如果您需要将光标定位在确切的第一个匹配项上(并且它不在行的开头),则需要额外的n
:
:0;/<pattern>/normal! n
答案 1 :(得分:2)
/
和?
从当前光标位置开始搜索,你无能为力。
作为替代方案,您可以使用:
:g/foo/#
或:
:il[ist] /foo
无论如何,比搜索的/
要好得多。
答案 2 :(得分:1)
如果您因为要查找变量声明而问这个,那么请知道vim为此提供了gD
正常命令。
了解更多信息:
:help gd
:help gD
答案 3 :(得分:0)
扩展Ingo的答案我把它放在我的.vimrc中:
function! GotoFirstMatch()
call inputsave()
let userInput = input('')
execute "keepjumps normal! gg/".userInput."/\<CR>"
endfunction
nnoremap <leader>/f :call GotoFirstMatch()<CR>
我对vimscript还是比较新的...会感激任何反馈...
编辑:
我也开始使用这个快捷方式了:
[<C-i>
这就像使用“*”命令但让它转到文件的第一个匹配而不是光标之后的下一个匹配
答案 4 :(得分:-1)
您可以将/
映射到gg/
:nnoremap / gg/