您如何知道VIM帮助关键字搜索?

时间:2015-06-12 23:07:40

标签: vim

我试图谷歌如何在VIM范围内搜索并找到此链接。 Limiting search scope for code in Vim

我不会想象在VIM帮助中提供关键字“/ \%V”来搜索帮助。所以,我想知道大多数人如何从VIM帮助中获得帮助,就像在这种情况下一样。

2 个答案:

答案 0 :(得分:1)

一般:

  1. :help help-summary 是一个很好的文档,解释了如何搜索

使用通配符扩展

我也有过同样的挫败感,但我刚刚意识到您可以使用通配符 搜索时扩展。

在您的情况下它不会有帮助,但可能如果您从 :h pattern 开始,然后在该页面中搜索与您的内容相关的关键字 努力实现你可能已经找到了。

就我而言,我正在寻找前一天晚上才访问过的页面, :h ex-cmd-index,(在另一台机器上,所以我无法搜索我的命令 历史)但我只记得它与 ex 命令有关,并且 那里的词索引。我花了 20 分钟试图找到它不成功(我 最终用谷歌搜索它,这样我就可以返回到 vim 并查找它......)。一世 正在尝试 ex + Tab 并展示了数百种可能性...

但是通过通配符扩展,我可以只执行 :h ex*index* 并点击 Tab 并且我 获得两种可能性的候选名单,('ex-cmd-index' 和 'ex-edit-index')一个 其中一个是我想要的!

所以只要你知道事物应该出现在 帮助主题,您应该能够更快地缩小可能性范围。

使用 :helpgrep

有一个内置命令 :helpgrep 可以将每一行匹配一个 模式到快速修复列表中。然后你可以跳过每一行 :cnextcprev 命令。

使用 fzf(和可选的 ag-silver-searcher)模糊搜索帮助

fzf plugin 有命令 :Helptags 对...进行模糊搜索 帮助标签。这个很不错。

如果以上都失败了,我添加了一些功能来搜索整个 vim 的帮助文档目录中所有文件的内容(不仅仅是帮助标签) 使用 ag-silver-searcherfzf

首先是我在 fzf github repo 上的一个问题上发现的一个函数。我没有 了解它是如何工作的,但是调用此函数的命令允许我进行搜索 使用 ag 的目录内容,它将结果泵入 fzf:

" Ag: Start ag in the specified directory e.g. :Ag ~/foo

function! s:ag_in(bang, ...)
  if !isdirectory(a:1)
    throw 'not a valid directory: ' .. a:1
  endif
  " Press `?' to enable preview window.
  call fzf#vim#ag(join(a:000[1:], ' '),
              \ fzf#vim#with_preview({'dir': a:1}, 'right:50%', '?'), a:bang)
endfunction

" Ag call a modified version of Ag where first arg is directory to search
command! -bang -nargs=+ -complete=dir Ag call s:ag_in(<bang>0, <f-args>)

所以我写了一个函数(Help_Ag)来调用上面的命令,并提供 包含 vim 帮助文档的目录(141 个 .txt 文件,加上一些 其他文件(自述文件、标签文件本身等)。

如果我们选择要打开的帮助页面,我们会将其设置为不可修改。我注意到 并非所有标签都有效,有些标签重定向到错误的页面(例如,像这样的标签) *help-topic* 会带我到一个名为 help 的页面,如果光标在那个页面上 词,如果光标在该词上,则带我到 topic,而 in 真正的帮助,我会被带到help-topic)。我发现如果我打开真实的 帮助,标签将在使用 ag+fzf 选择的文件中开始正常运行。所以 我只是打开和关闭真正的帮助来触发这种行为(太快了 甚至看到,所以我对这个黑客很满意):

function! Help_Ag()
    let orig_file = expand(@%)
    let v1 = v:version[0]
    let v2 = v:version[2]
    " search in the help docs with ag-silver-search and fzf and open file
    execute "normal! :Ag /usr/share/vim/vim".v1.v2."/doc/\<cr>"
    " if we opened a help doc
    if orig_file != expand(@%)
        set nomodifiable
        " for some reason not all the tags work unless I open the real help
        " so get whichever help was found and opened through Ag
        let help_doc=expand("%:t")
        " open and close that help doc - now the tags will work
        execute "normal! :tab :help " help_doc "\<cr>:q\<cr>"
    endif
endfunction

" get some help
command! H :call Help_Ag()

答案 1 :(得分:0)

你做对了。谷歌可能是你最好的选择。您还可以使用vim帮助网站,它具有内置的搜索功能:http://vimdoc.sourceforge.net/htmldoc/