我刚开始使用vim脚本并尝试更轻松地翻译opencart语言文件。我想要一个查找给定搜索模式并选择它的函数。如果文件中没有剩余匹配项,则应打开下一个文件进行编辑。到目前为止我所拥有的:
function! Nextmatch()
normal /\(= *'\)\@<=.\{-\}\('\)\@=/
normal v//e
endfunction
function! Nextfile()
if !exists("s:filecounter")
execute "!find -iname *.php > files.txt"
normal <CR>
let s:filecounter=0
endif
let s:lines= system("wc -l < files.txt")
if s:filecounter<s:lines
w
let s:filecounter += 1
let s:sedcommand="sed '".s:filecounter."!d' files.txt"
let s:selectedfile=system(s:sedcommand)
execute 'edit' s:selectedfile
else
wq
endif
endfunction
如果在游标和当前文件末尾之间找不到搜索模式,我怎样才能在Nextfile()
中调用Nextmatch()
?你的片段中有哪些你认为不好的风格?
答案 0 :(得分:1)
您只需使用:vim
命令即可删除所有脚本。
我认为以下内容应该符合您的期望:
:noremap <f8> <esc>:cn<cr>gn
/\(= *'\)\@<=.\{-\}\('\)\@=
:vim //g *.php
然后,在选择它时转到所有文件中的下一个模式,
你只需要按F8
键。
在noremap
行,gn
可让您选择下一个实际搜索。
您可能需要这样做:
:set nohidden
让你导航修改缓冲区(但不要忘记保存
他们使用:wa
,或将其列为:ls
)
关于你的剧本:
:normal!
代替:normal
(除非您故意需要它),这是一个好习惯:因此,您的个人映射不会干扰您的脚本。答案 1 :(得分:1)
Quickfix命令功能强大且与某些外部插件完美集成,但如果您确实需要使用自己的脚本,并且需要在if语句中检查匹配项,请执行以下操作:
if search("=\\s*'\\zs[^']*\\ze", 'W') == 0
echo 'No match until the end of the buffer'
endif
请参阅:h search()
,请注意:
'W'
标志