【问题标题】:How can I configure Vim for 2 different languages?如何为 2 种不同的语言配置 Vim?
【发布时间】:2015-10-22 21:30:52
【问题描述】:

我目前正在使用 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 移开以进行检查,并可能将股票 /usr/share/vim/vim74/vimrc_example.vim 复制到 ~/.vimrc

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


【解决方案1】:

首先,

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

filetype plugin indent on
syntax on

第二,

这个 sn-p 在技术上是正确的:

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

但可以做到:

  • 通过删除条形和多余的sets,更简单、更易读,
  • 将其余的更改为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 的文件类型检测机制已经为您完成了大部分工作,方法是在每次使用值 python 触发 FileType 事件时在 &runtimepath 中查找 ftplugin/python.vimafter/ftplugin/python.vim... 这使得添加 @987654335 @ 自动命令到您的 vimrc 基本上是多余的。

通过创建包含以下内容的文件 after/ftplugin/python.vim 来保持您的 vimrc 简洁干净:

 setlocal tabstop=8
 setlocal shiftwidth=4
 setlocal expandtab

对于 ruby​​ 和其他文件类型等等……

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

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

【讨论】:

  • 感谢您的详细回复,非常有帮助。
  • 请注意,虽然#1-#3 很好了解,但 #4 才是您真正应该注意的。
【解决方案2】:
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 应该在你在文件中时工作。

【讨论】:

  • 自动命令!删除组的所有自动命令,所以如果你重新加载你的 .vimrc 就不会受到污染。
  • :h autocmd 将在 Vim 中为您提供更多信息。
  • 感谢您的信息,帮了大忙!
猜你喜欢
  • 1970-01-01
  • 2010-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-30
  • 1970-01-01
  • 2015-07-15
相关资源
最近更新 更多