三月 19, 2011
» 分享我的vim設定檔

二月 21, 2010
» vim advocacy

http://www.viemu.com/a-why-vi-vim.html

推特上看來的。要記下來以後方便教別人 vi/vim 使用。

十二月 25, 2009

hoamon's sandbox
hoamon
hoamon's sandbox is about »

tag cloud

» 我是個愚蠢的傢伙 --- NetBeans 用了快一年,才想到「自動補齊」是種選項


年初時,把我的常用編輯器 vim 改成 NetBeans + jvi 的工具以應付多專案、多檔案及多版本比對的混亂模式。

這混亂模式不是 vim 檔案編輯模式的錯,而是混亂工作流程造成的。如果只在一個資料夾、幾個簡單文件要編輯,我還是會用 vim 處理的。

在使用 NetBeans + jvi 的過程中,有一個現象一直困惱著我,那就是 NetBeans 會偵測我打入的字,並作文法檢查及自動完成函式名稱,這『自動化』的行為,理論上,應該會讓編輯者比較方便才是,但因為我用的是 jvi plugin ,所以我已習慣另一種自動補齊行為: Ctrl+p ,而且我往往不需要 NetBeans 幫我在打『點』時作自動補齊,因為我不需從 N 個函式名稱、屬性中挑出想要的,而是先輸入前幾個字,然後再用 Ctrl+p 來補齊。

這個自動化模式讓我寫程式碼的速度受到限制,但用久了也就習慣了,畢竟寫程式碼的瓶頸並不是文字輸入速度,而是思考速度。

今天我莫名其妙地想到,這個「自動補齊應該是一種選項」才是呀! NetBeans 怎麼會預設立場認為全天下的程式設計師都喜歡這個行為,一定不只有我是因為使用 jvi plugin 才不愛用 NetBeans 內建的自動補齊,也有別人就是不喜歡「自動補齊」才對呀!

於是,我翻了一下 Options ,在 [Editor] 中的 [Code Completion] 發現關閉這個行為的選項。天呀! 我用了快一年,才想到這件事。

「IDE必備自動補齊」的先入為主想法,讓我莫名其妙地忍受這個小問題將近一年。

十二月 16, 2009
» 給程式設計師的Vim入門圖解說明

12-09 Update: The English version of Vim Visual Cheat Sheet is also available. PNG, PDF)

(更新: 在圖內加入基本指令表和說明以及PDF版,方便大家列印出來貼在牆上隨時查看。)

剛在寫那篇關於vi和文字編輯器的文章時,本來想附上一個vim的超簡單入門連結,但找了一下都沒有很滿意的,所以決定自己動手先來畫個入門用的說明圖。

vim-cheat-sheet-full
PDF版下載

vim-cheat-sheet-diagram

這個圖把vim中基本的移動方法都畫上去了,為了方便programmer,特別列出了很多只有寫程式才會用的按鍵。除了這些以外,其實還有一些好用的東西我還沒想到怎麼畫上去比較好(像是tags、沒有標準快速鍵的tab、man..),如果大家有idea歡迎提供。

這些圖示依照移動的單位大小分為以下幾個種類,分別用不同顏色標示:
(注意,這不是完整的vim快速鍵列表,只是我覺得比較常用的鍵而已。)

