如何编写vim函数来搜索多个字符串(当我调用函数时)并突出显示所有字符串(以便使用n/n移动)
我想调用这个函数(使用我的映射)并突出显示所有字符串,以便使用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 !=
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>