题
我正在写一vim插在我需要确定所有这些文件,这是目前正在比较.这是那些为其 diff
被设定。我一直在通过该手册,但不能找到多。
它是可能做到这一点。
这个问题实际上是相关的问题 如何以检测到的这位置上的窗口在vim.在这个问题我想要得到的位置的窗口,以便检测其中的一个差异是正确的,其离开之一。的 解决方案 我是使用winnr()
这种解决办法可以工作,只有如果只有2个窗口(那些被比较).我想让它泛使得即使多个窗户是开在vim,我可以确定哪一个是在离开,哪一个是正确的。这是我在想什么要解决的问题
- 得到一个列表中的所有列出的缓冲区
- 对于每个这种缓冲,如果确定
diff
是1
那 - 如果
diff
是1
使用bufwinnr()
要获取窗口号。 - 从窗口数字确定哪一个是左这个是正确的。左边的一个将拥有较小的窗口号
- 然后确定如果当前的缓冲器(在这
alt-left
`alt-右`压)是左或右使用winnr目前的缓冲器。
现在的作品缺少正1和2。1ls可以使用但我需要分析了其产出。是否有一个straightfwd的方式得到清单所列出的缓冲区。然后有没有办法检查,如果对缓冲区 diff
1或者不。
任何建议用更简单的解决方案也表示赞赏。
解决方案
- 周期通过所有可能的缓冲区号
0
要bufnr('$')
和检查,这是否缓冲存在的使用bufexists(nr)
. - 拯救当前的缓冲器的使用数
let curbuf=bufnr('%')
. - 每个现有缓冲区的做
execute "buffer ".bufnumber
和检查&diff
变量。记得两个数字,但并不检查bufwinnr()
. - 做
execute "buffer ".curbuf
. - 最后呼叫
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
不隶属于 StackOverflow