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

如何从vim脚本打开搜索突出显示?

vim
  •  11
  • crelbor  · 技术社区  · 15 年前

    如果我执行以下两种操作之一:

    call search("searchString")
    
    exec "/ searchString"
    

    从脚本中,Vim执行搜索,但不突出显示结果,即使是hlsearch。从脚本外部执行相同的搜索将突出显示结果。

    6 回复  |  直到 7 年前
        1
  •  10
  •   crelbor    15 年前

    我自己才知道答案:

    call search(l:searchString)
    call matchadd('Search', l:searchString)
    
        2
  •  3
  •   Aaron Thoma Sam Brinck    7 年前

    这个

    feedkeys()

    功能是关键(双关语):

    call feedkeys("/pattern\<CR>")
    

    或清洁剂:

    " highlights – or doesn’t – according to 'hlsearch' option
    function SearcH(pattern)
        let @/ = a:pattern
        call feedkeys("/\<CR>")
    endfunction 
    
        3
  •  1
  •   Community Dan Abramov    7 年前

    我知道这很晚了。然而,当我搜索这个问题的答案时,这个页面出现了。所以我觉得有必要帮忙修理它。

    调用搜索(l:searchString)

    call matchadd('search',l:searchString)

    不适合我。(当从函数内部运行时)它会使我想要搜索的单词变亮,但n/n不会在它们之间循环。另外,当我执行新的搜索时,“l:serachstring”模式仍然突出显示。这个链接上的答案效果更好

    Vim search and highlighting control from a script

    这给了我:

    设为@/=L:searchString

    然后运行

    正规n

    在功能之外(这样用户无需按N键即可立即进行突出显示)

        4
  •  1
  •   Deanna superuser    11 年前

    要打开,请按 ESC 类型 :set hls

    要关闭,请按 ESC 类型 :set nohls

        5
  •  0
  •   vrybas    10 年前

    在此处找到答案: http://vim.1045645.n5.nabble.com/highlighting-search-results-from-within-a-function-tt5709191.html#a5709193

    ` `

    一个解决办法是

    function! XXXX() 
        execute '/this' 
        return @/ 
    endfunction 
    

    并使用以下内容而不是“:call XXXX()”。

    :let @/ = XXXX() 
    

    ` `

        6
  •  -3
  •   Martin Andersson    15 年前

    你需要把这个放到你的.vimrc文件里

    " Switch syntax highlighting on, when the terminal has colors
    " Also switch on highlighting the last used search pattern.
    if &t_Co > 2 || has("gui_running")
      syntax on
      set hlsearch
    endif
    

    .vimrc文件通常位于主目录中,或者可以使用“locate.vimrc”找到它。