【问题标题】:Resize vim split based on number of visible lines根据可见行数调整 vim 拆分大小
【发布时间】:2021-07-05 22:42:15
【问题描述】:

我正在尝试在我的 vimrc 中编写一个函数,它可以让我创建一个小的拆分,看起来就好像它在当前文件中,但实际上,另一个文件。

为了干净利落地执行此操作,我希望此拆分立即出现在光标下方,这意味着我需要适当地调整拆分大小。不幸的是,我找不到测量光标和窗口顶部之间的 visible 行数的方法。在我折叠代码的文件中,使用line(".") - line("w0")"." 给出光标的行号;"w0" 给出最上面可见行的行号)的方法不起作用,因为该计算包括折叠内的隐藏线。有人知道如何实现吗?

插入分割前后的图片供参考:

【问题讨论】:

  • 请注意,如果您在这里没有得到答案,还有Vi and Vim Stack Exchange
  • 而 StackOverflow 都是关于编程问题的,@Enlico。
  • @romainl,当然,我只是在暗示 Vim 问题在该站点上比在此站点上获得更好的可见性。我可能错了。

标签: vim


【解决方案1】:
line(".") - line("w0")

为您提供窗口顶部和当前行之间的物理行数。如您所见,此方法不考虑折叠。

你可以用这样的方法计算一个范围内的折叠次数:

function! CountFolds(top_line, bottom_line)
    let folded_lines = []
    for line_nr in range(a:top_line, a:bottom_line)
        if foldlevel(line_nr) == 0
            call add(folded_lines, 0)
        else
            call add(folded_lines, 1)
        endif
    endfor
    return count(uniq(folded_lines), 1)
endfunction

然后将其从您的初始行数中删除:

let top_line = line("w0")
let bottom_line = line(".")
let physical_lines = bottom_line - top_line
let screen_lines = physical_lines - CountFolds(top_line, bottom_line)

参考:

:help range()
:help foldlevel()
:help add()
:help uniq()
:help count()

请注意,您可能还需要您的脚本来考虑软换行,这是一个非常值得提出另一个问题的主题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-24
    • 2023-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多