我正在尝试编写一个小插件来删除当前文件并关闭活动视图。 出于某种原因,self.view.file_name()始终返回None。
我是Python的新手,我不知道为什么它不能像这样工作。根据{{3}} 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 ','< strong>格式',' getattribute ','哈希',' init ',' len ','模块','新','减少',' reduce_ex ',' repr ',' setattr ',' sizeof ',' str ','子类别 ',' 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_o nly','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']
答案 0 :(得分:6)
根据Plugins page of the unofficial documentation,Sublime Text以下列方式规范化命令名称:
因此,应以下列方式调用DeleteCurrentFileCommand:
view.run_command("delete_current_file")
使用此命令,我能够完全按照上面在Python控制台中列出的那样运行您的插件。
但是,如果我尝试运行view.run_command("DeleteCurrentFile")
,则控制台会显示一个空行。这可能导致self.view.file_name()返回None。