• sublime text 3 中文排序插件


    ST3 的排序不支持中文按拼音排序,所以需要搞一个插件来支持这一特性

    pypinyin 这个库可以把中文转成拼音,可惜不支持 python3.3,而 ST3 内置的 python 就是 3.3

    我系统中的 python 是 3.8,是可以用 pypinyin 这个库的

    那么问题可以转化为「python3.3 如何调用 python3.8 的排序函数」,Interesting!

    于是

    class RPC(object):
        cmd = """
    import json, sys
    from pypinyin import lazy_pinyin
    
    arg = json.loads(sys.argv[1])
    func, args, kwargs = arg["func_name"], arg["func_args"], arg["func_kwargs"]
    
    def chinese_sort(lst):
        lst.sort(key=lambda x: "".join(lazy_pinyin(x)), reverse=False) # 从小到大
        print(json.dumps(lst))
    
    eval(f"{func}(*args, **kwargs)") # hangj.cnblogs.com
    """
        def __getattr__(self, func_name):
            def _func(*args, **kwargs):
                d = {'func_name': func_name, 'func_args': args, 'func_kwargs': kwargs, 'author': 'hangj.cnblogs.com'}
                arg = json.dumps(d)
                res = os.popen('''python3.8 -c '{}' '{}' '''.format(cmd, arg)).read()
                return json.loads(res)
    
            setattr(self, func_name, _func)
            return _func
    
    # author: hangj.cnblogs.com
    class SortChineseCommand(sublime_plugin.TextCommand):
        def sort(self, edit):
            lines = []
            for selection in self.view.sel():
                if not selection: continue
                lines.append(self.view.substr(selection))
    
            if len(lines) < 2: return
    
            rpc = RPC()
            lines = rpc.chinese_sort(lines)
    
            i = 0
            for selection in self.view.sel():
                self.view.erase(edit, selection)
                self.view.insert(edit, selection.begin(), lines[i])
                i = i + 1
    
        def run(self, edit, sortbylines=True):
            if sortbylines:
                self.view.run_command('select_every_single_line')
    
            self.sort(edit)
    
    

    快捷键设置

    [
        { "keys": ["alt+f5"], "command": "sort_chinese", "args":{"sortbylines":true}},
        { "keys": ["alt+shift+f5"], "command": "sort_chinese", "args":{"sortbylines":false}},
    ]
    

    按行排序,或按你选中的文字块来排序

    have fun!

  • 相关阅读:
    apache22与mod_mono
    设计模式之行为型模式
    jquery实现excel导出
    桥本分数式问题的C++算法
    [深入浅出iOS库]之图形库Core Plot
    HDU 1069 Monkey and Banana
    程序员咋学习
    JavaSocket通信(双向,有界面)
    BZOJ 3098(Hash Killer II生日攻击)
    [置顶] iPhone 5S及iWatch或将采用指纹验证技术
  • 原文地址:https://www.cnblogs.com/hangj/p/14087212.html
Copyright © 2020-2023  润新知