我正在编写一个 vim 插件,在其中我需要确定当前正在比较的所有文件。这就是那些diff
已设置。我已经仔细阅读了手册,但找不到太多内容。
是否有可能做到这一点。
这个问题实际上与问题相关如何检测 vim 中窗口的位置 https://stackoverflow.com/questions/2473678/how-to-detect-the-position-of-window-in-vim。
在这个问题中,我试图获取窗口的位置,以便检测哪个差异是正确的,哪个是左侧的。这solution https://stackoverflow.com/questions/2473678/how-to-detect-the-position-of-window-in-vim/2474745#2474745我得到的是使用 winnr()
该解决方案仅在只有 2 个窗口(有差异的窗口)时才有效。我想让它通用,这样即使在 vim 中打开多个窗口,我也可以确定哪个在左边,哪个在右边。
这就是我想解决的问题
- 获取所有列出的缓冲区的列表
- 对于每个缓冲区,确定是否
diff
is 1
为了那个原因
- If
diff
is 1
use bufwinnr()
获取它的窗口号。
- 根据窗口编号确定哪一扇是左边的,哪一扇是右边的。左边的窗口号较小
- 然后判断当前缓冲区是否(其中
alt-left
`alt-right` 被按下)使用当前缓冲区的 winnr 向左或向右。
现在缺少的部分是 1 和 2。对于 1 ls 可以使用,但我需要解析它的输出。有没有一种直接的方法来获取所有列出的缓冲区的列表。然后有没有办法检查该缓冲区是否存在diff
是否为 1。
任何有关更简单解决方案的建议也将受到赞赏。
- 循环遍历所有可能的缓冲区编号
0
to bufnr('$')
并使用检查该缓冲区是否存在bufexists(nr)
.
- 使用保存当前缓冲区编号
let curbuf=bufnr('%')
.
- 对于每个现有的缓冲区做
execute "buffer ".bufnumber
并检查&diff
多变的。记住两个数字,但不检查bufwinnr()
.
- Do
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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)