#vim #file-type #language-detection
#vim #тип файла #определение языка
Вопрос:
Редактор Vim поставляется с подсветкой синтаксиса для многих разных языков программирования.
Вопросы:
- В Emacs настройки, зависящие от языка, называются «режимами». Однако в Vim термин «режим» относится к командному режиму или режиму вставки. Итак, каков термин Vim для настроек, зависящих от языка программирования?
- Определяется ли язык программирования документа по расширению имени файла или по его содержимому?
- Как я могу узнать, в каком режиме Vim находится в режиме, зависящем от языка программирования?
- Как я могу перезаписать это раз и навсегда для определенного класса документов?
Комментарии:
1. (1) Типы файлов. Смотрите
:h filetype
. (2) Оба, в зависимости от файла. (3):set ft?
. (4) Зависит от того, что вы подразумеваете под «классом документов».:h :autocmd
и:h FileType
может помочь.2. Под «классом документов» я имел в виду «тип файла», как я узнал из вашего краткого ответа на (1).
3. Не могли бы вы повторно отправить свой комментарий в качестве ответа и, возможно, немного уточнить (4)?
Ответ №1:
Отправляем ответ, как и было запрошено.
(1) В Emacs настройки, зависящие от языка, называются «режимами». Однако в vim термин «режим» относится к режиму командной строки или вставки. Итак, каков термин vim для настроек, зависящих от языка программирования?
Эквивалентный термин Vim filetype
. Vim использует filetype
s для применения языковых параметров, отступов, подсветки синтаксиса, сопоставления клавиш и т.д. Это подробно описано в справке, см. :h filetype
.
Чтобы включить автоматическое filetype
обнаружение и обработку, вы обычно добавляете что-то вроде этого в свой vimrc
:
filetype plugin indent on
syntax on
Чтобы переопределить настройки, которые Vim предоставляет вам таким образом, вам нужно добавить переопределения в файл ~/.vim/after/ftplugin/<filetype>.vim
(или эквивалент). Смотрите :h ftplugin
более подробную информацию.
(2) Определяется ли язык программирования документа по расширению имени файла или по его содержимому?
Используются оба метода. Vim выполняет большинство filetype
обнаружений в файле filetype.vim
в его каталоге времени выполнения. Чтобы узнать точное местоположение этого файла:
:echo $VIMRUNTIME.'/filetype.vim'
Плагины могут добавлять больше filetype
и / или переопределять обнаружение и обработку стандартных.
(3) Как я могу узнать, в каком режиме vim находится в режиме, зависящем от языка программирования?
Из Vim:
set ft?
(4) Как я могу перезаписать это раз и навсегда для определенного класса документов?
Для изменения filetype
текущего файла:
:setf <new_filetype>
или
:setl ft=<new_filetype>
Чтобы сделать изменение постоянным: сделайте это из modeline
(ср. :h modeline
). Например:
# vim: filetype=python
Вы также можете использовать autocmd
s для достижения того же эффекта:
autocmd BufRead,BufNewFile *.py setlocal filetype=python
Прочитайте :h filetype
, где все это подробно описано.
Ответ №2:
Как они вызываются и как их обнаружить
Vim использует файл filetype.vim, который используется для определения «типа» файла. Итак, если вы редактируете файл python «example.py » и вы использовали команду : set ft? он должен отображать filetype=python. Использование типа файла VIM определяет, загружены ли какие-либо плагины, правила отступов или подсветка синтаксиса, связанные с python.
Как их перезаписать
Вы можете написать свои собственные правила отступов или подсветки синтаксиса и другие правила для языка программирования, поместив эти настройки в свой vimrc. используя язык vim под названием VIML, вы можете увидеть этот раздел в Learn Vimscript the Hard Way, где автор определяет типы файлов Potion. Как только вы определяете тип файла, который выполняется с использованием расширения файла, например, файлы python *.py или файлы erlang *.erl, вы можете добавить свои собственные настройки для конкретного языка.