Sublime text:如何获取当前视图的文件名

Fel*_*lix 10 python plugins filenames delete-file sublimetext2

我正在尝试编写一个小插件来删除当前文件并关闭活动视图.出于某种原因,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')
Run Code Online (Sandbox Code Playgroud)

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','展开','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',' 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',' window','word']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']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']

Tal*_*lin 6

根据非官方文档Plugins页面,Sublime Text以下列方式规范化命令名称:

  1. 剥去"Command"后缀
  2. 单独的驼峰短语带有下划线

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

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

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