Sublime Text和Clojure:不要配对单引号

有没有办法获得语法类型来定义键盘快捷键,还是设置键盘快捷方式取决于语法类型(可能在“上下文”)设置下?

我的引用列表(1 2 3)输入如下:'(1 2 3)’,因为Sublime应用这个有用的(但不是在这种情况下)行为.

这是Default(OSX).sublime-keymap文件的相关位

// Auto-pair single quotes
{ "keys": ["'"], "command": "insert_snippet", "args": {"contents": "'$0'"}, "context":
    [
        { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
        { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
        { "key": "following_text", "operator": "regex_contains", "operand": "^(?:\t| |\\)|]|\\}|>|$)", "match_all": true },
        { "key": "preceding_text", "operator": "not_regex_contains", "operand": "['a-zA-Z0-9_]$", "match_all": true },
        { "key": "eol_selector", "operator": "not_equal", "operand": "string.quoted.single", "match_all": true }
    ]
},
{ "keys": ["'"], "command": "insert_snippet", "args": {"contents": "'${0:$SELECTION}'"}, "context":
    [
        { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
        { "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }
    ]
},
{ "keys": ["'"], "command": "move", "args": {"by": "characters", "forward": true}, "context":
    [
        { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
        { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
        { "key": "following_text", "operator": "regex_contains", "operand": "^'", "match_all": true }
    ]
},
你应该能够,虽然这是一种痛苦.首先,你必须禁用内置的自动配对(不用担心,当我们完成后,自动配对一切都应该工作).为此,请在用户设置中设置以下内容.

"auto_match_enabled": false

然后将以下内容添加到您的设置中.

"my_auto_match_enabled": false

接下来,我们需要添加一组新的键绑定.我只是从你发布的一个,但我会解释我做了什么,因为它可能不是很明显.

{ "keys": ["'"], "command": "insert_snippet", "args": {"contents": "'${0:$SELECTION}'"}, "context":
    [
        { "key": "setting.my_auto_match_enabled", "operator": "equal", "operand": true },
        { "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true },
        { "key": "selector", "operator": "not_equal", "operand": "source.clojure", "match_all": true }
    ]
}

首先,请注意,我将第一个上下文键从setting.auto_match_enabled切换到setting.my_auto_match_enabled.接下来,我添加了将限制范围的最后一个上下文条目.这样,只有当您不在source.clojure范围内时,代码段才会运行.你可能需要修改这个,因为我不知道clojure中的范围名称是什么,我只是猜测=).您将必须为所有单引号输入.现在,因为我们禁用了内置的自动配对,所以我们必须读取所有这些条目.在这些条目中,我们将再次将setting.auto_match_enabled更改为settings.my_auto_match_enabled.之后,一切都应该起作用.注意它实际上不一定是my_auto_match_enabled,这就是我所选择的.你可以根据你的需要改变它.

所有这一切,我没有完全测试所有这一切,所以评论如果你遇到问题.

说明:

所以现在你可能会问自己,为什么我需要禁用内置的自动匹配代码?那么这里的答案.即使我们在用户设置中阻止自动完成,使用类似的范围规则,仍然会回到默认状态,因此插入自动配对的报价,而不管我们在用户文件夹中的操作.现在你可能会想,但是如果我们修改默认设置文件怎么办?虽然我们可以这样做,再次插入相同的上下文设置,我们必须确保在任何后续更新中还原该文件.所以我想到底是由你决定的.如果您编辑默认文件,请记住,如果需要还原,则必须再次更改文件.

崇高文本3:

在ST3中,您可以执行实际修改的“默认”文件.这是因为在ST3中如何装入包装.插件不需要被提取到Packages文件夹,而是直接从.sublime-package文件(刚被重命名的zip)运行.此外,Packages目录中的任何文件优先于.sublime-package文件.因此,在ST3中,您将创建Packages / Default / Default(您的os在这里).sublime-keymap,并添加上下文行.随着更新不再修改Packages目录,它可以安全地从任何后续的更新.

http://stackoverflow.com/questions/15845543/sublime-text-and-clojure-dont-pair-single-quotes

转载注明原文:Sublime Text和Clojure:不要配对单引号