【发布时间】:2015-10-03 03:46:14
【问题描述】:
我们的目标是采用third way---a.k.a.使用semantic linefeeds。这包括在 TeX 文件的每一行输入一个句子。这使得在处理 TeX 文件和其他大量文本文件时更容易使用版本控制系统。 (在回复this question 时也提出了类似的建议。)
当然,我可以在每个句子的末尾手动插入换行符。但是,这会导致不良习惯(例如,在写电子邮件时每行输入一个句子)。所以我正在寻找一种替代方法来实现这一点。
对于我们这些使用 Sublime Text 的人来说,一个解决方案是使用 ST 的键绑定。从本质上讲,这会将空格键变成脚本的键盘快捷键,该脚本将
- 检查前面是否是句尾,以及
- 如果是,请插入换行符。
这是相关的sn-p:
{ "keys": [" "],
"context": [
{"key": "selector", "operator": "equal", "operand": "text.tex.latex"},
{"key": "preceding_text", "operator": "regex_match", "operand": "(^.+\\.$)|(^.+\\?$)|(^.+\\!$)|(^.+\\.+\\)$)"},
{"key": "preceding_text", "operator": "not_regex_match", "operand": "(^.*\\\\ex\\.$)|(^.*\\\\[abz]\\.$)"},
{"key": "preceding_text", "operator": "not_regex_match", "operand": "(^.*[Cc]f\\.$)|(^.*\\b[Pp]+\\.$)|(^.*etc\\.$)|(^.*\\b[A-Z]\\.$)|(^\\w\\.$)|(^.*M[sr]\\.$)|(^.*Mrs\\.$)"}
],
"command": "insert", "args": {"characters": " %\n"}
}
我将它附加到Sublime/Packages/User/Default (OSX).sublime-keymap,它似乎可以解决问题。
sn-p 应该查找空格之前的内容,如果你有一个以下列之一结尾的字符串,则给你一个匹配项:
- 句号,
- 感叹号,
- 一个问号,
- 以句点开头的右括号。
但是,如果它们前面有以下之一,它将忽略以句点结尾的字符串:
- '\ex', '\a', '\b', '\z'(这是为了能够使用
linguex包), - 'cf','cf',
- 'p','pp','P',
- '等'
- “先生”、“夫人”、“女士”、“博士”、
- 单个大写字母(用于句子中的首字母)。
我很想知道我是否应该在该列表中添加其他内容(“同上”,我想应该是其中之一)。
我也想知道这个问题是否有更简单的解决方案。
【问题讨论】:
-
你为什么要使用额外的非正则表达式匹配?
-
您还需要在 \ 之后允许空格。如果您复制粘贴内容
(^.+\\..*?$)....,可能会出现这种情况 -
你可以自动更正
./!/?和两个空格换行,如果你可以养成两个空格的习惯。 serif.com/appresources/PPX6/Tutorials/en-us/help/… -
我浏览了我自己的 LaTeX 文件,我能找到的唯一一个你丢失的案例是
et al.。 -
虽然这是一个很好的问题,但它仍然是一个厨房水槽问题:“请把你所有的东西都扔进去。我会弄清楚的。”因此,一个客观而完整的答案几乎是不可能的。更多地将其视为一个过程,直到您的排除列表稳定下来。
标签: regex latex sublimetext3 sublimetext