2012-11-13 47 views
10

我想寫一個小插件來刪除當前文件並關閉活動視圖。 由於某些原因,self.view.file_name()總是返回None。崇高的文字:如何獲取當前視圖的文件名

我是Python的新手,我不知道爲什麼它不能像這樣工作。根據API Reference 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):

[ '', 'delattr', '字典', 'DOC','格式','getattribute','hash','init',' len個 ' '模塊', '', '減少', 'reduce_ex', '再版', 'SETATTR', '的sizeof',' STR ,'add_regions','begin_edit','buffer_id','classify','command_history','em_width','encoding','end_edit','erase','','subclasshook','weakref' ,'erase_regions','erase_status','extract_completions','extract_scope','file_name','find' ,find_all,find_all_results,find_by_selector,fold,fold_regions,full_line, inlined_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']

+0

控制檯中的任何錯誤消息? –

+0

否。對'(f爲None)'的檢查總是爲真,因此它在到達'send2trash()'之前返回。不檢查'send2trash()'調用失敗。 當我在控制檯執行'view.file_name()'時,它返回正確的路徑。 – Felix

+0

什麼是打印目錄(self.view)的輸出? –

回答

5

按照Plugins page of the unofficial documentation,崇高文本正常化命令名稱以下列方式:

  1. 剝去了「命令」後綴
  2. 獨立駱駝套管短語用下劃線

因此,DeleteCurrentFileCommand應通過以下方式調用: view.run_command("delete_current_file")

使用此命令,我能夠完全按照上面在Python中列出的方式運行插件 安慰。

但是,如果我試着運行view.run_command("DeleteCurrentFile"),那麼控制檯會顯示一個空行。這可能導致了self.view.file_name()返回None的想法。

+0

哦,我現在覺得自己很愚蠢。我試圖在窗口對象上運行命令,就像'window.run_command('delete_current_file')'顯然是錯誤的。它在我調用'view.run_command()'的時候起作用。謝謝! – Felix

+0

不客氣! :) – Talvalin

相關問題