11

我正在尝试编写一个小插件来删除当前文件并关闭活动视图。由于某种原因 self.view.file_name() 总是返回 None。

我是 Python 新手,我不知道为什么它不能这样工作。根据API 参考file_name() 返回当前视图的文件名。

import sublime, sublime_plugin, send2trash

class DeleteCurrentFileCommand(sublime_plugin.TextCommand):
    def run(self, edit):        
        f = self.view.file_name()
        if (f is None):
            return

        send2trash.send2trash(f)
        self.view.window().run_command('close')

dir(self.view)的输出:

[' class ',' delattr ',' dict ',' doc ',' format ',' getattribute ',' hash ',' init ',' len ',' module ',' new ',' reduce ',' reduce_ex ',' repr ',' setattr ',' sizeof ',' str ',' subclasshook ',' weakref','add_regions','begin_edit','buffer_id','classify','command_history','em_width','encoding','end_edit','erase','erase_regions','erase_status','extract_completions', 'extract_scope'、'file_name'、'find'、'find_all'、'find_all_results'、'find_by_selector'、'fold'、'folded_regions'、'full_line'、'get_regions'、'get_status'、'get_symbols'、'has_non_empty_selection_region ','id','indentation_level','indented_region','insert','is_dirty','is_folded','is_loading','is_read_only','is_scratch','layout_extent','layout_to_text','line', 'line_endings','line_height','lines','match_selector','meta_info','name','replace','retarget','rowcol','run_command','scope_name','score_selector','sel' ,'set_encoding','set_line_endings','set_name','set_read_only','set_scratch','set_status','set_syntax_file','set_viewport_position','settings','show','show_at_center','size',' split_by_newlines','substr','syntax_name','text_point','text_to_layout','unfold','viewport_extent','viewport_position','visible_region','window','word']match_selector','meta_info','name','replace','retarget','rowcol','run_command','scope_name','score_selector','sel','set_encoding','set_line_endings','set_name' 、'set_read_only'、'set_scratch'、'set_status'、'set_syntax_file'、'set_viewport_position'、'settings'、'show'、'show_at_center'、'size'、'split_by_newlines'、'substr'、'syntax_name'、' text_point','text_to_layout','展开','viewport_extent','viewport_position','visible_region','window','word']match_selector','meta_info','name','replace','retarget','rowcol','run_command','scope_name','score_selector','sel','set_encoding','set_line_endings','set_name' 、'set_read_only'、'set_scratch'、'set_status'、'set_syntax_file'、'set_viewport_position'、'settings'、'show'、'show_at_center'、'size'、'split_by_newlines'、'substr'、'syntax_name'、' text_point','text_to_layout','展开','viewport_extent','viewport_position','visible_region','window','word']run_command'、'scope_name'、'score_selector'、'sel'、'set_encoding'、'set_line_endings'、'set_name'、'set_read_only'、'set_scratch'、'set_status'、'set_syntax_file'、'set_viewport_position'、'settings' , 'show', 'show_at_center', 'size', 'split_by_newlines', 'substr', 'syntax_name', 'text_point', 'text_to_layout', '展开', 'viewport_extent', 'viewport_position', 'visible_region', '窗口','单词']run_command'、'scope_name'、'score_selector'、'sel'、'set_encoding'、'set_line_endings'、'set_name'、'set_read_only'、'set_scratch'、'set_status'、'set_syntax_file'、'set_viewport_position'、'settings' , 'show', 'show_at_center', 'size', 'split_by_newlines', 'substr', 'syntax_name', 'text_point', 'text_to_layout', '展开', 'viewport_extent', 'viewport_position', 'visible_region', '窗口','单词']set_viewport_position'、'settings'、'show'、'show_at_center'、'size'、'split_by_newlines'、'substr'、'syntax_name'、'text_point'、'text_to_layout'、'unfold'、'viewport_extent'、'viewport_position' , 'visible_region', 'window', 'word']set_viewport_position'、'settings'、'show'、'show_at_center'、'size'、'split_by_newlines'、'substr'、'syntax_name'、'text_point'、'text_to_layout'、'unfold'、'viewport_extent'、'viewport_position' , 'visible_region', 'window', 'word']

4

1 回答 1

8

根据非官方文档的插件页面,Sublime Text 通过以下方式规范化命令名称:

  1. 去掉“命令”后缀
  2. 用下划线分隔驼峰式短语

因此,应按以下方式调用 DeleteCurrentFileCommand: view.run_command("delete_current_file")

使用此命令,我能够在 Python 控制台中完全按照上面列出的方式运行您的插件。

但是,如果我尝试运行view.run_command("DeleteCurrentFile"),那么控制台将显示一个空行。这可能导致 self.view.file_name() 返回 None 的想法。

于 2012-11-19T14:36:57.137 回答