嗨~ 各位用过 textmate 的 fellows, 小弟有个问题要问你们!
首先说下两者的区别:
auto complete, 是根据特定的辞典,以及上下文内容,(相当智能化的) 自动补全. yasnippet, 就是类似于 textmate 的 bundle, 主要用于自动补全事先定义的片段, 通过定制复杂的 bundle, 也可以实现相当复杂的补全,甚至可以嵌套 ;-)
我没有用过 textmate, 我想问下,到底在 textmate 下面是如何处理以上两个问题 的。我使用的是 Emacs, 一切都需要自己定制。汗... 但是在自动补全这一块, 一直没有形成太规律的一个习惯。
主要是因为以下原因。
前提条件:
以上两个功能,我都使用的是同一个快捷键,那就是传说中的 tab. (两者如果不是独立的快捷键,那当然没有问题了,不过我就是喜欢两个在一起)
auto-complete 优先于 yasnippet 被执行。只有没有满足前者的情况下,才会 执行后者。
auto-complete 可以选择在输入第几个字符的时候被激活,而且可以设定响应 时间,我之前用的默认:在输入第 2 个字符时,激活自动补全提示,响应时间为 0.8 秒。
依据以上条件,就形成了以下策略:
用示例来说明:
假设期望在 Ruby 中补全 for 循环:
第一种情况:键入 fo, 会自动提示 for, 按一下 tab, 补全为 for, 再按下 tab,补全为 for 循环结构,第一个 tab 是 auto, 第二个是 yas.
第二种情况:设定至少 4 个字符才激活 auto-complete. 此时,bundle 的定义应该满足以下条件才会不发生冲突: 1) bundle 长度在三个字符以内。这样总是激活 bundle. 2) bundle 的长度非常长或不经常被使用. 我现在用的是第二种情况。在两种之间摇摆过几次。
唧唧歪歪半天,也没说问题是啥,哈哈。
提问如下:
textmate 是否具有类似 auto-complete 的功能? 如果有,是使用什么策略和 bundle 共存?分开两个快捷键吗? 如果是一个快捷键,在输入几个字符的情况下被自动激活的?