Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何编写vim函数来搜索多个字符串(当我调用函数时)并突出显示所有字符串(以便使用n/n移动)_Vim - Fatal编程技术网

如何编写vim函数来搜索多个字符串(当我调用函数时)并突出显示所有字符串(以便使用n/n移动)

如何编写vim函数来搜索多个字符串(当我调用函数时)并突出显示所有字符串(以便使用n/n移动),vim,Vim,我想调用这个函数(使用我的映射)并突出显示所有字符串,以便使用n/n进行导航 这是我的代码和这个函数的映射,但无法使它工作 function! FindAll(...) let srchstr = "" let list = split(a:000[0], ' ') let lenth = len(list) for item in list let lenth = lenth - 1 if lenth !=

我想调用这个函数(使用我的映射)并突出显示所有字符串,以便使用n/n进行导航

这是我的代码和这个函数的映射,但无法使它工作

  function! FindAll(...)
     let srchstr =  ""   
     let list = split(a:000[0], ' ')
     let lenth = len(list)
     for item in list
         let lenth = lenth - 1
         if lenth != 0
             let srchstr .= item."\\\|"
         else
             let srchstr .= item
         endif
     endfor

     "echo srchstr

     exec 'normal! /' . srchstr . "\<CR>"
  endfunction

我认为你正在努力解决:

函数不会更改上次使用的搜索模式和重做命令“”

这使得搜索命令在
FindAll()函数中无效

附加评论
  • input()
    将始终返回单个字符串;不需要变量参数
    (…)
    处理
  • 您的
    for
    循环可以替换为
    join()
  • 而不是
    :正常/
    ,您只需将最后一个搜索模式寄存器()分配给
    @/
  • 您的映射不使用可视选择或挂起操作符,因此最好只在正常模式下定义它
修复 为了能够修改搜索模式,要么让函数返回它,要么(根据上面建议的简化)内联执行整个处理。现在它只是一个
拆分
-
加入
组合:

nnoremap <silent> ,fa :let @/ =
\ join(split(input("Please Give Separate Strings :"), ' '), '\<Bar>')<CR>

已经支持对多个单词进行排序,
n
n
也可以工作。请尝试
/\vkeyword1 | keyword2 | keyword3
上一个问题:谢谢@Harish,是的,如果我手动操作,我可以使用n/n,但我希望使用函数。因此,如果我只给出以空格分隔的字符串,它会自动添加|中间。谢谢@Ingo Karkat,我尝试了你的所有建议:1)我替换了普通!使用let@/=,它工作正常。然后我尝试了另外两种映射,一种是join-split,另一种是substitute。我发现了两个问题。i) 如果字符串用多个空格分隔ii)如果最初,我们有空格。我使用'\W\+'修复了join split中的这些问题,但即使在替换中使用'\s\+'我也无法修复(ii)问题。您好@Ingo Karkat,在调用此映射或甚至调用我的函数后,您能给我一些建议来清除vim命令行吗。只要可能,我都会使用它。我在FindAll函数的split调用中也解决了同样的问题。是的,
\s\+
将匹配一个或多个空格。它应该同时使用
split()
substitute()
(如果将它们嵌入单引号或双反斜杠中)。您可以在末尾使用
echo“\r”echo
清除命令行。
Please Give Separate Strings :One Two Three
nnoremap <silent> ,fa :let @/ =
\ join(split(input("Please Give Separate Strings :"), ' '), '\<Bar>')<CR>
nnoremap <silent> ,fa :let @/ =
\ substitute(input("Please Give Separate Strings :"), ' ', '\\<Bar>', 'g')<CR>