状态栏

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]

状态栏中的行号现在会补全空格来确保最少有四个字符的宽度(例如:[ 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         " Path to the file
:set statusline+=%=        " Switch to the right side
:set statusline+=%l        " Current line
:set statusline+=/         " Separator
:set statusline+=%L        " Total lines

现在状态栏会包括左侧的文件路径,以及右侧的当前行数/总行数。 %= 告诉 Vim 所有后面的内容都要被排列到(作为一个整体)右侧而非左侧。

练习

略读 :help statusline 中可使用代码的列表。如果目前你还不理解其中的一些,也不用担心。

添加一些行到 ~/.vimrc 文件来构建一个自己定制的状态栏。 务必使用 += 形式的 set 把定义分割为多行,并且给每行添加注释,描述每一部分做了什么。

试试使用自动命令和 setlocal 为不同的文件类型定义不同的状态栏。 务必归类自动命令组以防止重复(一如既往)。

原文地址:http://learnvimscriptthehardway.stevelosh.com/chapters/17.html