Возвышенный текст: как получить имя файла текущего вида

Я пытаюсь написать крошечный плагин для удаления текущего файла и закрытия активного представления. По какой-то причине self.view.file_name() всегда возвращает None.

Я новичок в Python, и я понятия не имею, почему это не работает. В соответствии с API Reference имя_файла() возвращает имя файла текущего представления.

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', ' dict', ' doc', '< хеш ',' init ',' len, . > > Новый ', уменьшить, уменьшить. > > , размер ', размер ", str", подкласs > ',' 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_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']

Ответ 1

Согласно странице Плагины неофициальной документации, Sublime Text нормализует имена команд следующим образом:

  • Сбросьте суффикс "Command"
  • Отдельные фразы с очерченными верблюдами с символами подчеркивания

Таким образом, DeleteCurrentFileCommand следует вызывать следующим образом:  view.run_command("delete_current_file")

С помощью этой команды я смог запустить ваш плагин точно так же, как указано выше в консоли Python.

Однако, если я попытался запустить view.run_command("DeleteCurrentFile"), консоль отобразит пустую строку. Возможно, это привело к тому, что self.view.file_name() возвращал None.