SublimeText 中当前选择的 ROT47

ROT47 of the current selection in SublimeText

当做CTRL+SHIFT+P时,有命令Rot13 selection 允许 encrpyt the selected text.

我想添加一个名为 Rot47 selection 的命令:

selection = 'Test'
print ''.join(chr(33 + ((ord(ch) + 14) % 94)) for ch in selection)
#Output: %6DE

在 SublimeText 中的何处编写此 Python 代码,以便在 CTRL+SHIFT[=27 中显示此新命令=]+P?

可以写个插件

一些初学者(不是 100% 正确)代码可用 here

Rot47 的完整插件将具有以下代码:

import sublime, sublime_plugin

class Rot47Command(sublime_plugin.TextCommand):
    def run(self, edit):
        for region in self.view.sel():
            if not region.empty():
                s = self.view.substr(region)
                s = ''.join(chr(33 + ((ord(ch) + 14) % 94)) for ch in s)
                self.view.replace(edit, region, s)

在哪里写这段代码?

工具 > 新插件... 将打开一个带有一些样板代码的新缓冲区。用上面的代码替换样板并将文件另存为 rot47.py in /<sublime-text-dir>/Packages/User/.

您可以通过使用 Ctrl+` 打开控制台并输入 view.run_command('rot47') 并点击 输入。确保您在 运行 新的 Rot47 命令之前选择了一些文本。

此外,如果您想为新的 rot47 命令创建键盘快捷键:转到首选项 > 键绑定 -- 用户并添加以下条目:

{ "keys": ["ctrl+shift+4"], "command": "rot47" }

(你当然可以选择更有意义的组合键。)

上面的插件代码做了什么?

self.view.sel() 在选定的文本区域上给出一个迭代(在同一个缓冲区中可以有多个选择,去 Sublime!)。一个区域基本上是一个 (start_index, end_index) 对,表示一个选定的子字符串。 self.view.substr(region) 为您提供所需的子字符串。

然后我们根据需要修改选择文本(变量 s)并用新文本替换选择(对 self.view.replace() 的调用)。

有关更广泛的 API 参考,请参阅 this