3

現在差分処理中のすべてのファイルを特定する必要がある vim プラグインを作成しています。それdiffが設定されているものです。マニュアルを調べましたが、あまり見つかりませんでした。

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

この質問は、実際には質問how-to-detect-the-position-of-window-in-vimに関連しています。その質問では、ウィンドウの位置を取得して、どの差分が右のものでどれが左のものであるかを検出しようとしていました。私が得た解決策は、winnr() を使用することでした

このソリューションは、ウィンドウが 2 つしかない場合にのみ機能します (差分が表示されます)。vimで複数のウィンドウが開いていても、どれが左にあり、どれが右にあるかを判断できるように、汎用的にしたいと考えています。これは私が問題を解決するために考えていたことです

  1. リストされたすべてのバッファのリストを取得します
  2. このバッファのそれぞれについて、それdiff1そのためかどうかを判断します
  3. ウィンドウ番号を取得するためにdiff使用1する場合。bufwinnr()
  4. ウィンドウ番号から、どれが左でどれが右かを判断します。左の方がウィンドウ番号が小さい
  5. そして、現在のバッファーalt-leftの winnr を使用して、現在のバッファー (「alt-right」が押された場所) が左か右かを判断します。

不足している部分は 1 と 2 です。1 の場合は ls を使用できますが、その出力を解析する必要があります。リストされたすべてのバッファのリストを取得する簡単な方法はありますか。そして、そのバッファdiffが1かどうかを確認する方法があります。

より簡単な解決策の提案も大歓迎です。

4

1 に答える 1

3
  1. 0からまでのすべての可能なバッファ番号を巡回し、bufnr('$')を使用してこのバッファが存在するかどうかを確認し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
于 2010-03-21T09:42:40.263 に答える