Подсветка Vim для определенных типов файлов (куда помещать файлы синтаксиса, события vim, строки для помещения в vimrc)


17

Я определил время файла, jak.vimчтобы предлагать настраиваемое выделение, когда делаю заметки, однако оно применяется к некоторым файлам, которые не имеют .jakрасширения. В частности, файл с именем progress.jlog. Просто проверить , если проблема была специально для этого расширения я переименованной progress.jlogв progress(без расширения) , но испытывала те же проблемы.

Что я сделал:

  • Я создал jak.vimв каталоге~/.vim/ftdetect
  • Я добавил эту строку: "au BufRead, BufNewFile * .jak set filetype = jak" вверху, как описано в справочнике vim.
  • Я перезапустил vim (: x, а затем снова открыл)

Вот как ~/.vim/ftdetect/jak.vimвыглядит моя :

~/.vim/ftdetect][505]% cat jak.vim
au BufRead, BufNewFile *.jak set filetype=jak

syn region JakeSubtitle start=+==+ end=+==+
highlight JakeSubtitle ctermbg=black ctermfg=DarkMagenta

syn region JakeTitle start=+===+ end=+===+
highlight JakeTitle ctermbg=black ctermfg=yellow

syn region JakeMasterTitle start=+====+ end=+====+
highlight JakeMasterTitle cterm=bold term=bold ctermbg=black ctermfg=LightBlue

syn region emphasis start=+<em>+ end=+</em>+
highlight emphasis ctermbg=black ctermfg=yellow

" makes all of the numbered items bold."
" (this works I just don't like the effect.  Decided to change to just highlight the "number)
"syn region numberedItem start=+^\t*\d*)+ end=+\n+"
syn match numberedItem +^\t*\d*)+
highlight numberedItem cterm=bold

И только в том случае, если вам нужно знать, вот как .vimrcвыглядит моя :

~/.vim/ftdetect][508]% cat ../../.vimrc
"on will override defaults set.  Enable will allow you to set defaults."
" also turns on filetype"
"syntax on"
syntax enable

set nocompatible

" ???"
set backspace=2

"Auto indent"
set ai

"Map jj to Esc so that you do not have to reach for the Esc button"
imap jj <Esc>

"do not allow the search to wrap around the screen, must stop at the bottom."
set nowrapscan

"when doing a search highlight all occurances"
":set hlsearch"

"stop text from wrapping on the screen"
set nowrap

"turn the mouse on while in insert mode"
set mouse=i

"attempting to highlight specific keywords so it is easy to see in code."
"see help e410 for more info."
"see this post I created: /superuser/110054/custom-vim-highlighting"
"Legal colors: Black, DarkBlue, DarkGreen, DarkCyan, DarkRed, DarkMagenta,"
"Brown, DarkYellow, LightGray, LightGrey, Gray, Grey, DarkGray, DarkGrey,"
"Blue, LightBlue, Green, LightGreen, Cyan, LightCyan, Red, LightRed, Magenta,"
"LightMagenta, Yellow, LightYellow, White"
syn keyword JakeKeywords        Question TODO Answer JAKEHTTPS PossibleProblem
highlight JakeKeywords cterm=bold term=bold ctermbg=black ctermfg=Blue


"for case-insensitve searches"
set ignorecase

"Override the 'ignorecase' option if the search pattern contains upper"
"case characters.  Only used when the search pattern is typed and"
"'ignorecase' option is on."
set smartcase


"use indents as the folding method"
set foldmethod=indent

"make vim save and load the folding of the document each time it loads"
"also places the cursor in the last place that it was left."
au BufWinLeave * mkview
au BufWinEnter * silent loadview

Примечание: я закончил все цитаты (комментарии), чтобы было легче читать


Обновить

Я нашел пост nsharish очень полезным. Они предложили мне добавить это в мой vimrc:

au BufRead,BufNewFile *.jak set filetype=jak

и добавить мой jak.vimфайл в~/.vim/syntax

К сожалению, этот код конфликтует с этими двумя строками (в моем vimrc)

au BufWinLeave *.c mkview
au BufWinEnter *.c silent loadview

Я использую эти два, чтобы сохранить свои сгибы, местоположение курсора и т. Д. При загрузке vim (см. :help lo). Если я закомментирую эти две строки, предложение nsharish работает как шарм. С этими двумя строками нет подсветки ни в одном из моих файлов.

Вывод

Я отметил ответ nsharish как лучший ответ (потому что он наиболее полезен для меня). Однако вот как я решил проблему:

Nsharish был прав, мне нужна эта строка в моем .vimrc:

syntax enable
au BufRead,BufNewFile *.jak set filetype=jak

И мне нужно было переместить мой jak.vimфайл в ~/.vim/syntax.

Однако, как отмечалось выше, возник конфликт с этими строками:

au BufWinLeave * mkview
au BufWinEnter * silent loadview

Когда эти строки были прокомментированы, подсветка сработала.

Что мне нужно было сделать, это изменить на ...set filetype...это:

au BufWinEnter,BufRead,BufNewFile *.jak set filetype=jak

