默认情况下,在TextMate中按Esc会循环显示可能的完成(除了关闭对话框),这可能会在文档中放置不需要的字符,特别是如果您习惯使用Esc作为大多数文本编辑器中的安全键。 (事实上,在很多IDE中,按
如何禁用此行为,因此在正常文本编辑中,Esc键不执行任何操作,但关闭对话框仍可按预期工作?
答案 0 :(得分:5)
基于@matt的评论,我发现我可以通过覆盖默认键绑定来完成我需要的操作,如此处所提到的,https://manual.macromates.com/en/key_bindings.html:
此外,TextMate有一个/path/to/TextMate.app/Contents/Resources/KeyBindings.dict文件,其中包含一些特定于TextMate的额外键绑定(因此不适合放入每用户全局键绑定文件)。您可以将此文件复制到〜/ Library / Application Support / TextMate并进行编辑,然后将优先于捆绑文件。
我编辑了文件并取出了nextCompletion的行,分配了shift + Esc($ \ 033)并分配了Esc和shift + Esc来调用noop
"\033" = "noop:";
"$\033" = "noop:";
我在这里了解到了noop选择器的存在:
退出并重新启动后,TextMate Esc现在除了关闭对话框外什么都不做。
(显然要改变这一个设置,你需要知道Objective-C来识别选择器字符串,(以及具有' nop'的汇编),这样你就可以猜到应该有一个noop选择器。你需要知道八进制,所以你认为Escape键为033 = 27。)
编辑:供人们参考,想知道如何更改一个小设置需要90分钟。
我在第4.2节末尾找到了这段in the manual:
当您提供自己的完成命令(或列表)时,您可能想要 禁用默认匹配。这可以通过设置来完成 disableDefaultCompletion为1。
我尝试在首选项>中将disableDefaultCompletion设置为1变量窗格并退出并重新打开应用程序。我发现Bundle菜单>选择Bundle Item并单击Settings显示所有设置的列表,包括底部的disableDefaultCompletion = 1。显然这没有做任何事情? (被不同捆绑包覆盖的其他设置显示为划掉,我的设置不是。)
我还在http://github.com/textmate/textmate repo中搜索了字符串disableDefaultCompletion,它显示在搜索结果中,所以这个功能应该存在于某处。
我尝试退出应用程序,然后在命令行上:
默认写入com.macromates.TextMate disableDefaultCompletion true
重新启动并再次尝试(在JavaScript模式下点击Esc到关闭的右侧)并且仍然没有禁用完成。