質問

私は、現在拡散しているすべてのファイルを決定する必要があるVIMプラグインを作成しています。それがそのためです diff 設定されています。私はマニュアルを調べてきましたが、多くを見つけることができませんでした。

これを行うことは可能ですか?

この質問は実際に質問に関連しています How-to-to-the-position-of-window-in-vim。その質問で、私はウィンドウの位置を取得しようとしていました。 解決 私はwinnr()を使用することでした

そのソリューションは、2つのウィンドウ(違いがあるウィンドウ)のみがある場合にのみ機能します。 VIMで複数のウィンドウが開いていても、どれが左にあり、どれが正しいかを判断できるように、一般的にしたいと思います。これは私が問題を解決しようと思っていたものです

  1. リストされているすべてのバッファのリストを取得します
  2. このバッファーのそれぞれについて、かどうかを決定します diff1 そのために
  3. もしも diff1 使用する bufwinnr() ウィンドウ番号を取得します。
  4. 窓から、どれが残っているか、どれが正しいかを決定します。左のウィンドウ番号は小さくなります
  5. そして、電流バッファー(どちらで)かどうかを判断します alt-left「alt-right」は押されます)は、現在のバッファーのwinnrを使用して左または右です。

欠落しているピースは1と2になりました。1LSの場合は使用できますが、出力を解析する必要があります。リストされているすべてのバッファのリストを取得するストレートFWDの方法はありますか?そして、そのバッファーを確認する方法はありますか diff 1かどうか。

より単純なソリューションの提案も高く評価されています。

役に立ちましたか?

解決

  1. 可能なすべてのバッファー番号を循環します 0bufnr('$') そして、このバッファーが使用されているかどうかを確認してください bufexists(nr).
  2. 使用して現在のバッファ番号を保存します let curbuf=bufnr('%').
  3. 既存のバッファごとに行います execute "buffer ".bufnumber そして確認してください &diff 変数。 2つの数字を覚えておいてくださいが、確認しないでください bufwinnr().
  4. 行う execute "buffer ".curbuf.
  5. 最後に電話してください bufwinnr(nr) ステップ3で見つかった2つの数字について。

UPD:別のソリューション

let g:wlist={"0": [], "1":[]}
windo call add(g:wlist[&diff], bufnr('%'))
let g:diffbuffers=g:wlist.1
" here you have list of buffers with &diff option set in g:diffbuffers
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top