Я думаю, что BufWinEnter вызывается после файла BufRead / BufNew, поэтому подсветка перезаписывалась форматированием, сохраненным с прошлого раза.

Еще раз спасибо nsharish за помощь в разработке этого решения.


1
в каком смысле операторы * .c конфликтуют с оператором * .jak?
Акира

Ответы:


10

Вы пробовали это ..

  • Поместите свой jak.vim в .vim / синтаксис папки
  • поместите следующие строки только в ваш файл .vimrc.
включить синтаксис 
au BufRead, BufNewFile * .jak установить filetype = jak
Я попробовал это с вашим файлом jak.vim .... Он работал нормально для меня ....
Я использую vim7.2 ...
Редактировать:
Попробуйте это, у
меня была та же проблема с этими строками mkview и loadview ... просто установите тип файла один раз в файле, и он будет сохранен

Откройте файл, затем выполните команду « : set ft = jak », сохраните файл и выйдите из vim .... Теперь снова
откройте файл ... Подсветка синтаксиса должна работать сейчас ... Кажется, mkview и loadview сохраняют последние настройки подсветки синтаксиса также....


пытаясь прямо сейчас ... Но знаете ли вы, что делает папка .vim / ftdetect /? Поведение, которое я испытываю, заключается в том, что любой файл форматирования там применяется ко всем типам файлов.
sixtyfootersdude

Да, это частично сработало. Однако в моем vimrc был конфликт с двумя другими строками. Смотрите мое обновление.
sixtyfootersdude

2

Я должен признать, я не знаю наверняка, насколько это было бы полезно для вас ... Но ...

http://beerpla.net/2008/04/02/how-to-add-a-vim-file-extension-to-syntax-highlighting/

Я добавил текст, если страница удалена ... Или изменена ...

Как добавить расширение файла для выделения синтаксиса vim Автор: Артем Руссаковский, 2 апреля 2008 г., Базы данных, Linux, Программирование 24 восхитительных сейва 2 diggs Share 3retweet

Обновлено: 8 июля 2009 г.

Сегодня мне задали вопрос об определении пользовательских расширений для подсветки синтаксиса vim, чтобы, например, vim знал бы, что example.lmx на самом деле имеет тип xml, и применил к нему подсветку синтаксиса xml. Я знаю, что vim уже автоматически делает это не только на основе расширения, но и ищет определенные строки внутри текста, например

Покопавшись, я нашел решение. Добавьте следующее в ~ / .vimrc (файл конфигурации vim):

1 2 3 синтаксис для типа файла в au BufNewFile, BufRead * .lmx set filetype = xml После его применения мой файл .lmx выделяется:

Тот же принцип работает, например, для дампов MySQL, которые я должен делать время от времени. Если у них нет расширения .sql, вы получите что-то вроде:

После

1 2 3 Синтаксис для типа файла на au BufNewFile, BufRead * .dump set filetype = sql все в порядке:

Но почему и как это работает, спросите вы?

: help au: au [tocmd] [group] {event} {pat} [nested] {cmd}

Добавьте {cmd} в список команд, которые Vim выполнит автоматически при {событии} для файла, соответствующего {pat}. : help BufNewFile При начале редактирования файла, который не существует. : help BufRead При начале редактирования нового буфера, после чтения файла в буфер. : help filetype на самом деле расскажет всю эту историю в части B. И вот как вы это делаете, ребята.


Да, в ближайшее время будет лучше разобраться в этом, но выглядит полезным ...
sixtyfootersdude

Ну, это может решить одну проблему, но я не думаю, что это решит эту проблему ... Я думаю, что ключ к этому связан с .vim/ftdetectкаталогом ...
sixtyfootersdude

Я, честно говоря, даже не использую VIM, поэтому я должен
поверить

1

Я пытался воспроизвести то, что вы сделали, но не смог применить тип файла к другим расширениям.

Я также обнаружил, что это помогло:

В справочном файле Vim для 'new-filetype' упоминается создание собственного файла 'filetype.vim' ~/.vim/filetype.vim и запись ваших автокоманд в этом файле:

if exists("did_load_filetypes")
  finish
endif
augroup filetypedetect
  au! BufRead,BufNewFile *.jak      setfiletype jak
augroup END

Все эти команды синтаксиса и выделения из вашего jak.vim должны храниться в ~/.vim/syntax, так что скопируйте их в ~/.vim/syntax/jak.vim(без auкоманды).

Вам также придется выйти из Vim и перезапустить, чтобы получить изменения.


1

Я думаю, что вещи могут быть искажены, но я не эксперт Vim.

Ваш файл подсветки синтаксиса должен находиться в каталоге синтаксиса. В советах nsharish может быть то, что входит в файл, который вы помещаете в ftdetect.

Эта часть:

au BufRead,BufNewFile *.jak set filetype=jak

В .vimrc вам также может понадобиться добавить строку вроде:

au! syntax jak source $VIM/syntax/jak.vim

ИМХО, в этом больше смысла. Надеюсь, это поможет.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.