gpt4 book ai didi

vim - 如何获取当前在 vim 中比较的文件列表

转载 作者:行者123 更新时间:2023-12-02 00:41:11 24 4
gpt4 key购买 nike

我正在编写一个 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` 被按下)是左还是右。

现在缺少的部分是 1 和 2。对于 1 可以使用 ls 但我需要解析它的输出。有没有直接的方法来获取所有列出的缓冲区的列表。然后有没有办法检查该缓冲区的 diff 是否为 1。

我们也欢迎任何关于更简单解决方案的建议。

最佳答案

  1. 循环遍历从 0bufnr('$') 的所有可能的缓冲区编号,并使用 bufexists(nr) 检查此缓冲区是否存在>.
  2. 使用 let curbuf=bufnr('%') 保存当前缓冲区编号。
  3. 对于每个现有的缓冲区,执行“buffer”.bufnumber 并检查&diff 变量。记住两个数字,但不要检查 bufwinnr()
  4. 执行“buffer”.curbuf
  5. 最后为第 3 步中找到的两个数字调用 bufwinnr(nr)

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

关于vim - 如何获取当前在 vim 中比较的文件列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2486420/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com