Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.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
File 按文件类型更改Vim缩进行为_File_Vim_Settings_Indentation - Fatal编程技术网

File 按文件类型更改Vim缩进行为

File 按文件类型更改Vim缩进行为,file,vim,settings,indentation,File,Vim,Settings,Indentation,有人能简单地向我解释一下根据文件类型更改Vim缩进行为的最简单方法吗?例如,如果我打开一个Python文件,它应该缩进2个空格,但是如果我打开一个Powershell脚本,它应该使用4个空格。根据~/.vimrc中的文件后缀放置autocmd命令 autocmd BufRead,BufNewFile *.c,*.h,*.java set noic cin noexpandtab autocmd BufRead,BufNewFile *.pl syntax on 您要查找的命令可能是ts

有人能简单地向我解释一下根据文件类型更改Vim缩进行为的最简单方法吗?例如,如果我打开一个Python文件,它应该缩进2个空格,但是如果我打开一个Powershell脚本,它应该使用4个空格。

根据~/.vimrc中的文件后缀放置autocmd命令

autocmd BufRead,BufNewFile   *.c,*.h,*.java set noic cin noexpandtab
autocmd BufRead,BufNewFile   *.pl syntax on

您要查找的命令可能是ts=和sw=

我通常使用
expandtab
set,但这对makefile不好。我最近补充说:

:autocmd FileType make set noexpandtab

到my.vimrc文件的末尾,它将Makefile、Makefile和*.mk识别为Makefile,并且不展开选项卡。您可以扩展它。

使用ftplugins或autocommands来设置选项

ftplugin 在
~/.vim/ftplugin/python.vim:

setlocal shiftwidth=2 softtabstop=2 expandtab
不要忘记在
~/.vimrc
中打开它们:

filetype plugin indent on
autocmd FileType python setlocal shiftwidth=2 softtabstop=2 expandtab
:h ftplugin
了解更多信息)

自动命令 在
~/.vimrc
中:

filetype plugin indent on
autocmd FileType python setlocal shiftwidth=2 softtabstop=2 expandtab
您可以将任何长命令或设置替换为短版本:
au

setl

sw

ts

sts

et


我还建议学习
tabstop
softtabstop
之间的区别。很多人都不知道
softtabstop

您可以添加
.vim
文件,以便在vim切换到特定文件类型时执行

例如,我有一个文件
~/.vim/after/ftplugin/html.vim
,其中包含以下内容:

setlocal shiftwidth=2
setlocal tabstop=2
这导致vim使用宽度为2个字符的制表符进行缩进(在我的配置中的其他地方全局设置了
noexpandtab
选项)


这里描述了这一点:,向下滚动到关于文件类型插件的部分。

虽然您可以使用缩进插件或手动使用设置来配置Vim的缩进,但我建议使用一个名为的python脚本,当您打开python文件时,它会自动为您设置相关设置。用于使使用Vindect更加有效。当我第一次开始编辑由其他人创建的具有各种缩进样式(制表符与空格和空格数)的python文件时,我感到非常沮丧。但是温德和

还建议:


    • 我们大多数人可能都知道这一点,但无论如何(我第一次感到困惑): 执行
      :set et
      :set
      expandtabs)不会更改文件中已有的选项卡,必须执行
      :retab
      。 例如:

      :set et
      :retab
      
      文件中的选项卡将替换为足够的空间。要恢复选项卡,只需执行以下操作:

      :set noet
      :retab
      

      就我个人而言,我在.vimrc中使用这些设置:

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

      编辑您的
      ~/.vimrc
      ,并为不同的缩进添加不同的文件类型,例如,我想要
      html/rb
      缩进2个空格,以及
      js/coffee
      文件缩进4个空格:

      " by default, the indent is 2 spaces. 
      set shiftwidth=2
      set softtabstop=2
      set tabstop=2
      
      " for html/rb files, 2 spaces
      autocmd Filetype html setlocal ts=2 sw=2 expandtab
      autocmd Filetype ruby setlocal ts=2 sw=2 expandtab
      
      " for js/coffee/jade files, 4 spaces
      autocmd Filetype javascript setlocal ts=4 sw=4 sts=0 expandtab
      autocmd Filetype coffeescript setlocal ts=4 sw=4 sts=0 expandtab
      autocmd Filetype jade setlocal ts=4 sw=4 sts=0 expandtab
      

      请参阅:

      我使用一个用C编写的实用程序,名为。它分析您加载的文件的前几千行,并确定Vim参数
      shiftwidth
      tabstop
      expandtab
      的值

      例如,这是使用gcc-O autotab.c-O autotab编译的。与Vim集成的说明位于顶部的注释标题中

      Autotab相当聪明,但有时会混淆,尤其是使用不同缩进样式不一致地维护的Autotab

      如果文件明显使用制表符或制表符与空格的组合进行缩进,Autotab将通过考虑内部元素在连续行之间的对齐等因素(如注释)来确定使用的制表符大小

      它适用于多种编程语言,并且可以容忍不遵循缩进增量的“带外”元素,例如C预处理指令、C语句标签,更不用说明显的空行了。

      今天,您可以尝试一下,也有一个适合它的方法。这样,您不仅可以在vim中更改缩进大小,还可以在许多其他编辑器中保持一致的编码样式

      下面是一个简单的编辑器配置,如您所见,python文件将有4个缩进空格,而pug模板文件只有2个缩进空格

      # 4 space indentation for python files
      [*.py]
      indent_style = space
      indent_size = 4
      
      # 2 space indentation for pug templates
      [*.pug]
      indent_size = 2
      

      对于使用
      autocmd
      的用户,最好将其分组。如果分组与文件类型检测相关,则可能有如下情况:

      augroup filetype_c
          autocmd!
          :autocmd FileType c setlocal tabstop=2 shiftwidth=2 softtabstop=2 expandtab
          :autocmd FileType c nnoremap <buffer> <localleader>c I/*<space><esc><s-a><space>*/<esc>
      augroup end
      
      augroup文件类型
      自动驾驶!
      :autocmd文件类型c setlocal tabstop=2 shiftwidth=2 softtabstop=2 expandtab
      :autocmd文件类型c nnoremap c I/**/
      螺旋端
      
      分组有助于组织
      .vimrc
      ,尤其是当一个文件类型具有多个关联规则时。在上面的示例中,定义了特定于.c文件的注释快捷方式


      autocmd!的初始调用
      告诉vim删除所述分组中先前定义的任何自动命令。如果再次获取
      .vimrc
      ,这将防止重复定义。有关更多信息,请参见
      :help augroup

      您应该将其放在
      ~/.vim/after/ftplugin/html.vim>中。但正如下面其他人所指出的,只需将
      autocmd文件类型html setlocal shiftwidth=2 tabstop=2
      添加到
      .vimrc
      中就更好了。哎哟,事实上,这就是我拥有该文件的地方。我会找到答案的。不过我不同意,我认为将不同文件类型的命令分离到不同的文件中会使一切变得更容易,特别是如果您对许多文件类型有要求,或者对某些文件类型有很多选项的话。实际上,没有太多理由为ftplugins使用after目录。Vim将加载它在运行时路径中找到的所有文件,而不仅仅是语法文件的第一个。仅供参考:不要将js用于javascript文件类型。改用javascript。(
      autocmd文件类型javascript setlocal shiftwidth=2 tabstop=2