字元(character)
h
j
k
l
單字(word)
w
下一個word
W
下一個word(跳過標點符號)
b
前一個word
e
跳到目前word的尾端
行(line)
0
跳到目前行的開頭
^
跳到目前行第一個非空白字元
$
跳到行尾
段落(paragraph)、區塊(block)
{
上一段(以空白行分隔)

">
">}
下一段(以空白行分隔)

">
">[{
跳到目前區塊開頭

">
">]}
跳到目前區塊結尾

">
">%
跳到目前對應的括號上(適用各種括號,有設定好的話連HTML tag都能跳)
螢幕(screen)、絕對位置
H
螢幕頂端
M
螢幕中間
L
螢幕底部
:x
xG
跳到第x行(x是行號)
搜尋(search)
/xxxx
搜尋xxxx
#
往前搜尋目前游標所在的字(word)
*
往後搜尋目前游標所在的字(word)
fx
在目前行往後搜尋字元x
gd
跳到目前游標所在的字(word)的定義位置(寫程式用, 跳到定義變數/函式的地方)
分割視窗
:split
分割視窗(可加檔名順便開啟另一檔案)
:diffsplit xxx
以分割視窗和檔案xxx做比較(diff)
Ctrl-W p
跳到前一個分割視窗(在兩個分割窗來回切換)
Ctrl-W j
跳到下面的分割窗
Ctrl-W h
跳到左邊的分割窗
Ctrl-W k
跳到上面的分割窗
Ctrl-W l
跳到右邊的分割窗
自動補齊(Auto-completion) (在Insert Mode中使用)
Ctrl-N
自動補齊檔案內的下一個可能字(word)
Ctrl-P
自動補齊檔案內的上一個可能字(word)
Ctrl-X Ctrl-F
自動補齊檔名


十二月 6, 2009
» [HCI] 淺談模式”mode”與文字編輯的技術與學習

很久以前就想過要寫一篇關於文字編輯(text editing)的文章,當然我要講的不是要怎麼寫文章,而是關於使用文字編輯器(text editor)的技術。

文字編輯可以說是電腦歷史上最古老也最被廣泛使用的功能之一,無論是古老的mainframe或是現代的PC、Mac,甚至是手機,上面一定都有文字編輯的功能。人們每天都在用文字編輯器,不管是寫blog、打報告、寫程式,即使只是用twitter或plurk寫一句話,也都是在做文字編輯。既然這件事每個人每天都在用,還有什麼好談的呢?有趣的地方就在於,雖然大家每天都在用文字編輯器,但很少人會仔細去想要如何才能把這件事做得更快更好。怎樣的編輯器才是一個好用的編輯器?怎樣的編輯器用起來才能讓人感到行雲流水、人機合一的美妙境界?

我們先從一般最常見的編輯器說起。一個常見的編輯器就像Windows的記事本一樣,或是瀏覽器內預設的文字輸入區(textarea),支援游標移動/選取、新增/刪除/修改文字、複製/剪下/貼上、搜尋/取代等基本功能。這種常見的編輯器用起來很簡單,只要在鍵盤上打字就能新增文字,按下backspace或delete鍵就能刪除文字;用滑鼠點擊任何文章內的地方游標就會移動過去;複製、搜尋等功能可以透過menu bar找到,或是利用一些約定俗成的快速鍵(Ctrl-C, Ctrl-V..)就可以在編輯文章中快速呼叫這些功能。這種編輯器的特色是學習門檻很低,要記憶的只有一些特殊的快速鍵,即使不記得也能透過menu bar或是context menu找到。

如果用之前說過的usability來分析這種編輯器,大概可以知道這樣子的UI具有容易學習(高learnability)、不容易忘記(高memorability)、不容易產生Errors、一般用起來也不會有太大不滿(satisfaction)。一切看起來都很美好,唯一的問題是,這種編輯器的efficiency到底是好還是不好?

回答這個問題前,先繼續看另一種編輯器的設計,我們才能比較不同設計的好壞。

在1976年UNIX剛誕生不久時,出現了一個特殊的編輯器叫做vi。vi引入了一個很特殊的概念:模式(mode)。

vi和一般常見編輯器最大的不同在於它有兩種模式,命令模式(command mode)和插入模式(insert mode)。在命令模式下任何鍵盤輸入都會被解讀成送給編輯器的特殊指令,例如移動游標、複製/貼上、搜尋..等等全都是送給編輯器的命令。而在插入模式下,鍵盤輸入的字會被送入編輯中的文件內,這模式也就是一般編輯器預設的模式。

在HCI的研究中,模式(mode) 是一個很常被探討的概念。在不同的模式下,使用者即使給了相同的輸入,但系統卻會產生不同結果。日常生活中最常見的例子就是汽車的排檔:在D檔時踩油門車子會前進,但在R檔時踩油門車子卻會後退。而有多種模式的UI會帶來最大的問題是mode error,也就是使用者分不清或是忘記現在系統所在的模式,而得到了非預期的結果。這種error問題可大可小,最嚴重可能就是開車時忘記在R檔而踩了油門想往前進卻撞上後面的車。也有些比較輕微的,像是在打字時忘記caps lock是開著的而不小心打出一連串的大寫文字就比較無所謂,因為看到後馬上就能回頭修正。

但如果是在看不到的時候意外開著caps lock打字呢?(像是打密碼的時候)還好最近幾年出現下面這種設計,在密碼輸入框上面顯示caps lock的狀態,用來避免打密碼時不小心開了caps lock造成的mode error。

mode-error

vi引入mode到編輯器中,最大的問題就是產生了mode error的可能。也就是說,使用者如果以為他在insert mode而快樂的開始打字,但結果卻是什麼事都沒發生(除非他剛好按到a或i進入了insert mode..)。這問題也是造成vi難以入門的原因:你可以想像有許多第一次進到vi的人,打半天字卻什麼都沒有跑出來會帶來多大的挫折感。而且mode error可怕的地方在於,不是只有新手會碰上這種error,即使是vi的專家也常常會在insert mode打指令或是在command mode中打文章。(如果你在文章中看到:wq這種怪東西,就知道那人是用vi的了)

說起來mode帶來不少壞處,但它也不是沒有好處。讓我們反觀一般編輯器的”mode”設計。常見編輯器其實不是沒有mode,而是他們的mode是「暫時」的(這叫spring-loaded mode),靠Ctrl、Shift、Alt、Cmd、Win這些功能鍵來「暫時」進入命令模式。例如說Ctrl-C可以複製文字,這其實就是靠Ctrl賦予”C”這個鍵暫時的特殊功能,而取消原本在文件裡插入”C”的預設功能。用spring-loaded mode的好處是不容易產生mode error,因為使用者平常就只處在一種mode中,只有當使用者想要用特殊功能時,才必須先刻意按住某些特殊功能鍵來啟動它。spring-loaded mode的壞處在於,Ctrl、Alt、Shift這些鍵的位置在鍵盤的邊緣,再加上還必須按住不放(有時候還要兩三個鍵一起按住),使用者常常就得用彆扭姿勢讓小指和無名指按住,造成精神與肉體上的折磨。在按住這些功能鍵的同時,快速鍵的位置還不能距離太遠才能用單手按到,所以我們才會看到最常用的快速鍵都集中鍵盤左下角(Z undo、A全選、X剪下、C複製、V貼上、F搜尋…)。

後來文字編輯器變得越來越複雜,快速鍵也大量增加,這時在有限的空間內分配快速鍵的位置並且讓使用者容易學習又不容易忘記就成了一件困難的事。現代的一般編輯器,包括很多寫程式用的IDE,大量使用各種混合Ctrl、Shift、Alt的快速鍵,這種快速鍵設計哲學是把每一個功能對應到一組複合鍵上。理所當然的,功能越多,快速鍵就越多越難記。

因為多了mode,vi和一般編輯器的命令設計哲學也非常不同。vi的哲學是把功能分解成最小單元,再把這些最小單元一一對應到不同按鍵上,最後再利用一連串的按鍵組合產生使用者想要的複雜功能。以移動游標來說,vi把這件事分得非常仔細,從字元(character)、單字(word)、行(line)、句子(sentence)、段落(paragraph)、螢幕(screen)、區塊(block)、到檔案(file)都有對應的鍵可以以不同的單位大小來移動游標,例如按w可以跳到下一個單字(word),}可以跳到下一個paragraph…等等。乍看之下似乎很複雜,連移動游標看起來都這麼麻煩,但這樣設計的好處在後面。文字編輯還有很多動作可以做,像是刪除、剪下、複製..等等。vi把動作和操作的單位分解開來,例如:刪除(delete)是d、複製(yank)是y,這樣我們就只需要分別記憶動作對應的鍵和單位對應的鍵,就可以交叉組合出多種一般編輯器做不到的複雜功能。例如說,dw就是刪除(delete)一個單字(word)的意思,y}可以複製(yank)一個段落(paragraph)。如果你想要的話,單位前面還可以加上量詞,例如說d2w是刪除2個單字。

