一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

VOoM(原VOOF):vim實(shí)現(xiàn)帶折疊雙欄樹狀文本管理 | 善用佳軟

 phisics 2011-03-25

VOoM(原VOOF):vim實(shí)現(xiàn)帶折疊雙欄樹狀文本管理

重要說明:自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ù)覽

  VOoM:vim outliner
  上圖是善用佳軟使用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ā)文推薦。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    国产一级内射麻豆91| 亚洲欧美日韩国产综合在线| 少妇人妻一级片一区二区三区| 日本在线视频播放91| 日本精品最新字幕视频播放| 日韩精品中文字幕亚洲| 日本高清一道一二三区四五区| 麻豆一区二区三区精品视频| 亚洲精品中文字幕一二三| 麻豆欧美精品国产综合久久| 91精品蜜臀一区二区三区| 99久久精品午夜一区| 国产又粗又猛又黄又爽视频免费| 99久久国产精品成人观看| 欧美日韩精品人妻二区三区| 91福利免费一区二区三区| 中文久久乱码一区二区| 九七人妻一区二区三区| 九九热国产这里只有精品| 亚洲三级视频在线观看免费| 内射精子视频欧美一区二区| 丝袜美女诱惑在线观看| 亚洲综合日韩精品欧美综合区| 九九热视频网在线观看| 91日韩欧美中文字幕| 日韩视频在线观看成人| 色狠狠一区二区三区香蕉蜜桃| 成人三级视频在线观看不卡| 日本加勒比中文在线观看| 色老汉在线视频免费亚欧| 亚洲日本久久国产精品久久| 国产成人精品一区二三区在线观看| 国产性情片一区二区三区| 日韩一区二区三区有码| 欧美成人黄色一区二区三区| 国产成人午夜av一区二区| 麻豆一区二区三区精品视频| 日本不卡在线视频你懂的 | 久草国产精品一区二区| 国产精品内射婷婷一级二级| 欧美在线观看视频免费不卡|