5

Sublime Text 3 は良さそうに見えますが、切り替えを妨げている項目の 1 つは、Clipboard Commandsの互換性です。私がこのプラグインを使用する唯一の目的は、基本的に Microsoft Word (または他のテキスト エディター) からコピーしたコンテンツを貼り付けるときに、通常付属するおかしな文字を削除する「clean_paste」機能です。キーバインディングをマップできるST3が提供するネイティブ関数を知っている人はいますか? ClipboardCommand が行うことは次のとおりです (ST2 バージョン)。

class ClipboardCommandsPastePlainText(sublime_plugin.TextCommand):
    def run(self, edit):
        copy(clean_paste(clipboard()))
        self.view.run_command('paste')

一般的にはPythonの質問のほうが多いかもしれませんが、独自のキーバインディングを作成することもできます。これは基本的にそのコマンドを参照するだけです:

"caption": "Clipboard: Paste Plain Text",
"command": "clipboard_commands_paste_plain_text"

そのため、その関数をそれに入れることができればcommand素晴らしいのですが、それが Python でどのように機能するかはわかりません。助けてくれてありがとう!

4

1 に答える 1

4

この python 3 との互換性を確保するのにそれほど多くの作業は必要ありません:

# coding=utf8
import sublime_plugin, sublime, re, html

def clipboard():
    return sublime.get_clipboard()

def copy(data):
    sublime.set_clipboard(data)

# to transfer data to sublime text
def clean_paste(data):
    # clean word
    data = str(data)
    data = data.replace(u'”', '"').replace(u'“', '"').replace(u'’', "'")
    data = data.replace('________________________________________', '\n')
    # clean htmlentities
    data = re.sub('&([^;]+);', lambda m: unichr(html.entities.name2codepoint[m.group(1)]), data)
    return data;

# to transfer data from sublime text
def clean_copy(data):
    # clean html
    data = str(data)
    data = re.sub(r'<br ?/?>', '\n', data, re.I);
    data = re.sub(r'<[^>]*>', '', data);
    # clean htmlentities
    data = re.sub('&([^;]+);', lambda m: unichr(html.entities.name2codepoint[m.group(1)]), data)
    return data;

リンクされたプラグインをフォークし、変更をここにアップロードしました

sublime3 でテストしたところ、動作しているように見えますが、テスト ケースがない場合はお任せします。

于 2013-10-29T22:58:19.163 に答える