У меня есть delimitMate, установленный для завершения скобок в Vim, но он работает для всех файлов, а не только файлов .h и .cpp. У DelimitMate есть возможность отключить себя в буфере, поэтому мне нужно добавить что-то в мой .vimrc, который говорит «отключить delimitMate в буфере всех файлов, кроме файлов .h и .cpp», хотя я понятия не имею, как это сделать.Включение определенных плагинов и опций для файлов .h и .cpp только в Vim
ответ
Считывание документации DelimitMate по адресу :h 'b:delimitMate_autoclose'
. Добавьте следующую строку в ваш ~/.vimrc
:
let g:delimitMate_autoclose = 0
augroup my_delimitmate
autocmd!
autocmd FileType cpp let b:delimitMate_autoclose = 1
augroup END
Идея заключается в том, чтобы отключить AutoClose глобально (g:
) и включите его снова для конкретных буферов (b:
).
Вместо команд :autocmd
и :augroup
вы можете установить b:loaded_delimitMate
внутри соответствующего файла ftplugin. Пример добавить следующее ~/.vim/after/ftplugin/cpp.vim
:
let b:delimitMate_autoclose = 1
Этот метод может быть предпочтительным, если вы хотите сохранить ваш файл ~/.vimrc
чистыми или у вас уже есть много типов файлов конкретных команд, настройки или отображения.
Примечание: я не использую DelimitMate, поэтому я не тестировал ни одно из этих параметров.
Для получения дополнительной справки смотрите:
:h :aug
:h :au
:h FileType
:h 'b:delimitMate_autoclose'
:h delimitMateFileType
:h ftplugin
Я думаю, что вы ищете автокоманды. Автокоманды могут запускать кусочки vimscript всякий раз, когда происходит определенное событие. Вы можете просмотреть список всех возможных событий, выполнив :help autocmd-events
Итак, в соответствии с вашими потребностями сначала отключите delimitMate в своем vimrc. Затем, вы можете положить что-то подобное в вашем vimrc (после отключения delimitMate):
autocmd FileType cpp (insert command to disable delimitMate here)
Таким образом, ВИМ отключит delimitMate по умолчанию, но это позволит ей, если fieltype является каст. (это включает в себя файлы заголовков) Конечно, более подробная информация доступна по команде autocmd
делая :help :autocmd
Я думаю, что вы оба меня не поняли. Мне нужно только delimitMate для файлов .h и .cpp, ничего больше –
Мне нужно что-то вроде «if FileType cpp == true then continue; else b: loaded_delimitMate = 1» –
Вы можете сделать это: 'autcmd FileType * let b: loaded_delimitMate = & ft! = 'cpp''. Однако, используя параметр «отключить по умолчанию» ('delimitMate_offByDefault') и включите его, поскольку только cpp дает вам варианты позже по дороге, так как вы можете легко включить его для других типов файлов, добавив еще одну строку' autcmd FileType ... '. –