LINUX.ORG.RU

Проблемы с собственным файлом подсветки

 ,


0

1

После апгрейда vim перестал учитывать настройки подсветки в .vimrc. Я использую особый файл синтаксиса для *.cl, который указан в $HOME/.vimrc:

au BufNewFile,BufRead *.cl setf opencl

Теперь же работает только изменение /usr/share/vim/vim73/filetype.vim, что очень неудобно. Как теперь сделать override для синтаксиса?

Vim версии 7.3 с патчами 1-659.

★★★

Надо поместить это

augroup filetypedetect
    au BufNewFile,BufRead *.cl setf opencl
augroup END
в файл ~/.vim/filetype.vim

Согласно пункту C (англ.) в документации ":help new-filetype", этот файл грузится до аналогичного глобального файла.

Если хочется использовать ~/.vim/ftdetect/cl.vim или ~/.vimrc, то достаточно заменить ":setf opencl" на ":set filetype=opencl", так именно команда ":setfiletype" не позволяет установить новый тип для буфера. Но вариант с ~/.vim/filetype.vim выглядит более правильным.

xaizek ★★★★★ ()
Ответ на: комментарий от xaizek

Большое спасибо, заработало.

Но тем не менее довольно странно, что до апдейта (раньше был Vim 7.3 с патчами до 600) мой кривой вариант работал.

lu4nik ★★★ ()
Ответ на: комментарий от lu4nik

Что странно, это правда. У меня в 7.3-645, поведение аналогичное 7.3-659.

В списке последних патчей ничего интересного по теме не увидел. Может случайно пофиксили, кто его знает.

xaizek ★★★★★ ()
Ответ на: комментарий от xaizek

Если хочется использовать ~/.vim/ftdetect/cl.vim или ~/.vimrc, то достаточно заменить ":setf opencl" на ":set filetype=opencl", так именно команда ":setfiletype" не позволяет установить новый тип для буфера. Но вариант с ~/.vim/filetype.vim выглядит более правильным.

Осмелюсь спросить по сходной теме.
У меня vim/gvim/macvim некоторые файлы *.mm открывает с типом objcpp, что правильно, а некоторые нет. Приходится руками выставлять тип :set filetyp=objcpp
Это баг vim или какой то плагин мутит воду?

andreyu ★★★★★ ()
Ответ на: комментарий от andreyu

Скорее особенности определения, а не баг. В глобальном filetype.vim прописано

func! s:FTmm()
  let n = 1
  while n < 10
    let line = getline(n)
    if line =~ '^\s*\(#\s*\(include\|import\)\>\|/\*\)'
      setf objcpp
      return
    endif
    let n = n + 1
  endwhile
  setf nroff
endfunc

То есть буферу будет установлен тип objcpp если среди первых десяти строк будет найдена директива #include или #import. Как видно по коду функции, никаких настроек не предусмотрено, значит нужно зафорсить определение типа файла как objcpp в ~/.vim/filetype.vim. Можно ещё в modeline явно указывать тип файла или скопировать эту функцию в ~/.vim/filetype.vim и сделать разрешения неоднозначности типа файла более интеллектуальным (результат можно предложить как патч для Vim). Но, если файлы формата nroff с расширением mm редактируются нечасто, то первый вариант может быть самым подходящим.

xaizek ★★★★★ ()
Ответ на: комментарий от xaizek

Понял, спасибо за объяснение.
Захардкодил в ~/.vimrc строчку au BufNewFile,BufRead *.mm filetype=objcpp

andreyu ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.