vi的這種設計避免了快速鍵的組合爆炸(想想看如果把各種組合都對應到一個ctrl-alt快速鍵會有多少個..),並且讓使用者能完全使用鍵盤來精確、快速的編輯一個文件,一旦熟悉這種操作後,手都不用離開鍵盤,不管是寫程式或是寫文章都有了一種人機合一的流暢感,心中想到哪裡游標就能精確移動到哪裡,不管多複雜的文字操作都能快速解決,心中的爽快感其實是難以用筆墨形容的。一般編輯器依賴於滑鼠作為移動和選取的主要工具,其實不管在learnability、memorability、errors都優於vi的鍵盤設計,但最大缺點就是efficiency很低。原因之一是,要用滑鼠一隻手就得離開鍵盤,光是這個時間用鍵盤操作的人都已經做完了(用laptop的touch pad就是另一回事了);原因之二是,滑鼠移動是不精確的,要把游標對準某一點所花的時間遠比按下鍵盤上固定位置的按鍵來得長(請參閱之前關於Fitt’s Law的文章);原因之三是,即使是用鍵盤控制游標,也沒辦法針對不同單位大小做控制,所以常常會看到一般使用者按住方向鍵等游標慢慢移動到某個地方..。(註:一般文字編輯器有個小技巧,這裡順便告訴大家:Windows上按Ctrl+左/右可以以一個word為單位移動,Mac上是Alt+左/右。幾乎所有可以打字的地方都能用。)

