0
我有一个名为Index.txt
下列行的文件:如何编写.vimrc函数以匹配给定文件中的文件名并使用vsplit命令打开它?
/Project/A/B/C/D/main.c
/Project/A/B/C/D/main_backend.c
/Project/A/B/C/D/main_frontend.c
我想创建一个命令调用Fsearch
使用正则表达式中Index.txt
执行搜索,匹配第一次出现和执行:vsplit
与它。例如,如果我执行:
:Fsearch main_backend.c
Vim应该执行:
:vsplit /Project/A/B/C/D/main_backend.c
,如果我执行:
:Fsearch main*.c
Vim应该执行:
:vsplit /Project/A/B/C/D/main.c
这是我到目前为止所尝试的,但我很确定它coul d改进:
function! CopyMatches(reg)
let l:file = grep -m 1 a:reg ~/Index.txt
echom l:file
if len(l:file) > 0
exec ':vsp ' . l:file
else
echom 'File not found: ' . l:file
end
endfunction
command! -nargs=* Fsearch call CopyMatches('<args>')
有什么建议吗?
由于它的工作原理GR8得到所有出现。如果我想更改行,请使用先前的解决方案执行“silent!grep!” a:reg“〜/ Index.txt”执行“silent!grep!” a:reg“〜/ cscope.files”| “grep'cut -d/-f 5- <<<”$ {PWD}“'”。这样我总能得到相对的结果。 PLZ任何建议如何做到这一点? – ypp
'system(“pwd | cut -d/-f 5 - ”。expand(“%”))'给出想要的搜索字符串我想用,所以我试着'执行“silent!grep!” a:reg“〜/ cscope.files”| EXE“silent!grep”系统(“pwd | cut -d/-f 5 - ”。expand(“%”))'但是在执行Ctrl + c之后它仍然继续运行给出错误'E486:pattern not found:dev ' – ypp
说现在我的$ pwd是/ home/user/workspace/Project_1/A/B/C/ ':Fsearch main * .c' 说我得到以下结果(我在grep中没有使用-m1) /家庭/用户/工作区/ Project_1/A/B/C/D/main_frontend.c /home/user/workspace/Project_1/A/main_common.c 但我想':Fsearch main * .c'应该只读取结果,即wrt $ pwd /home/user/workspace/Project_1/A/B/C/main_backend。c /home/user/workspace/Project_1/A/B/C/D/main_frontend.c – ypp