我的问题是与此问题有关在 Sublime Text 2 中关闭括号匹配。
Sublime Text 2/3 具有“auto_match_enabled”设置,可自动配对分隔符([ ]、{ }、“”等)。大多数情况下,这是一个很棒的功能。然而,在编写某些文档时,它会造成麻烦。
例如,在 LaTeX 中,双引号(几乎?)仅用于添加变音符号。因此,例如,n\"aive
编译为näive
。在这种情况下,自动插入匹配的双引号没有帮助——它增加了一个删除它的按键。鉴于此,我想关闭自动匹配仅适用于双引号和仅在具有.tex
扩展名的文件中。不幸的是,全球设置似乎是一个全有或全无的交易——没有明显的(对我而言)方法来限制其范围。
如何在给定上下文中关闭单一类型分隔符的自动匹配?更具体地说,如何关闭带有.tex
扩展名的文件中双引号的自动匹配?
答案1
与上面 Jonno 的回答类似,您可以用同样的方式修改给定包的键盘映射设置:
Default.sublime-keymap
在 LaTeX 目录中创建一个文件(如果需要,创建文件夹):
Windows:
%APPDATA%\Sublime Text 3\Packages\LaTeX\Default.sublime-keymap
macOS:
~/Library/Application Support/Sublime Text 3/Packages/LaTeX/Default.sublime-keymap
Linux:
~/.config/sublime-text-3/Packages/LaTeX/Default.sublime-keymap
然后,您可以将双引号的默认键盘映射 ( Preferences -> Key Bindings - Default
) 设置复制并粘贴到这个新文件中。然后我修改了这些键绑定的操作,不再插入带引号的对。这是我的更改结果:
[
// changed snippet arg contents from `"\"$0\""` to `"\""` to prevent inserting paired quotes
{ "keys": ["\""], "command": "insert_snippet", "args": {"contents": "\""}, "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.double - punctuation.definition.string.end", "match_all": true }
]
},
// changed the command and args from `move` to the same command/args as above to prevent skipping auto-inserted quotes
{ "keys": ["\""], "command": "insert_snippet", "args": {"contents": "\""}, "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 },
{ "key": "selector", "operator": "not_equal", "operand": "punctuation.definition.string.begin", "match_all": true },
{ "key": "eol_selector", "operator": "not_equal", "operand": "string.quoted.double - punctuation.definition.string.end", "match_all": true },
]
}
]
笔记:
- 当引号括起来时,我没有更改
backspace
运算符(在默认键盘映射中可见)。我不确定如何修复或行为是否不正确 - 你的默认按键绑定可能与我的不同,请随意进行我在上面评论中描述的相同更改
- 我想您可以删除整个
context
部分并且它可以工作,但我自己没有尝试过。
答案2
恐怕我没有针对双引号的解决方案,但如果您只想禁用 LaTeX,您可以创建以下文件:
(这是针对 Sublime Text 3 的 - 但我相信它与 Sublime Text 2 类似)
%APPDATA%\Sublime Text 3\Packages\LaTeX\LaTeX.sublime-settings
您可能需要创建文件夹结构,并且可以根据您的情况在这里添加任何特定的 LaTeX 设置:
{
"auto_match_enabled": false,
}
正如我所说,并且我认为您知道,这将适用于所有匹配,恐怕我没有针对双引号的答案,但希望这会对 LaTeX 特定的方面有所帮助。