Виділення Vim для конкретних типів файлів (куди слід помістити синтаксичні файли, події vim, рядок, який потрібно поставити у vimrc)


17

Я визначив час файлу, jak.vimщоб запропонувати спеціальне підсвічування, коли я роблю нотатки, однак він застосовується до деяких файлів, які не мають .jakрозширення. Зокрема, файл з назвою progress.jlog. Просто щоб перевірити, чи проблема була специфічною для цього розширення, я перейменований progress.jlogна progress(без розширення), але зазнав тієї ж проблеми.

Що я зробив:

  • Я створив jak.vimу довіднику~/.vim/ftdetect
  • Я додав цей рядок: "au BufRead, BufNewFile * .jak встановив 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-файлі.
Синтаксис включити 
а.о. BufRead, BufNewFile * .jak безліч типів файлів = жак
Я спробував це з вашим файлом jak.vim .... Він добре працював для мене ....
Я використовую vim7.2 ...
редагувати:
Спробуйте це, у
мене була така ж проблема з тими рядками mkview і loadview ... просто встановіть файл у файлі один раз, і він буде збережений

Відкрийте файл, а потім зробити « : безліч Р = Jak », збережіть файл і закрийте ВІМ .... Тепер знову відкрийте файл ... підсвічування синтаксису повинен працювати зараз ...
mkview і loadview здається , щоб зберегти настройки висвітиться останній синтаксичних також….


намагаюся зараз ... Але чи знаєте ви, що робить .vim / ftdetect / папка? Я маю зазначити, що будь-який файл форматування в ньому стосується всіх типів файлів.
шістдесят футів

Так, це частково спрацювало. Однак у моєму vimrc був конфлікт з двома іншими лініями. Дивіться моє оновлення.
шістдесят футів

2

Треба визнати, я не знаю напевно, наскільки це було б корисно для вас ... Але ...

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

Я додав текст у випадку, якщо сторінка знята ... Або змінена ...

Як додати розширення файлу до підкреслення синтаксису vim Опубліковано Артемом Русаковським 2 квітня 2008 року в базах даних, Linux, програмування 24 смачні заощадження 2 копання Поділитися 3retweet

Оновлено: 8 липня 2009 р

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

Після копання я знайшов рішення. Додайте до ~ / .vimrc (файл конфігурації vim):

1 2 3 синтаксис філейного типу на Au BufNewFile, BufRead * .lmx встановити filetype = xml Після його застосування виділяється мій .lmx файл:

Цей же принцип працює, наприклад, для звалищ mysql, які я час від часу потрібно робити. Якщо у них немає розширення .sql, ви отримаєте щось на кшталт:

Після

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

Але чому і як це працює, запитаєте ви?

: help au: au [tocmd] [group] {event} {pat} [вкладено] {cmd}

Додайте {cmd} до списку команд, які Vim автоматично виконає {event} для файлу, що відповідає {pat}. : допомогти BufNewFile Коли Ви починаєте редагувати файл, який не існує. : допомогти BufRead Коли ви починаєте редагувати новий буфер, прочитавши файл у буфері. : Довідка з філейтипу насправді розповість всю цю історію в частині В.


Ага, швидше краще розглянемо це, але здається корисним ..
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

Я думаю, що все може крутитися навколо, але я не знавець.

Ваш файл виділення синтаксису має бути в каталозі синтаксису. Що стосується порад 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.