2015-10-22 3 views
0

В настоящее время я использую Vim для Python и хотел бы начать использовать его, пока я изучаю Ruby.Как настроить Vim для двух разных языков?

Есть ли способ настроить файл vimrc, чтобы применить различные настройки в зависимости от того, какой тип файла обрабатывается?

Например, мой vimrc в настоящее время имеет отступы в 4 пробела, которые я хотел бы разместить в двух пространствах для файлов Ruby. Кроме того, я хотел бы, чтобы синтаксическая синтаксическая подсветка синтаксиса включалась при работе с рубиновыми файлами и подсветка синтаксиса Python для файлов python.

я наткнулся на это для определения вкладки пространства:

autocmd FileType python set tabstop=8|set shiftwidth=4|set expandtab 
autocmd FileType ruby set tabstop=8|set shiftwidth=2|set expandtab 

Есть ли что-то подобное для подсветки синтаксиса?

+3

Подсветка синтаксиса должна работать с заводскими настройками. Попробуйте переместить свой .vimrc, чтобы проверить это и, возможно, скопировать файл '/ usr/share/vim/vim74/vimrc_example.vim' в' ~/.vimrc'. – Kenney

ответ

1
augroup ruby 
    autocmd! 
    autocmd FileType ruby set tabstop=8|set shiftwidth=2|set expandtab 
    ... Any other ruby specific settings 
augroup END 

augroup python 
    autocmd! 
    autocmd FileType python set tabstop=8|set shiftwidth=4|set expandtab 
    ... Any other python specific settings 
augroup END 

В случае подсветки синтаксиса это должно происходить автоматически. Если vim не определяет тип файла для вас, :setf ruby или :setf python должен работать, пока вы находитесь в файле.

+0

Автозапуск! удаляет все автокоманды для группы, поэтому вы не получаете загрязнения, если перезагружаете .vimrc. –

+0

': h autocmd' предоставит вам больше информации в Vim. –

+1

Спасибо за информацию, поможет вам! – Shinkawa91

6

Во-первых,

убедитесь, что следующие строки где-то вблизи верхней части vimrc:

filetype plugin indent on 
syntax on 

Во-вторых,

этот фрагмент технически правильно:

autocmd FileType python set tabstop=8|set shiftwidth=4|set expandtab 
autocmd FileType ruby set tabstop=8|set shiftwidth=2|set expandtab 

, но это может быть сделано:

  • проще и более удобным для чтения путем удаления стержней и избыточных set с,
  • безопаснее, изменяя оставшиеся, в setlocal для того, чтобы ограничить возможности для целевой буфер:

    autocmd FileType python setlocal tabstop=8 shiftwidth=4 expandtab 
    autocmd FileType ruby setlocal tabstop=8 shiftwidth=2 expandtab 
    

В-третьих,

Эти автокоманды не заменяют себя при повторном источнике вашего vimrc: они просто накапливаются, и вверх, и вверх ... пока ваш Vim не станет невыносимо медленным и не реагирующим.

Если вы настаиваете на сохранении этих параметров в вашем vimrc было бы целесообразно использовать шаблон, описанный Коди в своем ответе:

augroup python 
    autocmd! 
    autocmd FileType python setlocal tabstop=8 shiftwidth=4 expandtab 
augroup END 

augroup ruby 
    autocmd! 
    autocmd FileType ruby setlocal tabstop=8 shiftwidth=2 expandtab 
augroup END 

Четвертую,

механизм обнаружения типа файла Vim, уже делает большая часть работы для вас ищет ftplugin/python.vim и after/ftplugin/python.vim в &runtimepath каждый раз при запуске события FileType со значением python ... которое делает добавление FileType автокоманды на ваш vimrc в значительной степени избыточны.

Держите vimrc мяса и чистой, создав файл after/ftplugin/python.vim с этим содержимым:

setlocal tabstop=8 
setlocal shiftwidth=4 
setlocal expandtab 

и так далее для рубина и других типов файлов ...

Примечание: используйте ftplugin/python.vim, если вы хотите, чтобы полностью переопределить default python filetype plugin и after/ftplugin/python.vim, если вы хотите только добавить/изменить несколько вещей.

Примечание: пути относятся к ~/.vim на unix-подобных системах и %userprofile%\vimfiles на Windows.

+0

Спасибо за подробный ответ, очень полезно. – Shinkawa91

+0

Обратите внимание, что # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Это то, что вы должны действительно обратить внимание. – Amadan