2016-10-08 3 views
0

vimスクリプトを使い始めたばかりで、opencart言語ファイルの翻訳を簡単にしようとしました。私は与えられた検索パターンを探してそれを選択する関数を持っていたいと思います。ファイルに一致するものがなければ、次のファイルを編集用に開きます。私はこれまで持っている: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

クイックフィックスコマンドは、強力でも、いくつかの外部プラグインに統合されていますが、あなたは本当に独自のスクリプトを使用する必要がある場合、あなたはif文で試合をチェックする必要がある場合は、単に実行します。

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

:h search()を参照してください、と注意してください:

  • 二重引用符のために二重のバックスラッシュ、
  • WRを禁じ'W'フラグファイル
  • の終わり頃apping私はそれをテストし、それは私が望むほとんど何です、あなたは
1

:vimコマンドを使用するだけで、すべてのスクリプトを削除できます。

私は次はあなたが期待している、非常に何をすべきだと思う:あなただけF8キーを押す必要が 、それを選択しながら、すべてのファイルで次のパターンに行き、その後

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

を。

noremap行では、gnを選択すると、次の実際の検索を選択できます。

あなたがする必要があるかもしれ

:set nohidden 

変更したバッファを投げた(しかし:waで にそれらを保存することを忘れ、または:lsでそれらをリストアップしていない)を移動させるために

スクリプトについて:

  • それは常に:normal!代わりの:normalを(使用するスクリプトに良い習慣ですあなたが意図的にそれを必要としている場合を除いて):あなたの個人的なマッピングはあなたのスクリプトに干渉しません。
+0

おかげで多くを与え、パターンを簡素化。しかし、次の2つの問題があります。1.カーソルに相対的ではない、すなわち ':bnext'を実行してから' F8 'を押すと、古いファイルにジャンプし、2.サブディレクトリを検索しません。何か提案はありますか? – phinz

+1

サブディレクトリを調べてください: ':vim // g **/*。php' – yolenoyer

+0

カーソル位置について: ':cn'はクイックフィックスリストの次の要素にジャンプするだけなので、簡単にはできません。 ':h quickfix'を参照してください。 – yolenoyer

関連する問題