質問
私は、現在拡散しているすべてのファイルを決定する必要があるVIMプラグインを作成しています。それがそのためです diff
設定されています。私はマニュアルを調べてきましたが、多くを見つけることができませんでした。
これを行うことは可能ですか?
この質問は実際に質問に関連しています How-to-to-the-position-of-window-in-vim。その質問で、私はウィンドウの位置を取得しようとしていました。 解決 私はwinnr()を使用することでした
そのソリューションは、2つのウィンドウ(違いがあるウィンドウ)のみがある場合にのみ機能します。 VIMで複数のウィンドウが開いていても、どれが左にあり、どれが正しいかを判断できるように、一般的にしたいと思います。これは私が問題を解決しようと思っていたものです
- リストされているすべてのバッファのリストを取得します
- このバッファーのそれぞれについて、かどうかを決定します
diff
は1
そのために - もしも
diff
は1
使用するbufwinnr()
ウィンドウ番号を取得します。 - 窓から、どれが残っているか、どれが正しいかを決定します。左のウィンドウ番号は小さくなります
- そして、電流バッファー(どちらで)かどうかを判断します
alt-left
「alt-right」は押されます)は、現在のバッファーのwinnrを使用して左または右です。
欠落しているピースは1と2になりました。1LSの場合は使用できますが、出力を解析する必要があります。リストされているすべてのバッファのリストを取得するストレートFWDの方法はありますか?そして、そのバッファーを確認する方法はありますか diff
1かどうか。
より単純なソリューションの提案も高く評価されています。
解決
- 可能なすべてのバッファー番号を循環します
0
にbufnr('$')
そして、このバッファーが使用されているかどうかを確認してくださいbufexists(nr)
. - 使用して現在のバッファ番号を保存します
let curbuf=bufnr('%')
. - 既存のバッファごとに行います
execute "buffer ".bufnumber
そして確認してください&diff
変数。 2つの数字を覚えておいてくださいが、確認しないでくださいbufwinnr()
. - 行う
execute "buffer ".curbuf
. - 最後に電話してください
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
所属していません StackOverflow