我想调用此函数(使用我的映射)并突出显示所有字符串,以便可以使用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
然后我正在使用此映射来调用它:
noremap <silent> ,fa :call FindAll(input("Please Give Separate Strings :"))<CR>
这就是我打电话时输入字符串的方式。
Please Give Separate Strings :One Two Three
答案 0 :(得分:2)
我认为您正在为:help function-search-undo
而苦苦挣扎:
最后使用的搜索模式和重做命令“。”不会被该功能更改。
这使您的搜索命令在FindAll()
函数中无效。
input()
将始终返回单个字符串;不需要处理变量参数(...)
。for
循环可以替换为join()
。:help quote/
)分配给:normal! /
,而不是@/
。要能够修改搜索模式,可以使函数返回它,或者(根据上面建议的简化形式)内联进行整个处理。现在只是split
-join
的组合:
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>