2011-10-27 6 views
3

コードを変更すると、最も単純なものを変更するために何十ものファイルを調べなければならないことがよくあります。たとえば、私が関数pretty_printを持っていて、それをキャメルケースprettyPrintに合わせて変更するとします。今私はapple1.jsからapple99.jsまでのファイルを調べたいと思っていますが、そこにはおそらくいくつかのファイルorange.jsがあります。 Vimでこれを行う簡単な方法はありますか?Vimで一連のファイルをナビゲートする

注:これは私が自動化できるものではなく、実際に入り込んでコードを自分で修正する必要があります。

私は:b <fileName>ができますが、名前補完/パターンマッチングをサポートしていますが、パターンは持ち越されていないと思います。

たとえば、私は

:b apple*.js 

を行うと、私はタブをヒットした場合、私は

:b apple1.js 

を取得しますが、私はその機能を再訪場合(どちらか: + UPARROWまたはq:を押すことによって)は、私がタブを押すと、それは行かないでしょう

:b apple2.js 

私が欲しいのは

:b apple*.js 

編集ファイルのようなものを指定して、私は:wを入力するときに、それは次のバッファに移動します。私はVimに滞在したい、出て欲しくない、vim apple*.jsと入力し、Vimに戻り、:xコマンドを使用します。私はこれが動作することを認識しますが、私は、タグ間のジャンプなど、必要な場合に備えて、他のファイルもすべて必要です。

答えて

1

おそらくこの場合はあなたのために最も適したソリューションは、Vimの中に組み込まれ grepの機能を使用することです。次のコマンドは、ワイルドカードapple*.js, に一致するファイル内のパターン\<pretty_print\>に対して の検索を実行し、パターンの発生場所をクイックフィックスリスト に保存して、すべてのマッチを容易にジャンプできるようにします。ファイルに を検索に関してQuickFixリストへのより詳細な概要については

:vimgrep /\<pretty_print\>/ apple*.js 

、質問「Loading a set of files obtained via cmd-exec into Vim buffers」へmy answerを参照してください。

あなたは、単に特定の ワイルドカードに一致するファイルのリストを開きたい場合は、ロードファイルの名前、その引数リスト

:args apple*.js 

にして、いつものように、:n:Nを使用して、それらの間をナビゲート。

1

これでスタート:

:set hidden "required because `argdo` won't load next argument into current window 
      "if there is a modified buffer displayed inside this window 
:args apple*.js 
:argdo %s/\<pretty_print\>/prettyPrint/g 
:rewind " if you want to proofread all files then use :next and :prev 
:wa 

あなたはより良いバージョンのファイルと、そのような変更後の差分を行います。

1

ウィキアのBufSel機能はニーズに合っていますか?

次の機能を使用することができます 部分一致のリストからバッファを選択できるように希望した場合。 1つの一致が見つかった場合は に、一致するバッファがある場合は の数が多い場合は、一致するバッファのリストを コマンドライン領域に表示し、一致するバッファの1つを選択できるようにします。 バッファ番号で指定します。

function! BufSel(pattern) 
    let bufcount = bufnr("$") 
    let currbufnr = 1 
    let nummatches = 0 
    let firstmatchingbufnr = 0 
    while currbufnr <= bufcount 
    if(bufexists(currbufnr)) 
     let currbufname = bufname(currbufnr) 
     if(match(currbufname, a:pattern) > -1) 
     echo currbufnr . ": ". bufname(currbufnr) 
     let nummatches += 1 
     let firstmatchingbufnr = currbufnr 
     endif 
    endif 
    let currbufnr = currbufnr + 1 
    endwhile 
    if(nummatches == 1) 
    execute ":buffer ". firstmatchingbufnr 
    elseif(nummatches > 1) 
    let desiredbufnr = input("Enter buffer number: ") 
    if(strlen(desiredbufnr) != 0) 
     execute ":buffer ". desiredbufnr 
    endif 
    else 
    echo "No matching buffers" 
    endif 
endfunction 

"Bind the BufSel() function to a user-command 
command! -nargs=1 Bs :call BufSel("<args>") 
+0

私はBufSelを実際にインストールして使用しましたが、それを断念しました。いずれにしても、それは ':b'をはるかに上回るものではなく、vimを閉じるのがずっと簡単で、編集したいファイルだけで再起動しました。 – puk

関連する問題