10

gvimの単一インスタンスに含まれるすべてのファイルをfindstr /m background *.vim | gvim開きたいのですが、配管を機能させることができません。*.vimbackground

これはこの質問に非常に似ていますが、stdin出力をキャプチャする代わりに、GViMに出力を開くファイルのリストとして処理させたいので、Windowsシステムではxargsは保証されません。何か案は?

4

4 に答える 4

6

私はこれを行ういくつかの方法を考えることができます:

vimgrepを使用する

vimgrepを使用します。gvimを実行した後、次のように入力します。

:vimgrep /background/ **/*.vim

これにより、クイックフィックスリストにすべての一致(おそらくファイルごとに複数)が入力されるため、、などを使用してナビゲートできます(:copenを参照) 。:cw:cn:help quickfix


vimの組み込みの賢さを使用する

を使用findstrしてファイルのリストを提供し、vimにそれらのファイルを開かせます。

findstr /m background *.vim > list_of_files.txt
gvim list_of_files.txt

" In Gvim, read each file into the buffer list:
:g/^/exe 'badd' getline('.')

" Open the files in tabs:
:bufdo tabedit %

これにより、各ファイルがロードされますが、ファイルのリストも開いたままになります(いつでもファイルをバンドルすることができます)。

編集

ファイルのリストでの使用:tabeditは機能しませんでした(私はテストしただけ:baddです)。これを回避するには、baddを使用してからbufdoを使用するか(上記のように)、または次のようにします(vimrcに配置します)。

command! -range=% OpenListedFiles <line1>,<line2>call OpenListedFiles()

function! OpenListedFiles() range
    let FileList = getline(a:firstline, a:lastline)
    for filename in FileList
        if filereadable(filename)
            exe 'tabedit' filename
        endif
    endfor
endfunction

次に、必要なすべてのファイル名を含むファイルを開き、次のように入力します。

:OpenListedFiles

Vimのサーバー機能といくつかのひどいバッチスクリプトを使用する

サーバー機能といくつかのバッチスクリプトマジックを使用します(bashを使用しているのでわかりません)

@echo off
REM Welcome to the hideous world of Windows batch scripts
findstr /m background *.vim > list_of_files.txt
REM Run GVIM (may not be required)
gvim
REM Still in command prompt or .bat file here
REM for each line in the file "list_of_files.txt", pass the line to OpenInTab
for /f %%i in (list_of_files.txt) do call:OpenInTab %%i
goto:eof

:OpenInTab
REM Open the file in a separate tab of an existing vim instance
gvim --remote-tab %~1
goto:eof

Eeeurrgh。


私の場合は、「vimの組み込みの賢さを使用する」オプションを選択します。実際には、そうではありません。cygwinのbashスクリプトを使用してbashを使用するだけですが、ネイティブツールを使用する必要がある場合は、組み込みの巧妙なアプローチを使用します。

于 2009-12-24T17:18:13.310 に答える
5

bashで:

grep -l background *.vim | xargs gvim

キーはxargsです。標準入力から行を取得し、コマンドライン引数として渡します。grep -l一致するファイル名を出力するだけです。


別のアイデアとして、xargsそれらがなくてダウンロードできない場合は、行をvimコマンド(:edit filename)に変換し、vimに実行させる、つまりすべてのファイルを開くことができます。繰り返しますが、私の環境では、次のようになりますsed

grep -l background *.vim | sed 's/^/:edit /' > files
vim -s files

がない場合でも、おそらく( )sedに置き換えることができます。vi -eed

于 2009-12-24T16:42:34.213 に答える
4

Powershellを開きます。

gvim $(findstr /m background *.vim)
于 2009-12-24T15:34:34.277 に答える
0

これらのいずれも、gvimファイル名ごとに個別のインスタンスを開きます。ファイル名が1つしかない場合に特に便利ですが、gvimの複数のインスタンスに問題がなければ、複数のファイル名で機能します。

1)for内のfindstr

for /f "delims=" %f in ('findstr /m background *.vim') do gvim "%f"

2)findstrをforにパイプします

findstr /m background *.vim | for /f "delims=" %f in ('more') do gvim "%f"

3).batファイルgvim_stdin.batたとえば、%記号が2倍になることを除いて、(2)のようにこの1行を含むファイルを作成します。

for /f "delims=" %%f in ('more') do gvim "%%f"

次に実行します:

findstr /m background *.vim | gvim_stdin
于 2017-02-08T15:50:06.160 に答える