【问题标题】:Sublime Text 3 - Clean PasteSublime Text 3 - 清洁粘贴
【发布时间】:2013-08-17 12:20:23
【问题描述】:

Sublime Text 3 看起来很棒,但让我无法切换的一项是Clipboard Commands 的兼容性。我使用这个插件的唯一目的是“clean_paste”功能,它基本上可以从 Microsoft Word(或任何其他文本编辑器)粘贴复制的内容,去掉它通常附带的有趣字符。有谁知道 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 中是如何工作的。感谢您的帮助!

【问题讨论】:

  • 你所要做的就是修复clean_copyclean_paste
  • 我不确定我是否理解问题
  • 澄清一下,我很想将这个 ST2 插件移植到 ST3,但不是 Python 开发人员,我想知道是否有人知道在 Sublime 中映射新键绑定的最佳方法(其中我知道该怎么做),但是将执行clean_paste 的函数引用到其中,而不是像原来那样引用类定义。或者,如果这使问题更清楚,我可以如何将 Miscrosoft Word 中的干净粘贴到 ST3 中(这样我就可以摆脱所有“特殊/编码字符”
  • 所有命令都必须引用一个类名。对不起。这是一个非常小的插件 - 移植应该非常简单
  • 您缺乏对 SublimeText 命令的理解。要使这个插件在 SublimeText3 中工作,您需要将 clean_paste 函数移植到 python3,这可能可以使用 2to3 完成,因为它看起来并不复杂 - 类本身很好。但我在这里也没有看到一个有效的问题:如果它是“有人可以将它移植到 ST3”这将是题外话,请在 ST 论坛上提问。一个更好的问题是“你能帮我把它移植到 ST3 吗”,但这需要你先尝试一些东西。现在它读起来就像你只是希望有人为你做一些互联网点的工作......

标签: python sublimetext3


【解决方案1】:

让这个 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;

我已经分叉了链接的插件并上传了更改here

在 sublime3 中对其进行了测试,它似乎可以工作,但如果没有测试用例,我将把它留给你。

【讨论】:

  • 很抱歉,已放弃该帖子并将其发布在论坛上 - 谢谢!
猜你喜欢
  • 1970-01-01
  • 2017-10-31
  • 2014-01-29
  • 1970-01-01
  • 2023-04-05
  • 1970-01-01
  • 2013-01-08
  • 2021-04-19
  • 1970-01-01
相关资源
最近更新 更多