Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 如何为两种不同的语言配置Vim?_Ruby_Vim_Indentation_File Type_Vim Syntax Highlighting - Fatal编程技术网

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

Ruby 如何为两种不同的语言配置Vim?,ruby,vim,indentation,file-type,vim-syntax-highlighting,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

我目前正在使用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
语法突出显示有类似的功能吗?

augroupruby
自动驾驶!
autocmd文件类型ruby set tabstop=8 | set shiftwidth=2 | set expandtab
... 任何其他特定于ruby的设置
螺旋端
augrouppython
自动驾驶!
autocmd文件类型python set tabstop=8 | set shiftwidth=4 | set expandtab
... 任何其他特定于python的设置
螺旋端

在语法高亮显示的情况下,它应该自动发生。如果vim没有检测到您的文件类型,则当您在文件中时,
:setf ruby
:setf python
应该可以工作。

首先,

确保在
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
但可以这样做:

  • 通过删除条形图和冗余的
    集合
    s,更简单、更可读
  • 将其余的选项更改为
    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.Vim
之后的/ftplugin/python.Vim
,这使得添加
filetype
自动命令您的
vimrc
基本上是冗余的

通过在/ftplugin/python.vim之后创建文件
vimrc
来保持您的
vimrc
整洁:

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

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


注意:在类unix系统上,路径与
~/.vim
有关,在Windows上,路径与
%userprofile%\vimfiles
有关。

语法突出显示应使用出厂设置。试着把你的.vimrc移到一边去检查一下,并可能把库存
/usr/share/vim/vim/vim74/vimrc_example.vim
复制到
~/.vimrc
。autocmd!删除组的所有自动命令,这样在重新加载.vimrc时不会受到污染。
:h autocmd将在Vim中为您提供更多信息。感谢您提供的信息,帮助很大!感谢您的详细回复,非常有帮助。请注意,虽然知道#1-#3很好,但是#4才是您真正应该注意的。