我想调用这个函数(使用映射(并高亮显示所有字符串,以便使用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
我认为您正在与:help function-search-undo
:作斗争
函数不会更改上次使用的搜索模式和重做命令"."。
这会使您的搜索命令在FindAll()
函数中无效。
附加评论
input()
将始终返回单个字符串;不需要对变量自变量CCD_ 4进行处理- 您的
for
循环可以替换为join()
- 您可以不指定
:normal! /
,而只指定给@/
,即最后一个搜索模式寄存器(:help quote/
( - 您的映射不使用视觉选择或挂起运算符,因此最好只为正常模式定义它
修复
为了能够修改搜索模式,要么让函数返回它,要么(基于上面建议的简化(内联完成整个处理。现在它只是一个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>