vim状态栏

对于某些Vimmers而言,他们的地位就像绝地的光剑一样。 每一个都是相似但独特的-展现潜伏身份的美学樱桃。 这个想法导致了诸如Powerline , Airline和Lightline之类的项目 。 尽管都很有趣,但是本教程还是按照旧的方式进行的。 我们将前往隐喻的Dagobah ,使用Force方法( Vim脚本)制作状态栏。
在开始之前,这里是语法的预览。 下面的屏幕截图是我当前的状态行,以及用于生成它的代码 。

基础
与对Vim的任何探索一样,我们需要从底层开始:help statusline
。
非空时,此选项确定状态行的内容。 该选项由散布在普通文本中的printf样式'%'项目组成。 每个状态行项目的形式为:
%-0{minwid}.{maxwid}{item}
除{item}外的所有字段都是可选的。 可以将单个百分号表示为“ %%”。 最多可以指定80个项目。
这看起来似乎令人困惑且不直观,但不要担心……还不算太糟。
首先是要告诉Vim我们想要看到状态栏。 您可以通过将以下代码放入.vimrc
(vim)或init.vim
(neovim)中来完成此操作。
set laststatus=2
现在,我们已经告诉Vim我们感兴趣,我们需要给它一些显示的东西! 对于一个非常基本的示例,请键入以下内容:
set statusline=lightsaber!
重新加载Vim时,您应该看到:

显然,此状态线并不是非常有用,但是要小心!
句法
在状态栏星系中,存在一种特殊的语法。 每行都是从单个项目派生的,每个项目都对应于一条特定的信息。 例如, %f
将给出当前存在于缓冲区中的文件的相对路径。
echo "Hello, this is a .jedi file" >> lightsaber.jedi
将以下内容插入Vim配置。
set statusline=%f
打开我们之前创建的文件。 您应该看到状态行及其上打印的文件名。

总的来说,这是状态栏的公式。 您将使用这些预定义的映射来创建武器。 有一件事情要注意:如何组合多个项目。
完整的地图列表:
一个显示文件名,当前行,总行和缓冲区号的最小示例:
格式化
我们开始到达某个地方,不再是padawan。 但是,还有更多技巧可以覆盖。
其中第一个涉及控制我们的物品位于哪一边。 具体来说, =
符号。 An =
表示部分之间的分离点。
另一个格式设置必须是空格。 使用反斜杠- \
来转义空格。 下面的例子中有注释的一个其它符号- <
。 <
用来告诉Vim如果行太长则在哪里截断行。
有了您现在所掌握的知识,您应该能够将一些像样的东西放在一起。 但是旅程还没有结束!
表达方式
有时候您可能会对包含以前未定义的内容感兴趣。 这是表达式将发挥作用的地方。 在Vim的状态行语法中, %{...}
之间的任何内容都将作为表达式求值,并用结果替换。 因此,假设您对于set showmode
太酷了,并希望直接在您的行中使用它,这就是您将如何实现此任务的方法。
这是您迈向黑暗面的第一步。 现在,您几乎可以将您心中想要的任何内容添加到行中。 例如,如果您是加密货币,则可以增加比特币和ETH的价格-可能性无穷无尽。 有关Vim Script的详细介绍,请点击此处 。 我还在下面提供了更多示例。
文件大小
只读文件
还值得注意的是,您可以在表达式中利用Vim的内部函数。
颜色
时机已到。 您会选择哪一边? 坚韧极简的生活接受了Vim神所提供的一切。 或者,您会沉迷于郁郁葱葱的彩虹之中吗? 就个人而言,我不太在乎……但是,幸运的是,选择权是您的!
有两种方法可以向状态行添加颜色。 一种是通过小猪退缩您的配色方案。 另一种是自己定义颜色。
高亮组
第一种着色方法是从您的colorscheme中借用的。 例如, #function#
将为function关键字使用定义的突出显示。 下一张图片是使用此技术的状态栏:

User1..9颜色
第二种方法取决于您要定义的颜色。 如果要高度控制,这是您的选择。 在继续之前,我们将简要地回到Vim的帮助中进行概述。
将突出显示组设置为User {N},其中{N}来自minwid字段,例如%1。 使用%或%0 *恢复正常的高亮显示。 User {N}和StatusLine之间的差异将应用于非当前窗口状态行的StatusLineNC。 数字N必须在1到9之间。请参见| hl-User1..9 |。
这可能有点令人困惑,所以让我们跳一个例子。 首先要做的是指定我们感兴趣的颜色。 语法类似于创建自定义颜色方案。
hi User1 ctermbg=green ctermfg=red guibg=green guifg=red
hi User2 ctermbg=red ctermfg=blue guibg=red guifg=blue
hi User3 ctermbg=blue ctermfg=green guibg=blue guifg=green
为了应用它,您指定用户号,后跟*
- %1*
User1颜色。 下面是一个完整的示例。

轻便式版本:

您的选择仅受您的想象力和时间限制。
下一步
尽管已涵盖了所有内容,但仍有很多东西要学习。 在建议其他资源之前,我将简要介绍另外几个主题。
特殊的角色
我的产品系列中的‹‹ ››
仅用于美学目的。 您可以转到unicode表中找到有趣的字符。
每种模式不同的颜色
如果您确定不使用插件就可以这样做。 最简单的路径将使用augroup
和Events
。 我将从:help Events
。 然后,您将为用户定义的颜色设置一个augroup
,并根据事件关闭它们。 我不会提供解决方案,因为我猜测这会激发一些动机。 因此,开始学习一些Vim脚本将是一项有价值的任务。 老实说,这还不错。 还有其他方法,但是在某些时候您最终会重新发明轮子。
有关Vim的更多信息,请访问我的博客!
其他资源
vim状态栏