Автозаполнение Python Shebang (в не.py файле) путем сопоставления с autocmd

Я изучаю Vim, и я успешно настроил свой файл.vimrc так, что всякий раз, когда я делаю новый файл Python Python, автоматически генерируются соответствующие shebang и header. Ты меня!

Тем не менее, при построении терминальных конвейеров мне не всегда нравится включать расширение.py для программ, к которым я передаю данные. Следовательно, шебанг не будет генерироваться автоматически. Печальный!

Не повторяя то, что я написал для autocmd (на это ушло много проб и ошибок, потому что так я учусь), могу ли я отобразить строку типа "pyhead" в режиме INSERT или создать макрос, привязанный к autocmd, чтобы легко реализовать мой shebangbang, когда я решу не использовать расширение.py? Мне кажется, что простая карта уже существующей команды должна предотвратить беспорядок.vimrc. Я поместил свой autocmd в группу следующим образом:

    augroup Shebang
        autocmd BufNewFile *.py 0put =\"#!/usr/bin/env python\<nl>...
                                     ...# -*-coding: utf-8 -*-\
                                     ...<nl>\<nl>\"
                                     ...|put ='#'.expand('%:t')
                                     ...|put =\"#<My_NAME>\"
                                     ...|put ='#LAST UPDATED: '.strftime('%m-%d-%Y')\|$ 
    augroup end

Для ясности, autocmd находится на одной строке, но я добавил три точки для обозначения продолжения (чтобы вам не нужно было прокручивать). Если это глупый запрос и ответ прост, пожалуйста, сделайте выговор. Спасибо!

1 ответ

Решение

Вы можете извлечь свой длинный :put команда в функцию, а затем :call что изнутри :autocmd,

function! InsertPythonShebang()
    0put =...
endfunction

autocmd BufNewFile *.py call InsertPythonShebang()

Затем вы можете повторно использовать функцию в отображении:

nnoremap <Leader>py :call InsertPythonShebang()<CR>

Или пользовательская команда:

command! -bar PyBang call InsertPythonShebang()

Ваше предложение отреагировать на вставку специального ключевого слова также было бы возможно, но я не буду предлагать решение, потому что я думаю, что оно не идиоматично, и реализация будет более сложной (особенно если вы хотите повторно использовать :put, а не только сгенерированный текст). Также обратите внимание, что есть несколько плагинов сниппетов, которые предлагают аналогичную функциональность (но снова используют ту же строку для вашего :autocmd было бы проблемой).

Я бы порекомендовал триггер на настройку python Тип файла в пустом буфере. Для того, чтобы иметь подсветку синтаксиса, вам нужно :setf python, тем не мение. (Встроенное определение типа файла потребует .py расширение файла, или существующая линия Шебанга для работы. Словить 22.)

autocmd FileType python if line('$') == 1 && empty(getline(1)) | call InsertPythonShebang() | endif
Другие вопросы по тегам