在SublimeText希腊字母更换的话(Replacing words with greek le

2019-10-31 02:42发布

我试图创建SublimeText片段,其按CTRL + G后替换的话我有希腊字母输入。

例如:西格玛 - > CTRL + G - >σ

我可以让每个字母一个片段,但我感觉应该比较容易。 我不希望在整个文档扫描,只有两个字光标目前。

Answer 1:

我一直在寻找类似的事情,只是偶然在包“希腊字母”由Arne路德维希(用于ST2 / ST3):

https://packagecontrol.io/packages/Greek%20Letters

它通过自动填充LaTeX的名字希腊字母。 自动完成通常配置成与所述tab -键,例如:

tau<tab>
varphi<tab>
phi<tab> 


Answer 2:

你可以用插件做到这一点。 像下面的内容将单个光标位置工作。

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 。 很明显,你将需要展开列表之外的α,β,γ,但这应该让你在正确的方向开始。



Answer 3:

我无法评论,所以我就张贴其他的答案:

是不是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)

正如顺便说一句,因为创建地图手动将一直这么痛,我想指出的是,它是自动完成的(参见unicodedata.name)用短Python的片段。 我会根据要求张贴。

编辑例子中,你正在使用文本崇高3,它的API是不向后兼容假设。 如果你的编辑器依赖于Python 2中,我建议如下詹姆斯的答案。



文章来源: Replacing words with greek letters in SublimeText