TextMate介绍[通俗易懂]
Mac 平臺非常著名的文本/代碼編輯器 TextMate 宣布開源,源代碼 已經托管到 GitHub 網站 ,同時公布了完整的編譯方法。
https://github.com/textmate/textmate
TextMate是Mac下的著名的文本編輯器軟件,與BBedit一起并稱蘋果機上的emacs和vim。尤其適合程序員使用,可以定制許多貼心使用的功能。 TextMate的Bundles是TextMate的一個亮點,可以有效的提高開發速度。 TextMate 好在哪里: 1. 首創Snippets代碼自動生成功能。相信很多人用TextMate是為了這個功能,它真的非常好用。當時幾乎所有的IDE都是讓你填寫一大堆對話畫 框,然后自動生成一個文件或者代碼,繁瑣而靈活性不佳。而在TextMate僅僅靠一系列Snippets,就可以將預設好的縮寫詞擴展成類、函數和分支 循環結構,并且可以靠tab逐次的修改自定義的部位; 2. 首創Plugin bundle的分發和管理機制,并且形成了一定規模的社區。TextMate的插件安裝非常簡單,而且隨裝隨用,隨時刪除。當時很多軟件的插件都要自己拷貝so文件到制定目錄,vim需要在.vim/目錄下去解壓插件包或者手工復制vim。 3. 定義了lexical scope,使得所有Snippets,命令和宏的域都不是針對整個文件/項目的。這個設計使得不同類型的文件、甚至文件中不同的位置都可以共享相同的快捷鍵,行為卻是完全不同的。這一設計使得需要記住的快捷鍵命令大大減少,但是威力確依然不減; 4. 自動化編輯器里 Discoverbility做得最好的。TextMate常常被用來和Vim、eMacs相比,具備不輸后兩者鍵盤操作,相差不遠的可擴展性。但是她的 學習曲線卻驚人的平滑。這得意于她所有的快捷鍵都可以找到對應的菜單操作。新手翻幾次菜單后,就可以記住常規的快捷鍵,而因為第3點的緣故,用戶可以用這 些快捷鍵在不同的文件類型中去嘗試,可以獲得不太超出預料的結果; 5. 善用腳本。 可能因為TextMate的作者之前是eMacs用戶,因此對于調用腳本的支持完善得很好,事實上,大部分TextMate命令都會調用外部腳本來實現某 些功能。而且腳本可以是python、ruby、shell、perl等任何unix下能運行的腳本。此外TextMate還不強迫用戶學會這些腳本語 言,你可以作為bundle用戶,可以寫腳本開發bundle。 當然,TextMate也有很多不足,加上作者在醞釀TM2,而不是快速迭代這一版本,導致演化過慢,很多功能都被其他編輯器模仿過去了。我覺得TM有以下幾點不足或者不再有優勢的地方: 0. 寬字符支持度很低,永遠的痛! 1. Snippets已經被Vim、eMacs、NotePad++等一大堆編輯器所吸收; 2. bundle連vim都可以通過pathogen模仿; 3. 補全功能太弱; 4. 臨時性的管道輸入輸出,需要經過一個對話框,遠不如vim方便; 5. tab標簽式多文件,文件一多導航不佳,不支持屏幕分割;尤其是文件切換避免不了鼠標操作,無法和Vim/eMacs的純鍵盤操作媲美; 6. 文本查找對話框,現在連瀏覽器都不用了,也不如vim下的/方便。查找到的多個結果依賴鼠標訪問,不像vim有quickfix和快捷鍵; 7. 遠程編輯文件太弱了。
TextMate 小小心得轉自http://www.cnblogs.com/heiniuhaha/archive/2011/12/01/2270470.html
在Vim、Emacs之間糾結了很久之后,卻選擇了TextMate
P.S.為何Emacs和Vim被稱為兩大神器
中文的資料不是很多,一狠心,找了James Edward Gray II的TextMate:Power Editing for the Mac來看。
對于文本編輯器這個話題,我一直充滿了疑問:是什么魔力讓人們如此追逐文本編輯器的力量?作為一個2004年才出道的毛頭小伙,TextMate憑 什么與Vim, Emacs這些前輩同臺競技,又有什么資格被稱為”The Missing Editor for Mac OS X”?
其實,我對這些編輯器一直沒什么好感,一堆快捷鍵,好好的上下左右不用,非得用什么HJKL……我學習的動機主要是好奇。
令我驚訝的是James居然也是從窗口講起,還以為會先講講TextMate的設計哲學呢。
編輯窗口左側可以(注意是:可以)顯示行號、代碼折疊、書簽等。下方是當前光標的位置信息,文本格式等,按^可以調出Bundles。
敲字也瘋狂
敲字的三重境界:
- 敲A得A,敲B得B;
- 敲一個,得一雙;
- 只敲關鍵的,剩下的讓編輯器做去吧。
文藝一下^_^
以前總聽說TextMate支持多標簽,可我怎么也找不到,原來必須先建個項目,項目里面的文件就能以標簽形式顯現了。
標簽間的切換,以及TextMate最夢幻的一個功能——智能查找(T 調出Go to File 窗口,如果你想找pitches_controller_test.rb,只需輸入pct,回車,就是你了)。它還有個兄弟Go to Symbol (?? T)
TextMate提供的文本操作也很簡單,無非是移動、選中和智能變換。
移動,記住上下左右就夠了。不過,TextMate牛就牛在做移動,人家都能做出花來,比如,像CamelCaseWords這樣連在一起,但是用大寫字母分開的詞,用^ ←/ ^ →居然可以一個詞一個詞的跳躍。
以前在Windows的記事本里發現一個很貼心的設計:按住alt就可以列選。其實,TextMate也可以,按住?就行。
接下來是TextMate的有一個賣點:自動補全(按,就是esc鍵啦)。
當然,支持正則查找的? F 更有用一些。
自動補全
TextMate的Bundles就像語言里的庫一樣,為不同需求的用戶帶來一站式的舒適(我剛下了一個Mathematica的Bundle, 雖然有些問題,還是挺強大的)。在我看來,bundle就是為某種需求定制的一個庫,約定好我敲個什么字,按個什么鍵,你就把它補全,比如:輸入一個 HTML標簽div,按住? <(學名叫神馬Insert Open/Close Tag (With Current Word)),TextMate就會幫你補全為<div></div>。
除了bundle之外,TextMate還提供了snippet, macros, command等工具。
Bundle
以Ruby Bundle 為例:
- 運行腳本: ? R
- 在注釋中標注結果:先在需要計算的行后敲入 #?,#號會補全為# =>,然后???E,這時所有行尾標有# => 的行都會自動計算結果。
’ Markers”>
- 除了上面提到的#?,還有cla?, mod?, def?, defs?, deft?, r?, w?, rw?, if?, case?, while?, 以及關于迭代的snippet,inj?, tim?, ea?, sorb?, eawi?……
- 為單元測試提供了tc?, ts?, as?, asid?
- 用?H 查看Ruby的內置文檔
- ……
Snippet
Snippet,顧名思義就是 一段小程序,就像平時看到好文章做的摘抄。一般由快捷鍵觸發,書上是這么說的“This simple association of a trigger and a response is exactly what TextMate’s snippets are.”
你可以用??? B 來打開:
現在只要敲AP? 就會自動展開為Armystrong Pope
snippet有兩個字符不代表其字面本身:$和`,你可以用/$和/` 來表示。除了字串展開,TextMate還 可以制定?跳轉的位置。還記得填表的時候,按一下? 就會自動調到下一個表格里么?這種技術在這就叫tab stop,從$1開始(是的,從1開始,$0結束),在需要跳轉的地方依次寫上$2, $3, …, $n。如果不加tab stop,則默認光標停在sinppet的最后一個字符后。另外,還可以指定缺省值,像這樣:
view plain
print
?
- <div${1:id=“${2:some_id}”}>
- $0
- </div>
這樣,一開始會選中“id=”some_id””,按下? 之后,光標會圈住“some_id”。
如果僅僅是這些,TextMate就不會這么出名了。很多語言因為追求嚴謹,要求在作用域的開頭和結尾都標明名字,比如TeX里面
view plain
print
?
- /begin{content}
- /end{content}
這時你就可以使用鏡像,在begin{}里面輸入的內容會在end{}里面同步出現??粗?n眼熟吧,感覺就像變量,實際上它就是變量。在需要的地方引用它就可以實現鏡像:
view plain
print
?
- /begin{$1}
- $0
- /end{$1}
更進一步,有些時候需要鏡像的內容做一點點變換,比如首字母大寫啦……。當當當,正則表達式出場!是的,你可以用正則表達式對tab stop 做變換。首字母大寫是吧,簡單:
view plain
print
?
- begin${1:foo}
- //blabla…
- end${1/.//u$0/}
例子有欠妥當。注意/u$0 的$0 是正則表達式里的$0,指代整個被匹配的字串;/u是說下一個字符大寫(這可是標準的正則表達式用法),因為作用在整句前,就變成了首字母大寫。
還記得前面說snippet中有兩個特殊字符$ 和` 嗎?$用來引用變量,而` 通常用來插入shell代碼:
view plain
print
?
- <ahref=“`echohttp://example.com/`”></a>
從如何改造TextMate你才能體會到它提供的這些定制機制是多么簡潔、貼心。
Macros
TextMate里的宏更像是M$ Office里的宏:開始記錄(?? M),小紅燈閃,記錄,停止記錄(?? M),打完收工。
Command
這里的command有些歧義,一是指Shell Commands,一是指TextMate里面一種自動補全的機制。
先說第一種,shell 命令。你可以在TextMate里敲一段腳本,然后? R,TextMate會把運行結果用管道傳送過來。
而TextMate中的command通常會調用shell 命令。相比snippet, macros, 它可以以更復雜的邏輯來完成自動補全。
總結
以上是生活随笔為你收集整理的TextMate介绍[通俗易懂]的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: QuickSkin简单学习--控制结构
- 下一篇: 我的SharpDevelop插件之一:知