Автозаполнение 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