zoukankan      html  css  js  c++  java
  • TextMate介绍

    Mac 平台非常著名的文本/代码编辑器 TextMate 宣布开源,源代码 已经托管到 GitHub 网站 ,同时公布了完整的编译方法。

    https://github.com/textmate/textmate

    TextMateMac下的著名的文本编辑器软件,与BBedit一起并称苹果机上的emacsvim。尤其适合程序员使用,可以定制许多贴心使用的功能。   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来看。

    TextMate

    对于文本编辑器这个话题,我一直充满了疑问:是什么魔力让人们如此追逐文本编辑器的力量?作为一个2004年才出道的毛头小伙,TextMate凭 什么与Vim, Emacs这些前辈同台竞技,又有什么资格被称为"The Missing Editor for Mac OS X"?

    其实,我对这些编辑器一直没什么好感,一堆快捷键,好好的上下左右不用,非得用什么HJKL……我学习的动机主要是好奇。

    令我惊讶的是James居然也是从窗口讲起,还以为会先讲讲TextMate的设计哲学呢。

    the editing window

    编辑窗口左侧可以(注意是:可以)显示行号、代码折叠、书签等。下方是当前光标的位置信息,文本格式等,按^  可以调出Bundles。

    edit敲字也疯狂

    敲字的三重境界:

    • 敲A得A,敲B得B;
    • 敲一个,得一双;
    • 只敲关键的,剩下的让编辑器做去吧。

    文艺一下^_^

    以前总听说TextMate支持多标签,可我怎么也找不到,原来必须先建个项目,项目里面的文件就能以标签形式显现了。

    Project Drawer

    标签间的切换,以及TextMate最梦幻的一个功能——智能查找( T 调出Go to File 窗口,如果你想找pitches_controller_test.rb,只需输入pct,回车,就是你了)。它还有个兄弟Go to Symbol (⇧⌘ T)

    Navigation

    TextMate提供的文本操作也很简单,无非是移动、选中和智能变换。

    移动,记住上下左右就够了。不过,TextMate牛就牛在做移动,人家都能做出花来,比如,像CamelCaseWords这样连在一起,但是用大写字母分开的词,用^ ←/ ^ →居然可以一个词一个词的跳跃。

    以前在Windows的记事本里发现一个很贴心的设计:按住alt就可以列选。其实,TextMate也可以,按住⌥就行。

    接下来是TextMate的有一个卖点:自动补全(按,就是esc键啦)。

    Scanning

    当然,支持正则查找的⌘ F 更有用一些。

    automation自动补全

    TextMate的Bundles就像语言里的库一样,为不同需求的用户带来一站式的舒适(我刚下了一个Mathematica的Bundle, 虽然有些问题,还是挺强大的)。在我看来,bundle就是为某种需求定制的一个库,约定好我敲个什么字,按个什么键,你就把它补全,比如:输入一个 HTML标签div,按住⌃ <(学名叫神马Insert Open/Close Tag (With Current Word)),TextMate就会帮你补全为<div></div>。

    除了bundle之外,TextMate还提供了snippet, macros, command等工具。

    bundleBundle

    以Ruby Bundle 为例:

    • 运行脚本: ⌘ R
    • 在注释中标注结果:先在需要计算的行后敲入 #⇥,#号会补全为# =>,然后⌃⇧⌘E,这时所有行尾标有# => 的行都会自动计算结果。

    Execute and Update ‘# =>’ Markers

    •  除了上面提到的#⇥,还有cla⇥, mod⇥, def⇥, defs⇥, deft⇥, r⇥, w⇥, rw⇥, if⇥, case⇥, while⇥, 以及关于迭代的snippet,inj⇥, tim⇥, ea⇥, sorb⇥, eawi⇥……
    • 为单元测试提供了tc⇥, ts⇥, as⇥, asid⇥
    • 用⌃H 查看Ruby的内置文档
    • ……

    snippetSnippet

    Snippet,顾名思义就是 一段小程序,就像平时看到好文章做的摘抄。一般由快捷键触发,书上是这么说的“This simple association of a trigger and a response is exactly what TextMate’s snippets are.”

    你可以用⌃⌥⌘ B 来打开:

    Bundle Editor

    现在只要敲AP⇥ 就会自动展开为Armystrong Popesmile

    snippet有两个字符不代表其字面本身:$和`,你可以用/$和/` 来表示。除了字串展开,TextMate还 可以制定⇥跳转的位置。还记得填表的时候,按一下⇥ 就会自动调到下一个表格里么?这种技术在这就叫tab stop,从$1开始(是的,从1开始,$0结束),在需要跳转的地方依次写上$2, $3, ..., $n。如果不加tab stop,则默认光标停在sinppet的最后一个字符后。另外,还可以指定缺省值,像这样:

    1. <div${1: id="${2:some_id}"}>  
    2.     $0  
    3. </div>  

    这样,一开始会选中“id="some_id"”,按下⇥ 之后,光标会圈住“some_id”。

    如果仅仅是这些,TextMate就不会这么出名了。很多语言因为追求严谨,要求在作用域的开头和结尾都标明名字,比如TeX里面

    1. /begin{content}  
    2. /end{content}  

    这时你就可以使用镜像,在begin{}里面输入的内容会在end{}里面同步出现。看着$n眼熟吧,感觉就像变量,实际上它就是变量。在需要的地方引用它就可以实现镜像:

    1. /begin{$1}  
    2.     $0  
    3. /end{$1}  

    更进一步,有些时候需要镜像的内容做一点点变换,比如首字母大写啦……。当当当,正则表达式出场!是的,你可以用正则表达式对tab stop 做变换。首字母大写是吧,简单:

    1. begin ${1:foo}  
    2.     // bla bla ...  
    3. end ${1/.//u$0/}  

    例子有欠妥当。注意/u$0 的$0 是正则表达式里的$0,指代整个被匹配的字串;/u是说下一个字符大写(这可是标准的正则表达式用法),因为作用在整句前,就变成了首字母大写。

    还记得前面说snippet中有两个特殊字符$ 和` 吗?$用来引用变量,而` 通常用来插入shell代码:

    1. <a href="` echo http://example.com/ `"></a>  

    从如何改造TextMate你才能体会到它提供的这些定制机制是多么简洁、贴心。

    macrosMacros

    TextMate里的宏更像是M$ Office里的宏:开始记录(⌥⌘ M),小红灯闪,记录,停止记录(⌥⌘ M),打完收工。

    commandCommand

    这里的command有些歧义,一是指Shell Commands,一是指TextMate里面一种自动补全的机制。

    先说第一种,shell 命令。你可以在TextMate里敲一段脚本,然后⌃ R,TextMate会把运行结果用管道传送过来。

    TextMate中的command通常会调用shell 命令。相比snippet, macros, 它可以以更复杂的逻辑来完成自动补全。

    command key

  • 相关阅读:
    Verilog非阻塞赋值的仿真/综合问题 (Nonblocking Assignments in Verilog Synthesis)上
    异步FIFO结构及FPGA设计 跨时钟域设计
    FPGA管脚分配需要考虑的因素
    An Introduction to Delta Sigma Converters (DeltaSigma转换器 上篇)
    An Introduction to Delta Sigma Converters (DeltaSigma转换器 下篇)
    中国通信简史 (下)
    谈谈德国大学的电子专业
    中国通信简史 (上)
    Verilog学习笔记
    Verilog非阻塞赋值的仿真/综合问题(Nonblocking Assignments in Verilog Synthesis) 下
  • 原文地址:https://www.cnblogs.com/jiangshiyong/p/2639352.html
Copyright © 2011-2022 走看看