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

Shi*_*a91 0 ruby vim file-type indentation 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
Run Code Online (Sandbox Code Playgroud)

语法高亮是否有类似的东西?

rom*_*inl 6

第一,

确保在您的顶部附近有以下几行vimrc:

filetype plugin indent on
syntax on
Run Code Online (Sandbox Code Playgroud)

第二,

这个片段在技术上是正确的:

autocmd FileType python set tabstop=8|set shiftwidth=4|set expandtab
autocmd FileType ruby set tabstop=8|set shiftwidth=2|set expandtab
Run Code Online (Sandbox Code Playgroud)

但它可以做成:

  • 通过删除条和冗余sets 更简单,更易读,
  • 更改剩余的更安全,setlocal以限制您对目标缓冲区的选择:

    autocmd FileType python setlocal tabstop=8 shiftwidth=4 expandtab
    autocmd FileType ruby   setlocal tabstop=8 shiftwidth=2 expandtab
    
    Run Code Online (Sandbox Code Playgroud)

第三,

当你重新获得你的时候,那些自动命令不会取代它们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
Run Code Online (Sandbox Code Playgroud)

第四,

Vim的文件类型检测机制已经通过查找ftplugin/python.vimafter/ftplugin/python.vim&runtimepath每次FileType使用值触发事件时为您完成大部分工作python...这使得FileType自动命令添加到您的vimrc大部分冗余.

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

 setlocal tabstop=8
 setlocal shiftwidth=4
 setlocal expandtab
Run Code Online (Sandbox Code Playgroud)

对于ruby和其他文件类型等等...

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

注意:路径与~/.vimunix类系统和%userprofile%\vimfilesWindows相关.