十 27
2008年十月27日,星期一,上午 4:04 | 分类:
default,
TextMate |
给我留言 |
你可能常常需要把文字移动到不同的地方,Text -> Move Selection为你提供如下功能: Ctrl+Apple+上 向上移动一行(如果没有选择任何文本则移动当前行) Ctrl+Apple+下 向下移动一行(如果没有选择任何文本则移动当前行) Ctrl+Apple+左 移动当前所选文字向左一个字符 Ctrl+Apple+右 移动当前所选文字向右一个字符 TextMate的 Text 菜单也可以让读者很容易的进行文本缩进: Apple+[ 或者 Option + Tab 减少缩进(如果没有选择任何文本则减少当前行的缩进) Apple+] 或者 Option + Shift + Tab 增加缩进(如果没有选择任何文本则增加当前行的缩进) Option+Apple+[ 根据目前编辑文档的语言类型自动格式化缩进
(阅读更多精彩内容...)
十 27
2008年十月27日,星期一,上午 4:04 | 分类:
default,
TextMate |
给我留言 |
TextMate有两个功能在你输入文档的时候会给你提供很大的帮助。当然它们也很常见,单词补完和符号自动配对。 我只需要教你一个键,就可以让单词补完帮你节省大量时间。每当你要更改文档内容的时候,输入几个开头字母,然后按ESC键。TextMate可以自动用其开头的变量,方法,标签或者其他文档中已经存在的单词来自动补完。此外,语法检查器为每种语言都提供了一套默认的自动补完。这对程序员来说是一个非常重要的功能,它可以避免很多打字错误。 如果有多个相关单词供你选择,你只需要多次按ESC就可以在它们之间移动选择。TextMate会根据你本次的选择自动为你排序出现相关词语的顺序,以便为你今后的操作节省更多时间。如果不小心多按了一下ESC,那么可以按Shift+ESC选择前一个。 例如你在编写一些服务端的程序。首先你要敲入一个很长的变量名字 idle_connections 。以后你可是按 idl 然后按ESC来迅速补完这个变量名。根据你文档中以这3个字母开头单词的数量,有时候你可能得多按1,2次ESC键。不过别忘了,TextMate会记录你选择每个单词的次数来帮你排序。这会确保你不会因为手得瑟一下,输入错误的变量名。不单单是编程相关的这些变量,任何你文档中出现的又长又难拼写的单词你都可以这样补完。 你可以在Edit -> Completion下找到这个自动补完的命令,这或许是你最重要的键盘快捷键。相信我,除了担心它可能磨损你的ESC键之外,你真的没理由不常常使用它! 如果你已经开始使用TextMate有段时间了,你可能早就不自觉的用上了符号自动配对功能。大多数情况下,你输入一个左括号(,TextMate会自动给你补上一个右括号)。并且把你的光标定位在括号之间。当你输入完其中的内容后,你手动输入一个右括号),光标会自动跳出到括号之外。这个功能在大部分符号自动配对功能中都可以使用,包括引号。每种语言都有一些自己特殊的符号配对,例如在CSS中,你输入一个冒号: 会自动给你在其后增加一个分号; 符号自动配对功能的另一个优点它结合文字选择区域。当你选取了一部分文字之后,如果你输入一个可以配对的符号,那么符号的开始符会自动插入到文字之前,而符号的结尾符会插入到文字后面。如下图,相信你会喜欢上这个功能。
(阅读更多精彩内容...)
十 25
2008年十月25日,星期六,下午 3:03 | 分类:
default,
TextMate |
给我留言 |
在传统的选择器基础上,TextMate允许你使用直角选择器或者列选择器。在你拖动鼠标进行选择的时候,可以按住Option键,这样就启用了直角选择器。也可以使用 Edit -> Change to Column Selection或者Option切换是否使用列选择器。 下面的例子告诉你如何快速的产生一个名字列表: 创建一个新的TextMate文档 File -> New 快捷键Apple+N 输入一些 first names,每一个单独占一行。 Jim,Marsha, James, Dana, Andrew。 Apple+上 移动光标到文档的开头 Shift+Option+下 选取到列结尾的全部文档。这个快捷键看起来好像没有选取整个列文档,但是由于你的倒数第二行有一个换行符。事实上列选择器已经扩展到最后一行的开头了。下一步会让这一切更清晰。 按Option打开列选择器,仔细看你所有选取的列前面都有一列细线,大概1像素,这回知道了吧上一步已经选取了整个列。 输入 last name 例如 Gray,随后跟一个逗号和空格。你会发现刚才选取的所有行同时都增加了。 移动光标到新的一行,离开列选择器模式。 令人惊讶的,当使用软包围行的时候列选择器会起冲突。和其它的编辑器不同,TextMate支持打开列选择器View -> Soft Wrap (Option+Apple+W)。然而,列选择器不会把包含的内容当作新行。勾选上View -> Gutter -> Soft Wrap Indicators 之后你可以通过编辑器窗口左边的原点看到哪一行被包含了。 (这一段翻译的不好,我自己也迷糊回头好好研究一下这个用法会修改)。
(阅读更多精彩内容...)
十 25
2008年十月25日,星期六,上午 11:11 | 分类:
default,
TextMate |
给我留言 |
编辑文本的第一部是选择它,选择一些文本之后你可以通过命令移动它,在搜索其中的代码或者干脆过滤删除掉它。这也是为什么TextMate尽可能简单的让你选择任意数量的文本的原因。 首先俺要告诉你一个好消息,前几章里面讲的移动光标的快捷键在选择文本这里一样可以用哦。注意上文介绍的来自于Emacs的那些快捷键不能跟Shift共用。按住Shift键然后再利用移动光标的快捷键。根据光标位置的不同你就可以选取,扩大所选或者撤销所选的文本。下面举个例子 按 Apple+右 把光标移动到行的末尾。 按 Shift+Apple+左 选取从行末尾至行开头的全部文本。 如果对你来说这一操作需要2步还太麻烦的话。你可以用自定义快捷键或者宏命令来简化。如果可能我会继续翻译那部分。不过那是很遥远很遥远的事啦。还好TextMate内置了这样一条命令,Shift+Apple+L可以选取当前行的文本。另外我个人介绍一个快捷键,Ctrl+W可以选择光标所在的单词。 TextMate有一个唯一的内置选择器Current Scop,快捷键是Ctrl+Option+B。它根据当前文档的语法检查来改变选择范围。你可以使用这个快捷键来选择编程语言特有的元素。例如你可以像下图一样(说实话我很少用这个快捷键)。 你可以在Edit -> Select下面找到全部内置的选择器。花点时间在这里,下次当你选择文本的时候你就知道你该用哪个快捷键了。
(阅读更多精彩内容...)
十 25
2008年十月25日,星期六,上午 10:10 | 分类:
default,
TextMate |
给我留言 |
当你移动光标的时候,折叠代码片段不是必须的技术。但是如果你要在文档中跳过大段不需要的代码,或许他还是有用滴。 当你用TextMate编辑一个它能理解的结构文档的时候,编辑窗口的左侧应该有一个折叠标记栏。使用View -> Gutter -> Foldings确认它已经显示出来。 你可以单击折叠符号来选择展开或者折叠代码。也可以使用F1键来进行这一操作,F1会折叠目前光标所在一行的最接近的可折叠代码。如果你进行了这一操作,TextMate会把该代码片段折叠为一行,后面用省略号结尾。而且编辑窗口左侧的折叠符号也会相应的变化。 如果你需要瞄一眼折叠了哪些代码,只需要把鼠标移动到省略号的位置就可以看到了。如下图。点一下省略号,或者把光标移动到折叠代码的这一行并且按F1,就可以展开代码。 你可以使用View -> Toggle Foldings at Level或者快捷键来完成大部分的折叠和展开功能。根据文档类型,通常建议你用Option+Apple+2或者Option+Apple+3来折叠代码,尤其当你编辑的是Rails Controller的时候,这个快捷键尤其好用。根据文档嵌套层次的不同,你也可以使用其他数字键来配合使用。
(阅读更多精彩内容...)
十 24
2008年十月24日,星期五,下午 3:03 | 分类:
Advanced Rails,
default |
给我留言 |
Ruby中的一个强大的特性是有能力将一段代码当作一个对象来处理。这个特性涉及到如下三个类: Proc 一个过程(Proc)代表了一个代码块:一段可以在被调用时接收参数并且有返回值的代码。 UnboundMethod 它类似于一个过程:它代表一个特定类的实例方法(类方法是类对象的实例方法,因此UnboundMethods同样也可以代表类方法)。一个UnboundMethod 能够在其被调用前必须绑定到一个类。 Method Method对象是已经通过UnboundMethod#bind方法绑定到一个对象上的UnboundMethod。它也可以通过Object@method方法来得到。 下面让我们来看看都有哪些途径能够获得Proc和Method对象。我们在例子中使用Fixnum#+方法。我们通常通过二元形式来调用它。 3 + 5 # => 8 然而,它也可以被当作Fixnum对象的一个实例方法来调用,就像任意其它实例方法一样: 3.+(5) # => 8 我们可以使用Object#method方法来获得一个表示这个实例方法的对象。这个方法将被绑定到方法被调用的那个对象上,在上面的例子中就是3。 add_3 = 3.method(:+) add_3 # => #<Method: Fixnum#+> 此方法可被转换为一个块,或者可被直接带参数调用: add_3.to_proc # => #<Proc:0x00024b08@-:6> add_3.call(5) # => 8 # Method#[] is a handy synonym for Method#call. add_3[5] # => 8 有两种途径获得非绑定方法。可以在类对象上调用instance_method: add_unbound = Fixnum.instance_method(:+) add_unbound [...]
(阅读更多精彩内容...)
十 24
2008年十月24日,星期五,下午 2:02 | 分类:
Advanced Rails,
default |
给我留言 |
在Ruby中有四种类型的变量,它们是全局变量、类变量、实例变量及局部变量。全局变量作用于全局,局部变量只作用于局部,因此下面的讨论均不涉及它们,因为它们不与Ruby的类系统进行交互。 注:还有常量,但是它们不应该被改变。(事实上可以改变,但是Ruby会发出警告。) 实例变量是与特定对象相关的。实例变量以一个@符号开始:@price既是一个实例变量。因为每个Ruby对象都有一个iv_tbl结构,所以任何一个对象都可以有实例变量。由于一个类也是一个对象,所以一个类亦可以拥有实例变量。下面的代码展示了如何访问一个类实例变量的方法: class A @ivar = “Instance variable of A” end A.instance_variable_get(:@ivar) # => “Instance variable of A” 实例变量总是基于self指针指向的对象来解析的。上面的代码,因为self是在class A … end中定义A的类对象,所以@ivar又属于A的类对象。 但是,类变量则不同。任何一个类的实例都可以访问其类变量(就是以@@开头的变量)。类变量也可以被其类定义自身所引用。虽然一个类变量和实例变量相似,但他们不是一回事: class A @var = “Instance variable of A” @@var = “Class variable of A” def A.ivar @var end def A.cvar @@var end end A.ivar # => “Instance variable of A” A.cvar [...]
(阅读更多精彩内容...)
十 24
2008年十月24日,星期五,下午 2:02 | 分类:
Advanced Rails,
default |
给我留言 |
“why the lucky stiff”为Ruby元编程创建了一个极小的库,叫做metaid.rb。在任何需要元编程的项目中都可以引进这段非常有用的代码: class Object # The hidden singleton lurks behind everyone def metaclass; class < < self; self; end; end def meta_eval &blk; metaclass.instance_eval &blk; end # Adds methods to a metaclass def meta_def name, &blk meta_eval { define_method name, &blk } end # Defines an instance method within a class def class_def [...]
(阅读更多精彩内容...)
十 24
2008年十月24日,星期五,下午 2:02 | 分类:
Advanced Rails,
default |
给我留言 |
解决了前几篇所有的疑惑后,理解method_missing就变得非常简单。其准则是:如果整个方法查找过程中,直到到达了Object都以失败而告终,那么将再次执行方法查找,但这次查找的是method_missing方法而不是原来调用的方法。如果method_missing方法被找到,它将被传入原方法的调用参数并调用,原调用的代码块也会被传入method_missing方法。 Object中的缺省method_missing(rb_method_missing)函数将抛出一个异常。
(阅读更多精彩内容...)
十 24
2008年十月24日,星期五,上午 8:08 | 分类:
default,
TextMate |
给我留言 |
TextMate提供了快捷键让你明确定位。例如你想跳转到指定的行。利用快捷键Apple+L,然后输入行号再按回车就行。 这个方法是挺好,但是实际应用中很少有人会这么用,因为你不可能一直都知道你要去操作第几行吧。好在几乎所有的文档都有自己的组织形式。拿Ruby代码来说,它们都是在一个function或者method定义里的。TextMate会注意到这些,并且用快捷键辅助你迅速定位。 用鼠标点一下编辑窗口的右下角,那里列出了目前文档的header, class, method, 和 functio。随便选择一个,光标会定义到那一行的开头位置。看图: 但是在实际项目中,我们不会去常常拿鼠标选择这个地方。通常咱哥们都是用快捷键。Shift+Apple+T打开Navigation菜单中的Go to Symbol对话框。你可以用方向键来选择,也可以跟前面介绍的一样,使用缩写字母来选择某一个方法。例如输入s w r会选择save_without_revision( )。 如果这些都不能满足你的需要,你可以自己定义书签。定义书签很简单,你可以用Apple+F2键为当前行定一个书签,或者用鼠标点行号前面那个位置。看下面的图。利用快捷键Option+Apple+B可以显示或者隐藏那个书签栏。如果当前页面你已经定义了几个书签那么可以使用F2或者Shift+F2在书签之间顺序或倒序切换。
(阅读更多精彩内容...)