“ view.window()。run_command”和“ view.run_command”之间的区别

时间:2018-06-26 12:13:21

标签: sublimetext3 sublimetext sublime-text-plugin

view.window().run_command(...)view.run_command(...)之间的实际区别是什么?

这是同一个插件的两个版本,但有两个小的更改:

(它将在保存时将制表符转换为空格。您需要"expand_tabs_on_save": true的首选项)。

一个:

# https://coderwall.com/p/zvyg7a/convert-tabs-to-spaces-on-file-save
import sublime, sublime_plugin, os

class ExpandTabsOnSave(sublime_plugin.EventListener):
  def on_pre_save(self, view):
    if view.settings().get('expand_tabs_on_save') == 1:
      view.window().run_command('expand_tabs')

两个:

# https://github.com/bubenkoff/ExpandTabsOnSave-SublimeText
import sublime_plugin # <---------- `sublime` and `os` removed

class ExpandTabsOnSave(sublime_plugin.EventListener):
  def on_pre_save(self, view):
    if view.settings().get('expand_tabs_on_save') == 1:
      view.run_command('expand_tabs') # <--------- `window()` removed

这些变化使行为发生了什么变化?

1 个答案:

答案 0 :(得分:3)

在Sublime Text中,可以将命令定义为在Application级别(ApplicationCommand),Window级别(WindowCommand)或{{1} }级(TextCommand)。

通常只有View修改缓冲区或仅影响当前缓冲区的设置,TextCommand当前窗口布局或其他相关设置以及WindowCommand的全局首选项等。

根据我的经验,在ApplicationCommand对象上执行WindowCommand不会执行任何操作。示例:

View

But executing a TextCommand on a Window object implicitly targets that window's currently active view.从ST控制台执行时,将影响ST控制台的输入文本区域。

view.run_command('set_layout', {"cells": [[0, 0, 1, 1], [1, 0, 2, 1]], "cols": [0.0, 0.5, 1.0], "rows": [0.0, 1.0]})

因此,答案是,根据命令的类型以及要在其上执行命令的window.run_command('insert', { 'characters': 'testing123' }) 是否处于活动状态,这可能有所不同。


就删除的View而言,这无效,因为这些导入未在插件中使用。