Vimscript 負責任的編碼

2018-02-24 16:02 更新

到目前為止我們已經介紹了一堆Vim命令,這可以讓你可以快速自定義Vim。除了自動命令組外其他的命令都是單行的命令,你可以不費吹灰之力就把它們添加到你的~/.vimrc文件中。

這本書的下一部分我們會開始專注于Vim腳本編程,將其當作一個真正的編程語言對待,不過在此之前,我會先講一些在編寫大量的Vim腳本時需要注意的東西。

注釋

Vim腳本非常強大,但對于那些想進入這個領域的程序員而言,在最近幾年它似乎逐漸變得像一個彎彎曲曲的迷宮,讓進入的人找不到歸路。

Vim的選項和命令經常會比較簡短生硬,并且難于閱讀,另外處理兼容性問題也會增加代碼的復雜度。編寫一個插件并且允許用戶自定義又會讓復雜度更進一級。

在編寫大量Vim腳本時要保持防御意識。要養(yǎng)成習慣添加注釋說明某段代碼是干什么的,如果有一個相關的幫助主題(help topic),最好在注釋中說明!

這不僅會給你以后的維護帶來方便,而且如果你將你的~/.vimrc文件分享到Bitbucket或者GitHub(強烈推薦你這么做),這些注釋也會幫助其他的人理解你的腳本。

分組

之前創(chuàng)建的映射可以讓我們在使用Vim的同時方便快捷地編輯和加載~/.vimrc。不幸的是這會導致~/.vimrc中的代碼快速增長以至失去控制,并且變得難于閱讀瀏覽。

我們用于對付這種情況的方法是使用Vim的代碼折疊功能,將多行代碼組織起來的作為一個部分然后對這部分的代碼進行折疊。如果你從來沒有用過Vim的折疊功能,那么你現在應該盡快去瞄一瞄。很多人(包括我自己)都認為在日常編碼工作中代碼折疊是不可或缺的。

首先我們需要為Vim腳本文件設置折疊。在你的~/.vimrc文件中添加下面幾行:

augroup filetype_vim
    autocmd!
    autocmd FileType vim setlocal foldmethod=marker
augroup END

這會告訴Vim對任何Vim腳本文件使用marker折疊方法。

現在在顯示~/.vimrc文件的窗口中執(zhí)行:setlocal foldmethod=marker。如果你不執(zhí)行這個命令,你會發(fā)現加載~/.vimrc文件后沒什么效果,這是因為Vim已經為這個文件設置了文件類型(FileType),而自動命令只會在設置文件類型的時候執(zhí)行。這讓你以后不需要手動來做這個事情。

現在在自動命令組開始和結束的地方添加兩行,像下面這樣:

" Vimscript file settings ---------------------- {{{
augroup filetype_vim
    autocmd!
    autocmd FileType vim setlocal foldmethod=marker
augroup END
" }}}

切換到常用模式,將光標放到這些文字中的任意一行,然后敲擊za。Vim會折疊從包含{{{的行到包含}}}的行之間的所有行。再敲擊za會展開所有這些行。

剛開始你可能會覺得為了代碼折疊而對源代碼進行注釋會有些不合理,我剛開始也這么想。對于大多數文件我現在仍然覺得這種做法并并不合適。因為不是所有人都使用相同的編輯器,所以在代碼中添加的折疊注釋對于那些不用Vim的人而言就像是噪音。

不過Vim腳本文件比較特殊,因為一個不用Vim的人不太可能會讀你的代碼,并且最重要的是如果不對代碼進行分組處理,寫著寫著你就不知道寫到哪里了,嚴重點可能會經脈盡斷,吐血而亡。

先自己嘗試嘗試吧,說不定你會逐漸喜歡上它。

簡短的名稱(Short Names)

對于大多數命令和選項,Vim支持使用它們的縮寫。例如,下面的兩個命令做的事情完全一樣:

:setlocal wrap
:setl wrap

我_強烈_提醒你不要在你的~/.vimrc或者是你編寫的插件中使用這些縮寫。Vim腳本對于初學者而言本來就已經夠晦澀難懂了;從長遠來看使用縮寫只會使得它更難于閱讀。即使_你_知道某個縮寫的意思,其他人未必讀得懂。

換句話說,縮寫只在編碼的過程中手動執(zhí)行命令的時候會很有用。在你按了回車鍵以后,就沒人會看到你輸入什么了,這樣你也沒必要輸入更多的字符。

練習

檢查你的~/.vimrc文件,將所有相關的行組織起來。你可以這么開頭:“基本設置(Basic Settings)“,”文件類型相關設置(FileType-specific settings)”,“映射(Mappings)”,和“狀態(tài)條(Status Line)”。然后在每個部分添加折疊標記和標題。

想想怎么讓Vim在第一次打開~/.vimrc文件的時候自動折疊所有設置了折疊注釋的行。閱讀:help foldlevelstart你會知道怎么搞。

檢查你的~/.vimrc文件,把所有的命令和選項的縮寫改成全稱。

檢查你的~/.vimrc文件,確保里面沒有什么敏感信息。然后創(chuàng)建一個git或者Mercurial倉庫,再將~/.vimrc文件放到里面,然后將這個文件鏈接到~/.vimrc。

提交你剛才創(chuàng)建的倉庫,并把它放到Bitbucket或者GitHub上,這樣其他的人都可以看到和學習它。記住要經常提交和推送到倉庫中,這樣你所做的修改也會被記錄下來。

如果你不只在一個機器上使用Vim,那你就可以克隆那個倉庫,然后像之前一樣將這個文件鏈接到~/.vimrc文件。這樣你就可以在所有的機器上都使用同樣的Vim配置了。

以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號