身為一個靠打字(不管是寫程式或是寫論文)吃飯的人,文字編輯可以說是我在電腦上花最多時間的工作之一。我很幸運在國中就接觸到Linux,所以也就接觸到了vim(vi後來的延伸版,是目前最流行的vi版本),沒想到這一用就用了十年…。vim也是我從國中開始用的每一台電腦裡都必裝的軟體,即使學了數十種程式語言,從Windows、Linux換到Mac,我到現在都還是用vim寫程式、寫論文、寫報告..。甚至在command line (bash)下面,都可以設定成vi mode,接著就能用vi的快速鍵來編輯指令。寫程式如果沒有vim,我等於被打斷一條腿一樣(不誇張,每次被迫在IDE裡寫程式我都有種武功被廢了的感覺…)。雖然一開始學vi/vim的門檻較高,但我很高興一開始花了點時間去學它,後來就再也不用學新的editor或IDE,只靠這一招半式就能行遍天下,實在非常值得呀。


六月 2, 2009

hoamon's sandbox
hoamon
hoamon's sandbox is about »

tag cloud

» colorful source code in Latex(written in reStructed Text)

之前提到使用 Vim 的 plugin VST 來撰寫可自動轉換 latex 格式的簡單結構文章。VST 相當容易使用,不過在轉換程式碼到 pdf 格式時,它無法使用類似 2html 的技巧來讓程式碼變色。

所以我參考了 Listings Package 的語法,稍為修改了 VST 的程式碼(其實只是加上幾個宣告而已)。

 1 diff -r 56c0141f8add Configure/vim/plugin/vst-x.vim
 2 --- a/Configure/vim/plugin/vst-x.vim    Tue Jun 02 00:12:23 2009 +0800
 3 +++ b/Configure/vim/plugin/vst-x.vim    Tue Jun 02 00:14:07 2009 +0800
 4 @@ -4541,6 +4541,18 @@
 5                         \.'\usepackage{longtable}'."\n"
 6                         \.'\usepackage{tabularx}'."\n"
 7                         \.'\usepackage{amsmath}'."\n"
 8 +            \.'\usepackage{color}'."\n"
 9 +            \.'\usepackage{listings}'."\n"
