Как получить текущий тип файла в vimscript, скажем в .vimrc или обычный скрипт плагина? Линияvim: как получить filetype в скрипте плагина
echo &filetype
возвращает пустую строку.
Как получить текущий тип файла в vimscript, скажем в .vimrc или обычный скрипт плагина? Линияvim: как получить filetype в скрипте плагина
echo &filetype
возвращает пустую строку.
Вам необходимо учитывать сроки вашего плагина. Когда ваш скрипт подключен во время запуска Vim, буфер еще не загружен, поэтому &filetype
пуст. Поэтому, что-то вроде этого
let s:formatprgvarname = "g:formatprg_".&filetype
делает не работу! (Для типа файла плагин (в ~/.vim/ftplugin/
), это разные, те, получены только тогда, когда Filetype было обнаружено Но, как я понимаю, вы хотите плагин общего назначения, который учитывает текущий тип файла.).
Вместо , удалите скрипт-локальную переменную s:formatprgvarname
и разрешите &filetype
в точке действия; т.е. когда запускается функция автоматического форматирования (путем сопоставления или пользовательской команды). Если у вас нет такого триггера, вы можете подключить в FileType
события и установить (предпочтительно буфер-местный) переменный, то:
autocmd FileType * let b:formatprgvarname = "g:formatprg_".&filetype
Возникает ли событие FileType при переключении на буфер с другим типом файла? –
Нет, только когда он изначально обнаружен. –
В функции:
let current_filetype = &filetype
В командной строке:
:echo &filetype
&filetype
пуст, когда нет Filetype (очевидно). Если вы попытаетесь использовать его, когда буфер не загружен, вы просто ничего не получите.
редактировать
&filetype
только полезно, когда вам необходимо знать текущий тип файла в функции, выполняемой во время выполнения при редактировании буфера.
&filetype
установлен только тогда, когда определено, что буфер имеет некоторый тип файла. Когда он выполняется, скрипт (vimrc, ftplugin, whatever) не проходит через то, что он будет делать, когда он редактируется: no filetype check, no &filetype
.
Примером может служить функция, отображающая текущий файл в другом внешнем приложении в зависимости от его типа файла. Использование &filetype
в любом другом контексте не имеет смысла, потому что оно будет пустым.
' & filetype', кажется, пуст в pluginscript для всех типов файлов, таких как vim и python. (Тем не менее, in-vim running ': echo & filetype' дает правильный тип файла.) –
' & filetype' работает во время выполнения, а не в вашем скрипте. Вы используете '& filetype' в функции, которая выполняется во время выполнения. – romainl
@ Chiel92, см. Мое редактирование. – romainl
Покажите нам, где вы его используете. В '.vimrc', буферы еще не загружены, поэтому он пуст. –
Мне это нужно в '.vim/bundles/vim-autoformat/plugin/autoformat.vim'. –
В то время как sourcing (то же, что и с '.vimrc', это слишком рано) или внутри функции/mapping/command ?! –