如何为2种不同的语言配置Vim?

时间:2015-10-22 21:30:53

标签: ruby vim indentation file-type vim-syntax-highlighting

我目前正在使用Vim for Python,并希望在我学习Ruby的同时开始使用它。

有没有办法配置vimrc文件,以便根据当前正在处理的文件类型应用不同的设置?

例如,我的vimrc当前设置为有4个空格的缩进,我想将它们作为Ruby文件的2个空格。另外,我希望在处理ruby文件时使用语法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

语法高亮是否类似?

2 个答案:

答案 0 :(得分: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中,那么在他的回答中使用Cody描述的模式是明智的:

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 {1}} ...这使得FileType自动命令添加到您的vimrc基本上是多余的。

通过使用以下内容创建文件vimrc,让您的after/ftplugin/python.vim精益和干净:

 setlocal tabstop=8
 setlocal shiftwidth=4
 setlocal expandtab
对于ruby和其他文件类型

等等......

注意:如果您想完全覆盖默认的python filetype插件,请使用ftplugin/python.vim,如果您只想添加/更改一些内容,请使用after/ftplugin/python.vim

注意:路径相对于类似unix的系统上的~/.vim和Windows上的%userprofile%\vimfiles

答案 1 :(得分: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应该在您处于文件中时有效。