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

我目前正在使用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

是否有类似的语法突出显示?


第一,

确保你的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并且在&runtimepath after/ftplugin/python.vim之后&runtimepath每次使用值python触发FileType事件时都会执行大部分工作......这会使FileType自动命令添加到您的vimrc基本上是多余

    使用以下内容after/ftplugin/python.vim创建文件after/ftplugin/python.vim保持您的vimrc精益和清洁:

     setlocal tabstop=8
     setlocal shiftwidth=4
     setlocal expandtab
    

    等红宝石和其他文件类型...

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

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


    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应该在文件中工作。

    链接地址: http://www.djcxy.com/p/49453.html

    上一篇: How can I configure Vim for 2 different languages?

    下一篇: Vim: what's the default backspace behavior?