我正在尝试使用一个sublime文本插件,我想捕获每个击键并在控制台中打印插入/删除的字符以及行中的行号和位置。
事件监听器类中有一个on_modified事件,我可以连接但它返回一个 view 对象。我想只是改变了一些关于变化的信息(行号和列号)。我过去已经扩展了其他编辑器,这些信息可以作为一组编辑使用。
插入或删除的文本以及文件中的位置是否可以从sublime插件中的事件侦听器获得?
答案 0 :(得分:2)
我会避免使用控制台。与视图相比,面板非常有限,您将与标准控制台输出竞争。如果您确实想使用面板,请使用create_output_panel & show_input_panel
我会使用存储的字符串或stringarray连续附加信息,并创建一个命令,以便在需要时将存储的信息打印到新视图。您可以实现一个字典来存储每个文件的更改信息。
您可以使用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 )
&amp; sublime.log_commands ( True )
默认启用(用于开发目的),因此任何系统打印都会散布所有日志输出。
<强> [2] 强>
我正在开发一个有点相关的插件, LineDiff 。我上面提到的解决方案对于键盘输入的更改非常有用,但跟踪程序化更改会涉及更多。有关我的一些想法,请参阅 this thread 。为该问题提出了解决方案。
<强> [3] 强>
OP创建了一个线程,以进一步讨论这个@ SublimeText论坛。
取得了重大进展,请查看@: