我正在写一vim插在我需要确定所有这些文件,这是目前正在比较.这是那些为其 diff 被设定。我一直在通过该手册,但不能找到多。

它是可能做到这一点。

这个问题实际上是相关的问题 如何以检测到的这位置上的窗口在vim.在这个问题我想要得到的位置的窗口,以便检测其中的一个差异是正确的,其离开之一。的 解决方案 我是使用winnr()

这种解决办法可以工作,只有如果只有2个窗口(那些被比较).我想让它泛使得即使多个窗户是开在vim,我可以确定哪一个是在离开,哪一个是正确的。这是我在想什么要解决的问题

  1. 得到一个列表中的所有列出的缓冲区
  2. 对于每个这种缓冲,如果确定 diff1
  3. 如果 diff1 使用 bufwinnr() 要获取窗口号。
  4. 从窗口数字确定哪一个是左这个是正确的。左边的一个将拥有较小的窗口号
  5. 然后确定如果当前的缓冲器(在这 alt-left`alt-右`压)是左或右使用winnr目前的缓冲器。

现在的作品缺少正1和2。1ls可以使用但我需要分析了其产出。是否有一个straightfwd的方式得到清单所列出的缓冲区。然后有没有办法检查,如果对缓冲区 diff 1或者不。

任何建议用更简单的解决方案也表示赞赏。

有帮助吗?

解决方案

  1. 周期通过所有可能的缓冲区号 0bufnr('$') 和检查,这是否缓冲存在的使用 bufexists(nr).
  2. 拯救当前的缓冲器的使用数 let curbuf=bufnr('%').
  3. 每个现有缓冲区的做 execute "buffer ".bufnumber 和检查 &diff 变量。记得两个数字,但并不检查 bufwinnr().
  4. execute "buffer ".curbuf.
  5. 最后呼叫 bufwinnr(nr) 两个数字发现,在第3步。

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