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', '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', 'unfold', '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', 'unfold', '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', 'unfold', '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

非公式ドキュメントのプラグインページによると、 SublimeTextは次の方法でコマンド名を正規化します。

  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 に答える