Vimscript 狀態(tài)條

2018-02-24 16:02 更新

Vim允許自定義每個(gè)窗口底部的狀態(tài)條顯示的文字,你可以通過(guò)設(shè)置statusline選項(xiàng)來(lái)進(jìn)行自定義。執(zhí)行下面的命令:

:set statusline=%f

你可以在狀態(tài)條上看到當(dāng)前所編輯文件的路徑(相對(duì)于當(dāng)前路徑)。再執(zhí)行這個(gè)命令:

:set statusline=%f\ -\ FileType:\ %y

現(xiàn)在你可以在狀態(tài)條中看到類(lèi)似foo.markdown - FileType: [markdown]這樣的文字。

如果你熟悉C語(yǔ)言中的printf或者Python的字符串插值,那么這個(gè)選項(xiàng)的格式看起來(lái)會(huì)比較眼熟。如果不熟悉,你只需要記住以%開(kāi)頭的字符串會(huì)被展開(kāi)為不同的文字,這取決于%后面的字符。在上面的示例中,%f會(huì)被替換為文件名,%y會(huì)被替換為文件類(lèi)型。

注意狀態(tài)條中的空格需要反斜線進(jìn)行轉(zhuǎn)義,這是因?yàn)?code>set可以同時(shí)設(shè)置多個(gè)選項(xiàng),這些選項(xiàng)會(huì)用空格分隔,我們?cè)诘诙轮v過(guò)這個(gè)。

狀態(tài)條設(shè)置可以很快變得非常復(fù)雜,不過(guò)有一個(gè)更好的辦法來(lái)設(shè)置它們以至于讓它們看起來(lái)更清晰。執(zhí)行下面的命令:

:set statusline=%f         " 文件的路徑
:set statusline+=\ -\      " 分隔符
:set statusline+=FileType: " 標(biāo)簽
:set statusline+=%y        " 文件的類(lèi)型

第一個(gè)命令使用=來(lái)設(shè)置狀態(tài)條只顯示文件名,從而將之前的所有會(huì)在狀態(tài)條中顯示的值都屏蔽掉。之后再使用+=逐漸添加其他要顯示的內(nèi)容,一次添加一條。同時(shí)還使用注釋來(lái)說(shuō)明每一條所表示的含義以方便其他的人閱讀我們的代碼(也會(huì)方便我們自己以后閱讀)。

執(zhí)行下面的命令:

:set statusline=%l    " 當(dāng)前行號(hào)
:set statusline+=/    " 分隔符
:set statusline+=%L   " 總行數(shù)

現(xiàn)在狀態(tài)條只包含當(dāng)前所在行以及文件的總行數(shù),并且顯示成12/223這個(gè)樣子。

寬度和邊距

可以在%后面添加額外的字符來(lái)改變狀態(tài)條中信息的顯示樣式。執(zhí)行下面的命令:

:set statusline=[%4l]

現(xiàn)在狀態(tài)條中的文件行數(shù)會(huì)至少顯示為4個(gè)字符的寬度(例如:[ 12]),這可以用于防止?fàn)顟B(tài)條中的文字總是令人厭煩地跳來(lái)跳去。

默認(rèn)情況下在值的左邊添加邊距。執(zhí)行下面的命令:

:set statusline=Current:\ %4l\ Total:\ %4L

你的狀態(tài)條看來(lái)會(huì)是這個(gè)樣子:

Current:   12 Total:  223

你可以使用-將邊距添加在右邊,而不是左邊。執(zhí)行下面的命令:

:set statusline=Current:\ %-4l\ Total:\ %-4L

現(xiàn)在你的狀態(tài)條看起來(lái)會(huì)是這個(gè)樣子:

Current: 12   Total: 223

這樣就好看多了,因?yàn)閿?shù)字值是緊挨著它的標(biāo)簽的。

對(duì)于會(huì)被顯示為數(shù)字的代碼,你可以讓Vim使用0代替空格來(lái)填充邊距。執(zhí)行下面的命令:

:set statusline=%04l

現(xiàn)在當(dāng)光標(biāo)位于第12行的時(shí)候你的狀態(tài)條會(huì)顯示0012

最后,你可以設(shè)置一個(gè)代碼所要輸出的值的最大寬度。執(zhí)行下面命令:

:set statusline=%F

%F會(huì)顯示當(dāng)前文件的_完整_路徑?,F(xiàn)在執(zhí)行下面的命令改變最大寬度:

:set statusline=%.20F

如果有必要路徑會(huì)被刪簡(jiǎn),像下面這樣:

<hapters/17.markdown

這可以用于防止路徑或者是其他的很長(zhǎng)的代碼占用整個(gè)行。

通用格式

閱讀:help statusline查看狀態(tài)條中代碼的通用格式:

%-0{minwid}.{maxwid}{item}

除了%和item外其他都是可選的。

分割

我們不會(huì)探討狀態(tài)條的更多細(xì)節(jié)(Vim的文檔有非常詳細(xì)的說(shuō)明,如果你想學(xué)到更多,建議閱讀它們),不過(guò)我們會(huì)介紹一個(gè)簡(jiǎn)單的代碼,這個(gè)代碼可以立即帶來(lái)價(jià)值。執(zhí)行下面的命令:

:set statusline=%f         " 文件的路徑
:set statusline+=%=        " 切換到右邊
:set statusline+=%l        " 當(dāng)前行
:set statusline+=/         " 分隔符
:set statusline+=%L        " 總行數(shù)

現(xiàn)在狀態(tài)條的左邊會(huì)包含文件的路徑,當(dāng)前行/總行數(shù)會(huì)顯示在狀態(tài)條的右邊。%=這個(gè)代碼告訴Vim所有在此之后要在狀態(tài)條上顯示的信息都應(yīng)該右對(duì)齊(作為一個(gè)整體),而不是左對(duì)齊。

練習(xí)

瀏覽:help statusline中的可用代碼。先別在意那些你現(xiàn)在理解不了的代碼。

編輯你的~/.vimrc文件創(chuàng)建一個(gè)自定義的狀態(tài)條。確保在set中使用+=來(lái)一條一條地定義要顯示的代碼,并且每一行的設(shè)置添加注釋來(lái)說(shuō)明每一條的含義。

嘗試使用自動(dòng)命令和setlocal來(lái)為不同的文件定義不同的狀態(tài)條。確保使用了自動(dòng)命令組防止自動(dòng)命令被重復(fù)創(chuàng)建(永遠(yuǎn)記?。?/p>

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)