Vimscript 狀態(tài)條

2018-02-24 16:02 更新

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

:set statusline=%f

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

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

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

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

注意狀態(tài)條中的空格需要反斜線進行轉(zhuǎn)義,這是因為set可以同時設(shè)置多個選項,這些選項會用空格分隔,我們在第二章講過這個。

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

:set statusline=%f         " 文件的路徑
:set statusline+=\ -\      " 分隔符
:set statusline+=FileType: " 標簽
:set statusline+=%y        " 文件的類型

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

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

:set statusline=%l    " 當前行號
:set statusline+=/    " 分隔符
:set statusline+=%L   " 總行數(shù)

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

寬度和邊距

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

:set statusline=[%4l]

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

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

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

你的狀態(tài)條看來會是這個樣子:

Current:   12 Total:  223

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

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

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

Current: 12   Total: 223

這樣就好看多了,因為數(shù)字值是緊挨著它的標簽的。

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

:set statusline=%04l

現(xiàn)在當光標位于第12行的時候你的狀態(tài)條會顯示0012

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

:set statusline=%F

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

:set statusline=%.20F

如果有必要路徑會被刪簡,像下面這樣:

<hapters/17.markdown

這可以用于防止路徑或者是其他的很長的代碼占用整個行。

通用格式

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

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

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

分割

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

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

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

練習(xí)

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

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

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

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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號