我正在尝试在SublimeText中创建一个片段,在按下ctrl + g后用希腊字母替换我输入的单词。
例如:sigma - > ctrl + g - > σ
我可以为每个字母制作一个片段,但我觉得它应该更容易。我不想扫描整个文档,只扫描光标当前所在的单词。
答案 0 :(得分:3)
你可以用插件来做。类似下面的内容适用于单个光标位置。
import sublime_plugin
class GreekSubstitution(sublime_plugin.TextCommand):
greek_map = {}
greek_map["alpha"] = "α"
greek_map["beta"] = "ß"
greek_map["gamma"] = "Γ"
def run(self, edit):
view = self.view
cursors = view.sel()
cursor = cursors[0]
word_region = view.word(cursor)
word = view.substr(word_region)
if word in self.greek_map:
view.replace(edit, word_region, self.greek_map[word])
您要绑定的命令是greek_substitution
。显然你需要将列表扩展到alpha,beta和gamma之外,但这应该让你开始朝着正确的方向前进。
答案 1 :(得分:1)
我无法发表评论,所以我会发布另一条回复:
self.greek_map(word)
语法错误是不是?我认为这是一个简单的错字。
我不确定这是否符合本论坛的精神,但我冒昧地根据前面的回复提交了一份完整的解决方案。
import sublime, sublime_plugin
import unicodedata
# NOTE: Unicode uses the spelling 'lamda'
class InsertSpecialSymbol(sublime_plugin.TextCommand):
# Configuration
DEBUG = True
# Symbol sets
Greek = { unicodedata.name(L).split()[-1].lower() : L for L in map(chr, range(945, 970)) }
Math = { 'multiply': '×', 'forall': '∀', 'element': '∈', 'angle': '∠', 'proportional': '∝', 'le': '≤', 'ge': '≥' }
replacements = Greek.copy()
replacements.update(Math)
def debug(self, string):
if InsertSpecialSymbol.DEBUG: print(string)
def run(self, edit):
''' Replaces the selected word with an appropriate symbol '''
view = self.view
for cursor in view.sel():
wordRegion = view.word(cursor)
word = view.substr(wordRegion)
symbol = self.replacements.get(word.lower(), None)
if symbol is not None:
view.replace(edit, wordRegion, symbol if word[0].islower() else symbol.upper())
else:
self.debug('Substitution not available for \'%s\'.' % word)
顺便说一句,由于手动创建地图会非常痛苦,我想指出它是使用简短的Python片段自动完成的(参见unicodedata.name)。我会根据要求发布。
修改强> 该示例假设您使用的是Sublime Text 3,其API不向后兼容。如果您的编辑器依赖于Python 2,我建议James在下面给出答案。
答案 2 :(得分:1)
我正在寻找类似的东西,偶然发现了Arne Ludwig的包装“希腊字母”(针对ST2 / ST3):
https://packagecontrol.io/packages/Greek%20Letters
它的工作原理是为希腊字母自动填充LaTeX名称。
自动完成通常使用tab
- 键配置,例如:
tau<tab>
varphi<tab>
phi<tab>