如何获取当前在vim中进行扩散的文件列表

时间:2010-03-21 08:30:45

标签: vim vim-plugin

我正在编写一个vim插件,我需要确定当前正在分散的所有文件。那是diff设置的那个。我一直在阅读手册,但找不到多少。

是否可以这样做。

这个问题实际上与问题how-to-detect-the-position-of-window-in-vim有关。 在那个问题中,我试图获得窗口的位置,以便检测哪个差异是正确的,哪个是剩下的。我得到的solution是使用winnr()

该解决方案只有在只有2个窗口(被扩散的窗口)时才能工作。我想让它变得通用,这样即使在vim中打开多个窗口,我也可以确定哪一个在左边,哪一个在右边。 这就是我想解决问题的方法

  1. 获取所有列出的缓冲区列表
  2. 对于每个缓冲区,确定diff是否为1
  3. 如果diff1,请使用bufwinnr()获取窗口编号。
  4. 从窗口编号确定哪一个是哪一个,哪一个是正确的。左边一个会有较小的窗口编号
  5. 然后使用当前缓冲区的winnr确定当前缓冲区(其中alt-left`alt-right`被按下)是左还是右。
  6. 现在丢失的部分是1和2.可以使用1 ls但我需要解析它的输出。是否有直接的方法来获取所有列出的缓冲区列表。然后有办法检查缓冲区diff是否为1。

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

1 个答案:

答案 0 :(得分:3)

  1. 遍历从0bufnr('$')的所有可能的缓冲区编号,并使用bufexists(nr)检查此缓冲区是否存在。
  2. 使用let curbuf=bufnr('%')保存当前缓冲区编号。
  3. 对于每个现有缓冲区执行execute "buffer ".bufnumber并检查&diff变量。记住两个数字,但不要检查bufwinnr()
  4. 执行execute "buffer ".curbuf
  5. 最后拨打bufwinnr(nr),查找步骤3中找到的两个号码。
  6. 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