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

时间:2016-03-21 02:14:21

标签: sublime-text-plugin

我正在尝试使用一个sublime文本插件,我想捕获每个击键并在控制台中打印插入/删除的字符以及行中的行号和位置。

事件监听器类中有一个on_modified事件,我可以连接但它返回一个 view 对象。我想只是改变了一些关于变化的信息(行号和列号)。我过去已经扩展了其他编辑器,这些信息可以作为一组编辑使用。

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

1 个答案:

答案 0 :(得分:2)

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

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

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

实施例

Demo

代码:

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 )&amp; sublime.log_commands ( True )默认启用(用于开发目的),因此任何系统打印都会散布所有日志输出。

<强> [2]

我正在开发一个有点相关的插件, LineDiff 。我上面提到的解决方案对于键盘输入的更改非常有用,但跟踪程序化更改会涉及更多。有关我的一些想法,请参阅 this thread 。为该问题提出了解决方案。

<强> [3]

OP创建了一个线程,以进一步讨论这个@ SublimeText论坛。

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

Retrieving inserted and deleted text