Как вызываются настройки для конкретного языка программирования в Vim и как их обнаружить перезаписать?

#vim #file-type #language-detection

#vim #тип файла #определение языка

Вопрос:

Редактор Vim поставляется с подсветкой синтаксиса для многих разных языков программирования.
Вопросы:

  1. В Emacs настройки, зависящие от языка, называются «режимами». Однако в Vim термин «режим» относится к командному режиму или режиму вставки. Итак, каков термин Vim для настроек, зависящих от языка программирования?
  2. Определяется ли язык программирования документа по расширению имени файла или по его содержимому?
  3. Как я могу узнать, в каком режиме Vim находится в режиме, зависящем от языка программирования?
  4. Как я могу перезаписать это раз и навсегда для определенного класса документов?

Комментарии:

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, вы можете добавить свои собственные настройки для конкретного языка.