10 +            \.'\definecolor{Brown}{cmyk}{0,0.81,1,0.60}'."\n"
11 +            \.'\definecolor{OliveGreen}{cmyk}{0.64,0,0.95,0.40}'."\n"
12 +            \.'\definecolor{CadetBlue}{cmyk}{0.62,0.57,0.23,0}'."\n"
13 +            \.'\lstloadlanguages{Python,PHP,Ruby,Bash,Perl}'."\n"
14 +            \.'\lstset{language=Python,frame=ltrb,framesep=5pt,basicstyle=\normalsize,'."\n"
15 +            \.' keywordstyle=\ttfamily\color{OliveGreen},'."\n"
16 +            \.' identifierstyle=\ttfamily\color{CadetBlue}\bfseries,'."\n"
17 +            \.' commentstyle=\color{Brown},numbers=left,backgroundcolor=\color{white},'."\n"
18 +            \.' stringstyle=\ttfamily,escapeinside=``,identifierstyle=}'."\n"
19 +            \."\n"
20                         \.countrysettings."\n"
21                         \.'\renewcommand\CJKglue{\hskip -0.3pt plus 0.08\baselineskip}'."\n"
22                         \.'\linespread{1.382}'."\n"

這樣就可以在 vim 中撰寫如下語法,來讓程式碼在 pdf 中變色了:

.. raw:: latex

\begin{lstlisting}
import sys
print sys.getdefaultencoding()
sys.path.append(".")
sys.path.append("/home/hoamon/`桌面`")
from hashlib import md5
from random import random
for i in xrange(10): print md5(str(i+random())).hexdigest()
def whatever(x): print x + 3
whatever(10) # 13
#`中文要作跳脫,使用符號為[數字鍵1]左邊的那一個 \\``
\end{lstlisting}

.. raw:: latex

\lstinputlisting{xxx.py}


下圖就是成果啦:

沒有網頁格式的那樣多采多姿,但聊勝於無呀!

五月 17, 2009

hoamon's sandbox
hoamon
hoamon's sandbox is about »

tag cloud

» reStructured Text + CJK Latex: footnote 破壞文句階層問題

之前考博士班時,曾把自己的履歷用 Latex 寫出來。但是這太麻煩了。文章結構不難,但要多打很多我記不起來的標準語句,雖然可用 vim 樣版解決,但寫 latex 版的文章機會實在是太少了,除了履歷、期刊論文外,一些 blog 文章、計劃書、說明檔都是用類 wiki 的語法寫下來的。所以會少了很多時間記住 latex 語法。

最近開始寫報告及論文了,重新把 CJK Latex 安裝回我的 Ubuntu ,並回顧(複習)之前的 Latex 語法,覺得十分生疏。也就研究一下 Linux 上如何把 rST 格式轉 latex 的技術。還滿簡單的。我是結合 vim 來作轉換的動作。

但是在一個使用 footnote 的地方,無論我怎麼設定,它(rST)在轉 latex 時,就是會跑掉。

