【问题标题】:How to add a variable amount of characters to a vim statusline based on available whitespace in the statusline如何根据状态行中的可用空白向 vim 状态行添加可变数量的字符
【发布时间】:2019-06-15 19:15:33
【问题描述】:

我已经为 vim 制作了自定义状态行,但遇到了一个问题,当我执行 :split 时,由于我设置它的方式,很难看到缓冲区之间的分隔。我现在想添加一个字符作为左侧文本与右侧文本之间的分隔边界。在左边,我有一个文件名和它的路径(长度会改变),在右边我有一些关于缓冲区号等的信息。我无法对字符进行硬编码,因为有时文件路径太长会被切断。我希望能够调用一个函数,该函数将根据状态行两端之间的空白量返回可变数量的字符。

我想了多种方法来解决这个问题,但我只是不知道该怎么做,而且我在网上找不到答案。 起初,我的想法是在整个状态行下划线,但我不知道该怎么做。

现在我添加可变数量字符的想法不同了,我想定义一个函数,它使用正则表达式来读取状态行文本并用可变数量的字符替换该行,这些字符完全适合给定的空白.

我不知道该怎么做,如果有任何帮助,我将不胜感激。 此外,我还想让状态栏的某个元素根据我的光标所在的缓冲区改变颜色,这样更容易找到正确的窗口,我也找不到这样做的方法和指针正确的方向将不胜感激。

set laststatus=2
set statusline=
set statusline+=%2*\ %l
set statusline+=\ %*
set statusline+=%1*\ ‹‹
set statusline+=%1*\ %t\ %*
set statusline+=%1*\ ››
set statusline+=%1*\ %m
set statusline+=%3*\ %F
set statusline+=%{AddSeperator()}
set statusline+=%=
set statusline+=%3*\ ‹‹
set statusline+=%3*\ %{strftime('%R',getftime(expand('%')))}
set statusline+=%3*\ ::
set statusline+=%3*\ %n
set statusline+=%3*\ ››\ %*

【问题讨论】:

    标签: vim statusline


    【解决方案1】:

    我只是不知道该怎么做,我在网上找不到答案

    寻找答案的最佳位置是 Vim 的帮助系统。在这种情况下,它是:help 'statusline'。完成后,您可以简单地 google 以通过示例学习其他人的工作。 A relevant topic on SOan inspirational vimrc。当然 ;-),这里是 my status line

    我无法对字符进行硬编码,因为有时文件路径太长会被截断。

    这意味着您必须改为剪切文件路径。然后你可以添加一个空格来确保至少有一个:

    set statusline+=%3*\ %<%F
    set statusline+=\ %=
    

    如果您不喜欢“纯空格”,请阅读:help 'fillchars'

    我还想让状态栏的某个元素根据我的光标所在的缓冲区改变颜色,以便更容易找到正确的窗口

    只需为某些元素使用默认颜色(%*),它会自动在StatusLineStatusLineNC 之间切换。与默认状态行相同。如果您不喜欢当前颜色方案中的StatusLine,可以使用:highlight 命令强制更改它。但请注意StatusLine 也用于WildMenu

    起初,我的想法是在整个状态行下划线,但我不知道该怎么做。

    你没有在 Vim 中为“一些文本”添加下划线。您改为使用“带下划线”的颜色组。类似于:hi User1 gui=underline guifg=... guibg=... 等。

    【讨论】:

    • 您好,我发现一切都非常有帮助。我想请你指导下划线部分,我真的很喜欢它的外观,但由于每个元素都有不同的颜色,所以每个元素的下划线也是如此,我想知道我是否可以创建一个“父”突出显示组,整个状态栏继承,因此给了我一个单一的颜色下划线。
    • @ItayBachar 这样不行。下划线始终以当前文本颜色 (guifg) 绘制。只有undercurl 和删除线可以使用不同的颜色(guisp)。见:help :highlight
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-08
    • 2016-04-25
    • 2022-01-10
    • 2017-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多