如何在 sublime text 插件中回显对文件的更改

How do I echo the changes to a file in a sublime text plugin

我正在试验一个 sublime text 插件,我想捕获每个击键并在控制台中打印 inserted/deleted 字符以及行号和行中的位置。

事件侦听器 class 中有一个 on_modified 事件,我可以连接它,但它 returns 是一个 view 对象。我只想要所做的更改以及有关更改的一些信息(行号和列号)。我过去曾扩展过其他编辑器,此信息可作为一组编辑器使用。

插入或删除的文本以及文件中的位置是否可从 sublime 插件中的事件侦听器获得?

我会避免使用控制台。与视图相比,面板非常有限,您将与标准控制台输出竞争。如果你真的想使用面板,请使用 create_output_panel & show_input_panel

我会使用一个存储的字符串或字符串数​​组,您可以将信息不断附加到其中,并创建一个命令以在需要时将存储的信息打印到新视图。您可以实现一个字典来存储每个文件的更改信息。

您可以使用 substr & rowcol 查找最近输入的字符及其位置。



示例:

代码:

import sublime, sublime_plugin

class EventListener ( sublime_plugin.EventListener ):

    def on_modified ( self, view ):

        selectedRegions = view.sel()

        for region in selectedRegions:

            row, column = view.rowcol ( region.a )
            line = row + 1
            lastCharacter_Region = sublime.Region ( region.a - 1, region.a )
            lastCharacter = view.substr ( lastCharacter_Region )

            print ( "line: " + str ( line ) + "   col: " + str ( column ) + "   char: " + lastCharacter )



备注:

[1]

为了简单起见,我没有在上面的示例中实现输出面板。您可以按原样使用代码,但如果您打算发布插件,我会避免使用控制台。

例如:我默认启用命令 sublime.log_input ( True ) & sublime.log_commands ( True ) (用于开发目的),因此任何系统打印都会穿插所有的日志输出。

[2]

我正在开发一个有点相关的插件,LineDiff.   The solutions I mentioned above will work great for keyboard-entered changes, but keeping track of programmatic changes is a bit more involved. See this thread 以表达我对那个问题的一些想法和建议的解决方案。

[3]

OP 在 SublimeText 论坛创建了一个主题来进一步讨论这个问题。

已取得重大进展,请查看@:

Retrieving inserted and deleted text