2016-10-08 24 views
0

我刚开始使用vim脚本,并尝试使opencart语言文件的翻译更容易。我想有一个函数查找给定的搜索模式并选择它。如果文件中没有匹配,它将打开下一个文件进行编辑。我至今:在vim脚本中搜索模式匹配的VIM检查

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()如果搜索模式不光标和当前文件的末尾之间发现了什么?在我的片段中,是否有一些你认为是不好的风格?

回答

1

QuickFix命令功能强大,并与一些外部插件很好的整合,但如果你真的需要使用自己的脚本,如果你需要在一个if语句来检查的比赛,只是做:

if search("=\\s*'\\zs[^']*\\ze", 'W') == 0 
    echo 'No match until the end of the buffer' 
endif 

:h search(),并请注意:

  • 双反斜线,由于双引号
  • 'W'标志,该标志禁止WR围绕文件
  • 结束apping我简化你给
1

您可以简单地使用:vim命令来摆脱所有的脚本。

我认为以下应该做你期待什么挺:

:noremap <f8> <esc>:cn<cr>gn 
/\(= *'\)\@<=.\{-\}\('\)\@= 
:vim //g *.php 

然后,去下一个模式中的所有文件,而选择它, 你只需要按下F8键。

noremap一行中,gn可让您选择下一个实际搜索。

你可能需要做的:

:set nohidden 

让您浏览扔了经过修改的缓冲区(但不要忘记保存 他们:wa,或:ls列出)​​

关于你的脚本:

  • 在脚本中总是使用:normal!而不是:normal(除非你故意需要它):因此,你的个人映射不会干扰你的脚本。
+0

感谢很多的模式,我测试了它,它是我想要什么差不多。但是有两个问题:1.它与光标无关,即如果我执行':bnext',然后按下'F8',则会跳回到旧文件,并且它不会查看子目录。你有什么建议吗? – phinz

+1

查看子目录:':vim // g **/*。php' – yolenoyer

+0

关于游标位置:由于':cn'只是跳转到quickfix列表中的下一个元素,因此无法轻易完成。请参阅':h quickfix' – yolenoyer