【问题标题】:Inserting Date Time by pressing F5 like in notepad像在记事本中一样按 F5 插入日期时间
【发布时间】:2017-10-13 07:23:10
【问题描述】:

我在 Preferences - Browse Packages - User (folder) 中创建了这个whatever.py 文件

import sublime, sublime_plugin, time
class InsertDatetimeCommand(sublime_plugin.TextCommand):
def run(self, edit):
    sel = self.view.sel();
    for s in sel:
        self.view.replace(edit, s, time.strftime( '%H:%M %d/%m/%Y' ))

然后

在首选项 - 键绑定 - 用户中,添加了这一行:

{ "keys": ["f5"], "command": "insert_datetime"}

按 F5 可以按预期工作,我可以插入日期时间,但是当我这样做时,这个日期时间被选中,当我按 Enter 进入换行符时,它被删除。你知道我应该在上面的代码中更改哪个部分以在按 F5 后不选择所有日期时间字符串吗?

【问题讨论】:

    标签: python sublimetext3


    【解决方案1】:

    我建议使用view.insert 在选择的第二端添加字符串:

    class InsertDatetimeCommand(sublime_plugin.TextCommand):
        def run(self, edit):
            sel = self.view.sel()
            for s in sel:
                self.view.insert(edit, s.b, time.strftime( '%H:%M %d/%m/%Y' ))
    

    replace 的问题在于您将区域替换为Selection。所以在运行命令后,时间字符串被选中,所以当你点击Enter时它会被替换。您可以执行sel.clear() 之类的操作或修改每个区域以修复它。

    更新:
    正如 OdatNurd 所说,在这种情况下使用 s.a 会感到困惑。使用s.b 会更一致。

    【讨论】:

    • 试过这个但没有用。甚至没有打印日期时间。您是否尝试过您提到的更改?你能粘贴整个代码吗?
    • 我已经更新了整个代码。它对我有用,如果它不起作用,您可以在控制台中提供输出吗?
    • 这个答案也适用于我,我会检查控制台是否有错误。另请注意,您也可以使用仅包含以下代码的run 方法轻松完成此操作:self.view.run_command("insert", {"characters": time.strftime('%H:%M %d/%m/%Y')})
    • 附带说明,a 属性为您提供选择的第一个结束,而不是选择的开始,因此如果您先选择文本并从右到左选择,则插入可能不会发生在你想要的地方。这也不会用插入的文本破坏选定的文本(这可能是也可能不是什么大问题)。
    • 谢谢,我没有注意到差异并更新了答案。
    猜你喜欢
    • 2015-03-13
    • 2021-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-10
    • 1970-01-01
    • 2015-03-17
    • 1970-01-01
    相关资源
    最近更新 更多