&引用;“聪明的报价”;在带有LaTeXTools的Sublime Text 2中

&引用;“聪明的报价”;在带有LaTeXTools的Sublime Text 2中,latex,sublimetext2,Latex,Sublimetext2,我最近将LaTeX创作从TeXWorks迁移到Sublime Text 2,我真正缺少的一个功能是能够键入“常规引号”(在我的瑞典键盘上使用shift+2,生成“引用的文本”),并让编辑器自动将它们转换为LaTeX中引用的正确方式,这是我打字时的“引用文本” 我试图在ST2中找到一种方法来实现这一点,但我发现的大部分内容都与自动转义字符串中的引号有关,这不是我想要的 有没有办法在ST2中获得此功能?我看到的最短方法是使用代码片段。这一个可以工作- <snippet> <

我最近将LaTeX创作从TeXWorks迁移到Sublime Text 2,我真正缺少的一个功能是能够键入“常规引号”(在我的瑞典键盘上使用shift+2,生成
“引用的文本”
),并让编辑器自动将它们转换为LaTeX中引用的正确方式,这是我打字时的“引用文本”

我试图在ST2中找到一种方法来实现这一点,但我发现的大部分内容都与自动转义字符串中的引号有关,这不是我想要的


有没有办法在ST2中获得此功能?

我看到的最短方法是使用代码片段。这一个可以工作-

<snippet>
    <content><![CDATA[
``${1:this}''
]]></content>
    <!-- Optional: Set a tabTrigger to define how to trigger the snippet -->
    <tabTrigger>lq</tabTrigger>
    <!-- Optional: Set a scope to limit where the snippet will trigger -->
    <scope>text.tex.latex</scope>
</snippet>

lq
text.tex.latex

将此保存为ST2目录下的
Packages>User
中的
latex quote.sublime snippet
。然后在任何时候你想使用引号,只需写
lq
(我从LaTeX quote中命名它)并按Tab键。

你可能可以在完成引号的编写后让Sublime Text 2给引号一次,但既然这可能需要编写一个复杂的插件,为什么不重新映射
是否改为插入正确的字符

可以添加模拟默认自动配对的自定义密钥绑定,但可以在适当的地方插入LaTeX引号。将这些行(来源于
首选项->密钥绑定–默认
,第272–293行)添加到
首选项->密钥绑定–用户
文件:

{ "keys": ["\""], "command": "insert_snippet", "args": {"contents": "``$0''"}, "context":
    [
        { "key": "selector", "operator": "equal", "operand": "text.tex.latex"},
        { "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", "match_all": true }
    ]
},

{ "keys": ["\""], "command": "insert_snippet", "args": {"contents": "``${0:$SELECTION}''"}, "context":
    [
        { "key": "selector", "operator": "equal", "operand": "text.tex.latex"},
        { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
        { "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }
    ]
},

{ "keys": ["\""], "command": "move", "args": {"by": "words", "forward": true}, "context":
    [
        { "key": "selector", "operator": "equal", "operand": "text.tex.latex"},
        { "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 }
    ]
},
第一段代码覆盖Sublime文本的默认引号对,并将其适配为LaTeX样式的引号。在LaTeX文件中键入
时,只要它位于通常会插入一组双引号的位置,就会得到以下结果:

``|''
第二部分替换了自动用引号括起选定文本的默认功能。在LaTeX文件中,选择文本,然后按
将导致以下结果:

``This is the text you selected|''
当插入符号与结束引号相邻时,按“
”键时,最后的重新绑定跳过结束引号(
)。也就是说,当您在此处按
时:

``Sublime Text is the best!|''
插入符号将在引号外移动,如下所示:

``Sublime Text is the best!''|

安装时,它不会将此列为功能,但会自动将
转换为
``|'
,中间有插入符号,可供引用文本使用。然后按
将插入符号移过关闭位置
``

注意:ST2 hightlights
”带引号的文本“
带有红色背景,表示它知道语法错误,但实际上并没有更改我的输入。您可以尝试编写一个简单的插件来搜索
无效的.invalign.string.quoted.double.latex
选择器。从那里,您应该能够用正确的引号替换第一个/最后一个字符。可能使用on_modified listener,只尝试更改当前行。不管怎么说,只是一些想法,不知道最好的方法是什么。然后我也可以写“(两个背景),其中ST2完成' ' '(两个后面跟着两个单引号)与光标在中间-我希望不必改变键盘组合,现在是硬连线在我的手指…编辑:格式混乱,试图澄清。我现在无法尝试,但它看起来很棒。我将在星期一试用,并返回结果。我现在已经能够测试它了,它的工作原理也正是我想要的。如果我能多次投票,我会的!