重要說明:自v4.0開始,VOoM支持html、vimwiki、wiki等格式的標(biāo)題,本文有待更新。
Vim[1]加裝VOoM插件,實(shí)現(xiàn)了帶折疊的雙欄樹狀文本管理 [2]/[3],為我?guī)啄陙淼膶ふ耶嬌狭私鯃A滿[4]的句號(hào)。只須在txt文本的標(biāo)題行增加 {{{1、{{{2…… 或其他自定義的簡單標(biāo)識(shí),利用VOoM就可以生成目錄樹,與正文分居兩窗口,實(shí)現(xiàn)光標(biāo)點(diǎn)擊跳轉(zhuǎn),以及對(duì)節(jié)點(diǎn)的層級(jí)、順序管理。即,VOoM讓txt成為最通用的資料庫,讓Vim成為最方便的個(gè)人信息管理軟件。
一、VOoM界面預(yù)覽及視頻演示:界面、視頻
二、VOoM基本教程:安裝、python支持、基本操作
三、高級(jí)使用:改進(jìn)VOoM:快捷調(diào)用、更快捷定義標(biāo)題行、高亮標(biāo)題行并隱藏標(biāo)識(shí)符、自定義標(biāo)識(shí)符、在html中變通使用
四、總結(jié)
附錄:注釋、文章更新歷史
一、VOoM界面預(yù)覽及視頻演示
1. VOoM界面預(yù)覽
上圖是善用佳軟使用Vim VOoM的實(shí)際截屏,從中可以看到如下特點(diǎn):
* 兩欄;
* 左側(cè)目錄可折疊/展開(正文也可以折疊,本例未采用);
* 點(diǎn)擊目錄可實(shí)現(xiàn)正文跳轉(zhuǎn);
* 標(biāo)題高亮。
2. VOoM視頻演示
下面的視頻是使用vim的outliner功能,來寫日記的示例。有助于初學(xué)者感性認(rèn)識(shí)及理解Vim,內(nèi)容包括:
* 用fdm=indent實(shí)現(xiàn)基于縮進(jìn)的長文本折疊管理。
* (2分10秒開始) 下載安裝VOoM插件。
* VOoM的使用。
* (3分20秒開始) 自定義語法文件,高亮標(biāo)題。
需要說明的是視頻中未能展示節(jié)點(diǎn)管理(改變層級(jí)、調(diào)整順序)功能。
二、VOoM基本教程
1. 安裝VOoM
VOoM插件的安裝與使用極為簡單,有基礎(chǔ)者可以略過本段。
* 到Vim官方網(wǎng)站VOoM主頁下載最新版:http://www./scripts/script.php?script_id=2657 。
* 解壓到vim安裝目錄/vimfiles/下。
* 重啟Vim。
* 打開自帶的示例文件 simple_outline.txt (可能位于 x:\soft\Vim\vimfiles\voom_samples\)。
* 在命令行模式鍵入(注意大小寫):Voom 并回車。
如果順利,現(xiàn)在就能看到左側(cè)的樹狀目錄了。
如果不順利,很可能是需要Python支持,見下。
2. VOoM 與 python
VOoM 之所以基于 Python,完全是出于效率:Python掃描文本正文發(fā)現(xiàn)fold marker的速度,大約是vim腳本的10倍。作者在幫助文檔的“Why VOoM uses Python”一節(jié),給出了詳細(xì)的測試代碼和測試結(jié)果。
所謂 VOoM 需要 Python支持,具體包括兩方面:
?、?GVIM.exe 支持 Python;
?、?系統(tǒng)中安裝有對(duì)應(yīng)版本的Python環(huán)境。
條件①通常具備,因?yàn)楣俜桨l(fā)布的gVim默認(rèn)是支持 Python的。
條件②可能會(huì)有些問題:如果你沒有安裝Python,這時(shí)就需要根據(jù)gvim的版本,安裝合適版本的Python:gvim7.2需要Python 2.4,gvim7.3需要Python 2.7。安裝Python時(shí)最好在C根目錄。如果你的Python版本與gvim版本不對(duì)應(yīng),一種辦法是換用正確版本的Python;一種辦法是重新編譯gvim,讓它支持你已經(jīng)安裝的Python版本(不會(huì)編譯的請(qǐng)到 這里下載)。
為了這樣一個(gè)插件而安裝Python,對(duì)普通用戶是否值得?這是一個(gè)愛屋及烏、見仁見智的問題。筆者不做程序開發(fā),安裝JRE是因?yàn)?a href="http:///freemind-1.htm">FreeMind;安裝.Net是因?yàn)?a href="http:///evernote-v35.htm">EverNote v3.5;安裝Python是因?yàn)閂OoM與UltiSnips;安裝Ctags、taglist是因?yàn)?a href="http:///vim-txtbrowser.htm">TxtBrowser……
3. VOoM 基本操作
鼠標(biāo)方式:Vim并不排斥鼠標(biāo)。如果想用鼠標(biāo)操作VOoM,則它與類似軟件并無區(qū)別,無須解釋。
鍵盤方式:Vim的長處還是鍵盤。要點(diǎn)如下,詳見幫助文檔。
1. 基本操作之Tab:在左右 [6]兩個(gè)窗口之間切換焦點(diǎn);
2. 基本操作之跳轉(zhuǎn)到目錄:在目錄樹側(cè),可通過↑↓來打開正文的相應(yīng)位置,→←來展開/折疊父子節(jié)點(diǎn)。
3. 節(jié)點(diǎn)基本操作:在目錄樹buffer中,如下快捷鍵可用:
i I a A:修改當(dāng)前節(jié)點(diǎn)標(biāo)題行。
<LocalLeader>i、I:在當(dāng)前節(jié)點(diǎn)前、后插入新節(jié)點(diǎn)。(LocalLeader默認(rèn)為\,也可自定義)
ctrl+方向鍵:上下移動(dòng)節(jié)點(diǎn)(調(diào)整順序);左右移動(dòng)節(jié)點(diǎn)(調(diào)整級(jí)別)。
dd yy pp:刪除、復(fù)制、粘貼節(jié)點(diǎn)。
三、高級(jí)使用:改進(jìn)VOoM
1. 更快捷調(diào)用VOoM
默認(rèn)情況下,需要鍵入 :Voom回車 來調(diào)用VOoM插件。此過程需要注意輸入法狀態(tài)、vim模式、大小寫,不算簡便。因此,可以自定義熱鍵。
我的選擇是映射為 F11 ——選擇 F11 是因?yàn)閿?shù)字11的形狀與雙欄式結(jié)構(gòu)很相像,便于記憶。
具體做法是在 _vimrc 中增加一句 “map <F11> :Voom<CR>”——放到 _vimrc中因?yàn)榇嗣畛S谩?/p>
2. 更快捷定義標(biāo)題行
如果認(rèn)為 {{{1 這樣的字符串也不便于鍵入,不妨進(jìn)行自定義。舉例如下。
例1:基本做法
imap [1 {{{1
imap [2 {{{2
imap [3 {{{3
實(shí)現(xiàn)了插入模式的映射,即鍵入 [1 可以得到 {{{1 …… 當(dāng)然,也可用縮寫代替映射。
例2:改進(jìn)做法(推薦)
imap [1 <esc>$a {{{1
map [1 <esc>$a {{{1
功能同上,但不限模式、光標(biāo)無須準(zhǔn)確定位。
例3:Geek做法(供參考)
設(shè)定1/2/3級(jí)標(biāo)題,在 MS Word 中的默認(rèn)熱鍵是 ctrl+alt+1/2/3。按照“不同軟件的操作方式盡可能一致”原則,也力爭在VOoM中保持同樣熱鍵。但是,Vim map 并不支持 ctrl-數(shù)字,所以,ctrl+alt+數(shù)字也是做不到的。一定要實(shí)現(xiàn)?請(qǐng)用萬能的AutoHotkey :
^!1::
IfWinActive, ahk_class Vim
{
sendinput {esc}$a {{}{{}{{}1
}
else
sendplay ^!1
return
3. 高亮標(biāo)題行、隱藏標(biāo)識(shí)符
為實(shí)現(xiàn)高亮效果,可以使用如下syntax代碼:
syn match zhead0 "^.+{{{d"
hi zhead0 gui=bold guibg=black
syn match zhead1 "^.+{{{1"
hi zhead1 gui=bold guifg=red guibg=black
syn match zhead2 "^.+{{{2"
hi zhead2 gui=bold guifg=green guibg=black
syn match url "S*://S*"
hi url guifg=lightblue gui=underline
但是,標(biāo)題行突出顯示后,{{{1 這樣的標(biāo)示符更加刺眼。能否將之隱藏呢?Vim 當(dāng)然不會(huì)讓你失望,只需稍修改上述高亮規(guī)則即可。筆者在初學(xué) vim syntax 時(shí),曾苦苦探尋實(shí)現(xiàn)方式。而現(xiàn)在,可以直接給出兩種做法:
一是利用零寬斷言(:h zero-width)讓標(biāo)題不包括{{{d,代碼如下:
syn match zhead0 "^.+({{{d)@="
syn match zkey "{{{d"
二是利用contain參數(shù),代碼如下:
syn match zkey "{{{d" contained
syn match zhead0 "^.+{{{d" contains=zkey
對(duì)于zkey的隱藏,可以直接設(shè)定前景色與背景色相同,但更推薦 hi link zkey ignore 的做法。同理,zhead0 也可以不做直接設(shè)定,而是 hi link zhead0 MatchParen 或其他預(yù)設(shè)風(fēng)格。
4. {{{2 標(biāo)識(shí)符的自定義等
{{{1、{{{2……這樣的標(biāo)識(shí)符用來表示標(biāo)題。VOoM稱之為“起始折疊標(biāo)記”(start fold marker),它是通過 foldmarker 選項(xiàng)來定義的。比如 set fmr=<<<,>>> 或 set fmr=[[[,]]] ,這樣就可以使用 <<<2 或 [[[2 來表示二級(jí)標(biāo)題。
另外,除了數(shù)字表示級(jí)別外,還可以緊跟如下字母(及組合):x 表示標(biāo)記(目錄樹第二列顯示x),可用來標(biāo)出某些重要標(biāo)題。= 表示起始節(jié)點(diǎn),即:Voom時(shí)的起始節(jié)點(diǎn)。o 表示open,即該目錄樹完全展開。除了在標(biāo)題行直接增加這些標(biāo)記外,也有相應(yīng)快捷鍵操作。
5. 在html中變通使用vim-VOoM
工具固然有好壞之分,但多數(shù)情況下,用戶應(yīng)用水平對(duì)最終效果的影響更大。而學(xué)會(huì)變通使用,聞一知二、舉一反三,是顯著提升應(yīng)用效果的關(guān)鍵。
txt需要額外標(biāo)記才能使用VOoM,而html是已經(jīng)附有標(biāo)記的、擴(kuò)展后的txt。其中,標(biāo)題行以及層級(jí)已由h標(biāo)簽進(jìn)行了標(biāo)示。所以,理論上,html應(yīng)該可以“不加修改”、“快速”使用VOoM功能。
所謂好工具,就是理論上應(yīng)該能做到的事,實(shí)際上也能做到。對(duì)著VOoM想一下,答案有了!
實(shí)現(xiàn)方法:很簡單,只須設(shè)定
:set fmr=</h,}}}
再:Voom 即可(對(duì)于自己的html筆記文檔,可增加modeline)。
上述操作效果如圖。美中不足的是,目錄行首的h起始標(biāo)簽有些礙眼。
最理想的效果參見此文,通過修改voom.py(v2.0)中第59行開始的函數(shù):def makeOutline(body, lines),在 74 行之后,增加如下兩行:
del_html_re = re.compile('<.*?>')
tline = del_html_re.sub('', tline)
把html標(biāo)簽全部清空即可——此修改當(dāng)然有副作用,所有尖括號(hào)內(nèi)容均被忽略,請(qǐng)慎用!感謝 vfantasie @ 網(wǎng)友提供上述代碼,相關(guān)討論參見此處。
四、總結(jié)
如果說Vim是單一txt文件編輯利器,Vim加wiki類擴(kuò)展則實(shí)現(xiàn)了多個(gè)txt的管理,那么VOoM就實(shí)現(xiàn)了以txt為文本資料庫的管理。憑著Vim方便的加密、查找、替換、語法高亮、折疊功能,再加上VOoM的樹狀管理,我自己認(rèn)為找到了理想的文字筆記管理方案。
附錄:注釋
[1]: 參見Vim--普通人編輯利器、更多vim文章。
[2]: 關(guān)于純文本資料管理。txt是最簡單,也是最基本的文件格式,很多人對(duì)它情有獨(dú)鐘。通過軟件為長篇txt增加目錄功能,一直是某些開發(fā)者和用戶的夢想,為此,有了《超級(jí)小巧的5款免費(fèi)樹狀筆記軟件》。
[3]: 關(guān)于雙欄樹狀結(jié)構(gòu)。我最早是利用 UltraEdit 的 function list 實(shí)現(xiàn)長篇txt的目錄導(dǎo)航。后來轉(zhuǎn)到 Vim 后,一直試圖用tag、folding來模擬此功能,但都不滿意。對(duì)于較少使用高級(jí)文本編輯器的用戶而言,雙欄樹狀結(jié)構(gòu)的典型例子是 MS Word 的“文檔結(jié)構(gòu)圖” [5]。
[4]: 近乎圓滿,是因?yàn)?Vim 并不適合處理太大的txt文件。當(dāng)然,這個(gè)大小是相對(duì)的,與硬件及Vim激活的功能多少有關(guān)。 更新:而VOoM處理長文本,也會(huì)較占資源,主要是掃描正文生成outline。VOoM作者的2002年舊電腦(1.6GHz Pentium 4 Mobile)上,附帶的 calendar_outline.txt (3.2 Mb, 56527 lines, 4160 headlines)會(huì)在更新后有明顯停頓(小于1秒)。但要說明的是:僅閱讀跳轉(zhuǎn)仍然流暢;減少標(biāo)題行能大幅度提高效能??傊?,我相信當(dāng)前情況下,10MB txt,上千個(gè)節(jié)點(diǎn)是可以正常使用的。
[5]: MS Word 文檔結(jié)構(gòu)圖是處理長文檔極為重要的工具,也是我推薦的Word視圖,我在 Word 2003 中調(diào)用此功能的“快捷鍵”是 alt+v d ,可參見 [視頻教程] WPS處理長文檔的技巧。
[6]: 用戶也可以自定義目錄窗口的位置:上、下、左、右,及其大小。建議放在默認(rèn)位置,即左側(cè)。
附錄:文章更新歷史
2010-09-16:感謝知無兄協(xié)助更新本文。
2010-04-18:VOOF改名為VOoM;html利用h標(biāo)簽更完美。
2010-03-24:補(bǔ)充目錄、總結(jié)。
2010-03-20:補(bǔ)充在html中利用h標(biāo)簽,實(shí)現(xiàn)目錄的做法。
2010-03-03:全面更新文章;VOOF升級(jí)到v1.92。
2009-12-09:改進(jìn)實(shí)現(xiàn)^!1/2/3功能的AutoHotkey腳本。
2009-11-11:補(bǔ)充“隱藏標(biāo)示符”。
2009-11-09:補(bǔ)充截屏,增加改進(jìn)部分與Python,算是下篇。
2009-11-06:補(bǔ)充視頻,修改并發(fā)表,算是上篇。
2009-05-27:長期跟蹤的習(xí)慣讓我在第一時(shí)間發(fā)現(xiàn)了剛剛誕生的VOOF。一試之下,贊嘆不已!立即在水木社區(qū)vim版 發(fā)文推薦。
您可能也喜歡:
來自無覓網(wǎng)絡(luò)的相關(guān)文章: