用SublimeText中的希腊字母替换单词

时间:2014-01-22 18:20:16

标签: replace sublimetext

我正在尝试在SublimeText中创建一个片段,在按下ctrl + g后用希腊字母替换我输入的单词。

例如:sigma - > ctrl + g - > σ

我可以为每个字母制作一个片段,但我觉得它应该更容易。我不想扫描整个文档,只扫描光标当前所在的单词。

3 个答案:

答案 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>