Vim状态栏是一个非常有用的功能,它可以帮助我们更好地理解和使用Vim。它位于编辑器的底部,可以显示当前文件的名称、行号、列号、模式、文件类型、文件大小等信息。
Vim状态栏有三个部分:左侧显示当前文件的名称;中间显示当前光标所在行号和列号;右侧显示当前模式、文件大小和文件类型。
左侧: 文件名 中间: 行号 列号 右侧: 模式 文件大小 文件类型
Vim的模式包括命令模式、普通模式、搜索模式、运行shell命令的模式、运行外部命令的模式、运行ex命令的模式。在不同的情况下,会出现不同的字样来代表不同的模式。
命令模式: -- INSERT -- 正常/选中/字典/语法/关键字高亮: -- NORMAL -- 运行shell命令: -- SHELL -- 运行外部命令: -- EXTERNAL COMMAND -- 运行ex命令: -- EX MODE --
此外,Vim也会根据不同情况显示不同的文本大小信息:如“Ln xx Col xx”代表当前光标所在位置是xx行xx列;“xx,yy B”代表当前文本总共有xx字节yy字数;“xx,yy B Top xx% Bot xx%”代表当前光标所在位置占整个文本长度的上下xx%。
Vim允许自定义每个窗口底部的状态条显示的文字,你可以通过设置statusline
选项来进行自定义。执行下面的命令:
:set statusline=%f
你可以在状态条上看到当前所编辑文件的路径(相对于当前路径)。再执行这个命令:
:set statusline=%f - FileType: %y
现在你可以在状态条中看到类似foo.markdown - FileType: [markdown]
这样的文字。
如果你熟悉C语言中的printf
或者Python的字符串插值,那么这个选项的格式看起来会比较眼熟。如果不熟悉,你只需要记住以%
开头的字符串会被展开为不同的文字,这取决于%
后面的字符。在上面的示例中,%f
会被替换为文件名,%y
会被替换为文件类型。
注意状态条中的空格需要反斜线进行转义,这是因为set
可以同时设置多个选项,这些选项会用空格分隔,我们在第二章讲过这个。
状态条设置可以很快变得非常复杂,不过有一个更好的办法来设置它们以至于让它们看起来更清晰。执行下面的命令:
:set statusline=%f " 文件的路径
:set statusline+= - " 分隔符
:set statusline+=FileType: " 标签
:set statusline+=%y " 文件的类型
第一个命令使用=
来设置状态条只显示文件名,从而将之前的所有会在状态条中显示的值都屏蔽掉。之后再使用+=
逐渐添加其他要显示的内容,一次添加一条。同时还使用注释来说明每一条所表示的含义以方便其他的人阅读我们的代码(也会方便我们自己以后阅读)。
执行下面的命令:
:set statusline=%l " 当前行号
:set statusline+=/ " 分隔符
:set statusline+=%L " 总行数
现在状态条只包含当前所在行以及文件的总行数,并且显示成12/223
这个样子。
可以在%
后面添加额外的字符来改变状态条中信息的显示样式。执行下面的命令:
:set statusline=[%4l]
现在状态条中的文件行数会至少显示为4个字符的宽度(例如:[ 12]
),这可以用于防止状态条中的文字总是令人厌烦地跳来跳去。
默认情况下在值的左边添加边距。执行下面的命令:
:set statusline=Current: %4l Total: %4L
你的状态条看来会是这个样子:
Current: 12 Total: 223
你可以使用-
将边距添加在右边,而不是左边。执行下面的命令:
:set statusline=Current: %-4l Total: %-4L
现在你的状态条看起来会是这个样子:
Current: 12 Total: 223
这样就好看多了,因为数字值是紧挨着它的标签的。
对于会被显示为数字的代码,你可以让Vim使用0代替空格来填充边距。执行下面的命令:
:set statusline=%04l
现在当光标位于第12行的时候你的状态条会显示0012
。
最后,你可以设置一个代码所要输出的值的最大宽度。执行下面命令:
:set statusline=%F
%F
会显示当前文件的_完整_路径。现在执行下面的命令改变最大宽度:
:set statusline=%.20F
如果有必要路径会被删简,像下面这样:
<hapters/17.markdown
这可以用于防止路径或者是其他的很长的代码占用整个行。
阅读:help statusline
查看状态条中代码的通用格式:
%-0{minwid}.{maxwid}{item}
除了%
和item外其他都是可选的。
我们不会探讨状态条的更多细节(Vim的文档有非常详细的说明,如果你想学到更多,建议阅读它们),不过我们会介绍一个简单的代码,这个代码可以立即带来价值。执行下面的命令:
:set statusline=%f " 文件的路径
:set statusline+=%= " 切换到右边
:set statusline+=%l " 当前行
:set statusline+=/ " 分隔符
:set statusline+=%L " 总行数
现在状态条的左边会包含文件的路径,当前行/总行数会显示在状态条的右边。%=
这个代码告诉Vim所有在此之后要在状态条上显示的信息都应该右对齐(作为一个整体),而不是左对齐。
浏览:help statusline
中的可用代码。先别在意那些你现在理解不了的代码。
编辑你的~/.vimrc
文件创建一个自定义的状态条。确保在set
中使用+=
来一条一条地定义要显示的代码,并且每一行的设置添加注释来说明每一条的含义。
尝试使用自动命令和setlocal
来为不同的文件定义不同的状态条。确保使用了自动命令组防止自动命令被重复创建(永远记住)。
让我们创建一个Potion文件作为插件的测试样本。factorial = (n):total = 1n to 1 (i):total *= i.total.10 times (i):i string p...
FieldsStr/FieldsExStr字段获取FieldsStr用于获取指定表的字段,并可给定字段前缀,字段之间使用","符号连接成字符串返回...
SVG 渐变 - 线性 SVG 线性渐变指的是沿着直线改变颜色,要插入一个线性渐变,只需要在 SVG 文件的 defs 元素内部,创建一个 line...
XSL-FO retrieve-marker 对象XSL-FO 参考手册定义和用法 fo:retrieve-marker 对象与 fo:marker 一起使用来创建运行的页眉或页脚...
XSL-FO table-caption 对象XSL-FO 参考手册定义和用法 fo:table-caption 对象包含了使用 fo:table-and-caption 对象定义的表格标...
XML Schema simpleType 元素 完整 XML Schema 参考手册定义和用法 simpleType 元素定义一个简单类型,规定与具有纯文本内容的元...
XML Schema field 元素 完整 XML Schema 参考手册定义和用法 field 元素规定 XPath 表达式,该表达式指定用来定义标识约束(uniq...
XML Schema key 元素 完整 XML Schema 参考手册定义和用法 key 元素指定属性或元素值(或一组值)必须是指定范围内的键。键的范...
XSLT xsl:otherwise 元素本节通过两个实例来为你讲解 XSLTxsl:otherwise元素。 完整的 XSLT 元素参考手册定义和用法 xsl:otherwi...