Я установил gvim на Fedora и Win7. Я обнаружил, что и vim, и gvim в Fedora не выделяют имя функции в коде c, в то время как gvim в win7 делает его выделенным.
Я обнаружил, что на win7 vim73/syntax/c.vim
есть дополнительные строки в конце:
syn match cFunction "\<[a-zA-Z_][a-zA-Z_0-9]*\>[^()]*)("me=e-2
syn match cFunction "\<[a-zA-Z_][a-zA-Z_0-9]*\>\s*("me=e-1
hi cFunction gui=NONE guifg=#B5A1FF
Если я добавлю эти строки в c.vim
Fedora, gvim также сможет выделить имя функции.
Чтобы сохранить мобильность, я хочу просто изменить, .vimrc
чтобы выделить имя функции. Однако после добавления этих строк в .vimrc
, это не сработало.
Итак, кто-нибудь может мне помочь? Я сделал поиск, и есть много решений, чтобы выделить имена функций в vim. Но мне просто интересно, как заставить эти строки работать .vimrc
. Огромное спасибо!
vimrc
syntax-highlighting
tamlok
источник
источник
~/.vim/after/syntax/c.vim
вместо..vimrc
?autocmd BufEnter *.c hl ...
, но вы должны держать это вafter/syntax/c.vim
. Любая современная версия Vim поймет.vim/after/
каталог. В Windows путь будет такимvimfiles/after/...
, поэтому переносимость не должна быть большой проблемой (особенно если вы используете какие-либо плагины).Ответы:
Причина этого заключается в том, что Vim очищает существующие элементы синтаксиса при установке
'syntax'
параметра. Это сделано потому, что сохранение старых элементов синтаксиса может привести к некоторым странным ситуациям; если у вас есть буфер, который имеетsyntax=foo
и использует,set syntax=bar
то в итоге вы получите буфер с подсветкой синтаксиса для обоихfoo
иbar
.Когда Vim запускается, он загружает ваш
vimrc
один раз (при запуске), но загружает файлы типов файлов и синтаксиса каждый раз, когда задаются параметрыfiletype
илиsyntax
, что сбрасывает значения, которые вы установили в вашем vimrc.Даже если он не сбросит его, было бы неплохо просто добавить его в vimrc, поскольку он будет применяться ко всем буферам, а не только к буферам с
syntax=c
.В приведенном ниже тексте предполагается использование Vim в системе Unix-y, но он будет работать и для пользователей Neovim и Windows:
~/.vim/
на~/.config/nvim/
.~/.vim/
на%USERPROFILE%\vimfiles\
.Переопределение всего файла
Самый простой способ изменить что-либо - просто переопределить это . Для этого создайте файл в
~/.vim/<file>.vim
.<file.vim>
путь относительно$VIMRUNTIME
(включая подкаталоги). В вашем примере так и должно бытьsyntax/c.vim
. Он будет загружен вместо файла в$VIMRUNTIME
.Результатом этого является то, что легче вносить изменения - внесение изменений в файлы синтаксиса может быть немного сложнее. Недостатком является то, что в будущем вы не получите никаких обновлений для общесистемного файла.
Я часто использую это в качестве отправной точки для экспериментов с файлами синтаксиса, а затем извлекаю свои локальные изменения в локальное дополнение, используя один из методов, описанных ниже.
Местные дополнения
Существует два способа добавления локальных дополнений в файлы синтаксиса, они функционально идентичны, и вы можете использовать метод, который вы предпочитаете.
Syntax
autocmdИспользуйте
Syntax
autocmd:Обратите внимание, что связывание нескольких команд с этим
|
здесь проблематично, поскольку они, как правило, интерпретируются как часть:syn
команды, поэтому я повторил этоautocmd Syntax c
несколько раз. Альтернативой может быть использование функции:Преимущество состоит в том, что все изменения могут содержаться в одном файле. Недостаток в том, что это немного некрасиво, особенно если у вас много изменений.
после каталога
Используйте после-каталога:
~/.vim/after/<file>.vim
.Это будет загружено после
<file>.vim
has, где<file.vim>
путь относительно$VIMRUNTIME
(включая подкаталоги). В вашем примере так и должно бытьsyntax/c.vim
.Также см
:help after-directory
.Преимущество в том, что он немного более читабелен, чем autocmd, особенно если у вас много изменений. Недостатком является то, что вам нужно будет скопировать дополнительный файл, если вы хотите отразить настройки Vim на разных компьютерах (это важная причина, по которой многие люди хранят свои файлы Vim в репозитории GitHub, поэтому его можно легко отразить на разных компьютерах. ).
источник