我的文句如下:

    在歷史的不透明性中,我們只能把垃圾資料送進模式(不一定正確)中,並得到垃圾預測 [#]_ 。

.. [#] 既然從歷史資料,我們無法歸納準則,從而避免錯誤,達到以古為鏡,可以知興替。
那麼整個歷史學科還有存在的必要性嗎? 這一點,是我這個歷史門外漢的疑點。

最後在第四部中,說明幾個如何面對「未來不可預測」的方法,
像是儘可能地嘗試,別擔心小失敗。

轉成 pdf 後,發現「最後在第四部中…」這一句也會變成 footnote 中的文句。

而如果使用:
    在歷史的不透明性中,我們只能把垃圾資料送進模式(不一定正確)中,並得到垃圾預測 [#]_ 。

.. [#] 既然從歷史資料,我們無法歸納準則,從而避免錯誤,達到以古為鏡,可以知興替。
那麼整個歷史學科還有存在的必要性嗎? 這一點,是我這個歷史門外漢的疑點。

最後在第四部中,說明幾個如何面對「未來不可預測」的方法,
像是儘可能地嘗試,別擔心小失敗。

則「最後在…」的文句其階層不同於「在歷史的不透…」。

最後,我終於找到解法了,就是把 footnote 解釋文句放置於該段落的最後段,如此一來,它就不會破壞文句階層了。其最後結果如下:
    在歷史的不透明性中,我們只能把垃圾資料送進模式(不一定正確)中,並得到垃圾預測 [#]_ 。

最後在第四部中,說明幾個如何面對「未來不可預測」的方法,
像是儘可能地嘗試,別擔心小失敗。

.. [#] 既然從歷史資料,我們無法歸納準則,從而避免錯誤,達到以古為鏡,可以知興替。
那麼整個歷史學科還有存在的必要性嗎? 這一點,是我這個歷史門外漢的疑點。


嗯~這個排版問題,我花了二個小時。可見我多麼要求排版品質

三月 3, 2009

hoamon's sandbox
hoamon
hoamon's sandbox is about »

tag cloud

» 為什麼我用 Netbeans 作網頁程式開發平台

這都怪 NetBeansMercurial 整合的太好了。

原本我都是用 Gvim 來寫 Web-base 程式的,事實上,我的 Gvim 也調校的不錯,有 File Tab 、 Class/Function Navigator 、 Tab Complete ,而重要的是它還有 1G, G, yy, dd, cw, <ctrl>+f, <ctrl>+b, H, M, L...等。

不過,當我要比對修改後的程式時,單純只用 hg diff|colordiff|less 就顯得有點薄弱了。

而這時,我發現 NetBeans 編輯器可以整合 vi key-binding ,天呀! 這是多麼棒的一件事,之前我在試用 Eclipse 時,就覺得它的 vi key-binding 效果不是很好用,而且還要花錢買,讓我打消了轉換平台的欲望,但這個 NetBeans + vi 的功能就實實在在地滿足了我的需求。

更棒的是, NetBeans 整合版本控制的功能比 Eclipse 好。在 Eclipse 中,所謂的版本控制只不過是把我在 shell 裡用的指令,放進它的 menu 中而已。但 NetBeans 卻可以讓你在 Editor 中,實際看到程式差異並選擇回復。而在設定方面, Eclipse 的 menu/option/perspective 實在太多了, 常常讓我搞不懂,這玩意到底要到那去找。

令人驚奇的是 NetBeans 還結合了 jdbc 的功能讓我可以把它當作是 Mysql/PostgreSQL 客戶端介面使用。這也一併讓我省了設定 phpMyAdmin 的功夫。 NetBeans 真的作到了 One Stop Shopping 。

在安裝上, NetBeans 6.5 也比 Eclipse 3.X 來得簡單, Python, Mercurial 它已內建,我只去了 http://jvi.sourceforge.net/ 下載 vi plugin 。況且,之前我在安裝 Eclipse 時,有些機器會遇到裝不起來的情況,這也讓我頭痛呀~ 害我先將安裝成功好的 Eclise 打包起來,然後看誰需要,就整個給他。

只是使用 NetBeans 我得付出一個代價, NetBeans Editor 的反應略比 Gvim 慢一點,雖不致造成我的困惱,但就是感覺得到。我想這也是沒辦法地,因為 NetBeans/Eclipse 之類的 IDE 平台還得即時看你輸入的單字去找它相關的說明,以及檢驗文法是否錯誤。

十二月 27, 2008
» Vim 7.2 on Ubuntu 8.10 & Arpeggio

It's a good time to have Vim 7.2 on Ubuntu 8.10 (Intrepid Ibex) now. To make it, we need to borrow something jaunty (and never give back).

  1. Vim, sure. But which? vim-gnome, vim-gtk, or vim-nox? It's not of my business to make this choice.
  2. Whatever, you will need vim-common, vim-runtime. If you want to go with GUI, don't forget your vim-gui-common.
  3. You may want to keep it easy, so keep your Intrepid Vim first. Install jaunty vim-common or vim-gui-common for GUI, then remove those old Vim packages. On my computer, they are:
    vim 1:7.1.314-3ubuntu3
    vim-common 1:7.1.314-3ubuntu3
    vim-gtk 1:7.1.314-3ubuntu3
    vim-gui-common 1:7.1.314-3ubuntu3
    vim-python 1:7.1.314-3ubuntu3
    vim-runtime 1:7.1.314-3ubuntu3
    vim-tiny 1:7.1.314-3ubuntu3
  4. And install new packages, for me:
    (After install vim-gui-common 2:7.2.025-2ubuntu1)
    vim-common 2:7.2.025-2ubuntu1
    vim-gtk 2:7.2.025-2ubuntu1
    vim-runtime
Hurray! We're done. Vim 7.2... but WHY? What for? How, When, Where?
Okay, okay, let's take something for fun.

But not much, I only come up with this: arpeggio, created by Kana Natsuno. This plugin can let you define another type of key-mapping, consists of 2 or more keys by simultaneously pressing them. The usage:

call arpeggio#map('i', '', 0, 'jk', '<esc>')
call arpeggio#map('i', '', 0, 'j<space>', '<esc>')

What is the difference with

inoremap jk <esc>
inoremap j<space> <esc>
?
Good question, or you already know that. In some bad daya you just want to key in 'jk' or 'j ' string but it <Esc><ESc><ESC>!!! God bless us, it doesn't have mercy at all. Nice trick, thanks Kana.

But I also found that it's not easy to press simultaneously on the kerboard, at least for me. So it does let you tweak a bit:

let g:arpeggio_timeoutlens = {'j':400, 'k':200, 'q':100}

You can have different definition of how long does it "simultaneously" in milliseconds. Then you don't need to get <esc> with 4 cups of coffee in order to press two keys.

Have fun!

三月 4, 2008
» highlight GTK+ APIs in vim

找到一個方便的套件,順便抱怨一下在 debian 遇到的怪異相依性問題

» highlight GTK+ APIs in vim

找到一個方便的套件,順便抱怨一下在 debian 遇到的怪異相依性問題 這兩天在 apt 上亂找軟體,發現一個叫 vim-syntax-gtk,看起來應該是 vim 的 syntax file,不過要安裝時發現牽扯了一堆莫名其妙的相依性 ~# apt-get install vim-syntax-gtk Reading package lists… Done Building dependency tree Reading state information… Done The following packages were automatically installed and are no longer required:  python2.5 python2.5-minimal Use ‘apt-get autoremove’ to remove them. The following extra packages will be installed:  libruby1.8 ruby ruby1.8 vim-addon-manager Suggested packages:  rdoc1.8 ri1.8 ruby1.8-examples The following NEW packages will be installed:  libruby1.8 [...]

二月 16, 2008

hoamon's sandbox
hoamon
hoamon's sandbox is about »

tag cloud

» firefox add-ons: 「It's All Text!」

在網頁上留言,寫到一半時,電腦當了,你會不會覺得很 X 。

請使用 Firefox 擴充套件: It's All Text!

它讓你在編寫 <textarea> 輸入框時,可以另外叫出你偏愛的文字編輯器,然後在存檔時,它可以同步回原本的輸入框。

這麼作,有兩個好處:

  1. 是使用順手的編輯器寫文件,像我實在超喜歡用 VIM 的,我就可以在任何網站寫文章時,還是使用 VIM 。
  2. 是當你存檔時,它可以在你的個人電腦上存一個備份,這樣,就算你打字到一半,電腦當了,你所打的文字都還會在個人的硬碟裡。
下圖紅線所劃即是文章內容存在我電腦裡的位置。

一月 9, 2008
» Vim的多行編輯

之前看TextMate的Demo影片,發現TextMate能同時對多行做修改(例如,在連續十行的開頭結尾都加上<li>和</li> tag),就一直在想vim能不能做到這樣。

一直以來我在vim中都是用V把要修改的範圍選出來,再用s///搭配regular experssion做取代。這方法彈性很高,但大多時候是殺雞用牛刀,太麻煩了。

還好剛發現一個vim tip裡寫到一個簡便的新方法。簡單來說,用ctrl-v做blockwise的visual selection時,按下大寫I,就能對所選範圍同時插入一樣的文字;而按大寫A,則是在所選範圍後同時append同樣的文字。

一月 2, 2008
» 在TextMate中使用Vi的按鍵配置

之前寫過一篇介紹Vim snippetsEmu文章有提到TextMate雖然很好,但如果不能支援vi的按鍵配置方式(key binding),像我這種依賴vim為生的人就不可能跳槽過去。

沒想到當初隨便說說的怨念,還真的有人把它做出來了。

這東西叫ViMate(這名字真不錯),是一個TextMate plugin。下載回來點兩下就會自己裝到TextMate裡。打開TextMate後,外觀看不出有什麼不同,但很快就發現還要按一下i才能開始打字,按ESC游標會變成綠色代表進入command mode…。

雖然這個plugin還在開發中,不是所有vi命令都支援,但也提供vi fans一個想玩TextMate的好機會啦。

, ,

九月 6, 2007
» Using Vim as a syntax-highlight pager

最近在 Debug 程式時總覺得之前弄出來的 output highlighter 不太夠用,雖然可以很方便標出一些關鍵字,但規則一多就得串一大堆,效率不彰。不曉得腦筋怎麼轉的,突然想到 Vim 應該可以好好利用一下… 拜了一下 google 大神果然查到 Vim 有提供 pager 的功能: Tip #121: Using vim as a syntax-highlighting pager Using vim as a syntax-highlighting pager 我把 less.sh 複製到 ~/bin/vimless 來用。接下來就是自己改一個 syntax file 來用。我直接拿 vim 內附的來改,一般會放在 <VIM>/syntax 這個目錄底下,抓一個來放在 ~/.vim/syntax 中就可以動手改了。最重要的是程式一開始要輸出 vim modline,例如: # vim: ft=l3hdebug 這樣丟給 vim 時可以自動啟用正確的 syntax highlight rule。只要程式的 debug message 格式變化不要太複雜,基本上都可以應付。應該可以再配合 colorscheme 來設定顏色,基本上也是參考一下 <VIM>/colors 目錄底下的檔案來改就好。 接下來只要把程式的輸出重導給 [...]

» Using Vim as a syntax-highlight pager

最近在 Debug 程式時總覺得之前弄出來的 output highlighter 不太夠用,雖然可以很方便標出一些關鍵字,但規則一多就得串一大堆,效率不彰。不曉得腦筋怎麼轉的,突然想到 Vim 應該可以好好利用一下…

十二月 20, 2006
» Some Tips about iTerm

紀錄一些 iTerm 的密辛。

  • 在 iTerm 中,正確的顯示中文檔案、目錄等。
    1. 將 iTerm 編碼設定為『UTF-8』編碼。
    2. alias ls=”ls -Gv”
  • 在 iTerm 中,可以輸入中文。
    1. vi .inputrc
    2. set convert-meta off
      set meta-flag on
      set output-meta on
  • 在 Vim 中,打 Unicode 編碼的中文。
    1. vi .vimrc
    2. set enc=utf8
  • 延續上一個,但更酷的。
    1. vi .vimrc
    2. set fileencodings=utf-8,big5
      set encoding=utf8
      set tenc=utf8

參考資料:
http://riemann.math.nccu.edu.tw/forum/viewtopic.php?t=78
http://riemann.math.nccu.edu.tw/forum/viewtopic.php?t=220

七月 17, 2006
» Vi command Quick-Note

vi 是一個歷久彌新的編輯器,也是目前在 Unix-like 系統上
最泛用的一套編輯器,幾乎大部份的 Unix-like 系統上,你
都可以看到 vi 編輯器的存在,因此學好 vi 編輯器是一件
很重要的事!

當然啦!在 Unix-like 系統中,編輯器並不是只有 vi 一套而
已,與 vi 相互抗衡的另一套強大編輯器叫做 Emacs,雖然
在這裡介紹的是 vi 編輯器,不過小弟在此建議大家,多學
一套編輯器有利無害,因為你總不能保證每台機器上都一定
要有 vi 吧!:P

vi 的用法深可深到一本書以上的容量,如果需要更詳盡的使
用方法,在這分文件中也有提供 Url 連結給大家參考。

下面是小弟快速的 command 筆記,我把自己使用 vi 以來
認為一些最適合初學者使用的 command 與用法記錄下來
,建議初學的朋友們,只要先把小弟列的那些基礎用法記
熟,就很受用無窮囉!

—Vi Quick-Note (2006.10.18)

biggo.com.tw

A Django site.