按文件类型设置 Vim 的空格偏好设置

163

我在工作中需要遵循缩进的公司规范,具体如下:

  • 在编写 HTML 和 Ruby 代码时,使用 2 个空格进行缩进。
  • 在编写 JavaScript 代码时,使用 TAB 进行缩进,推荐设置 tabwidth=4 。

如何为不同的文件类型指定不同的空格偏好?


1
可能是重复的问题:通过文件类型更改Vim缩进行为 - acgtyrant
所有这些答案只是让我更加困惑。问题在于选项取决于个人喜好。虽然被接受的答案语法不错。这是一个很棒的指南:http://vimcasts.org/transcripts/2/en/ - Lindlof
5个回答

258

有很多方式,但这里有一种简单易懂的方式。将以下几行添加到您的~/.vimrc中:

autocmd FileType html setlocal ts=2 sts=2 sw=2
autocmd FileType ruby setlocal ts=2 sts=2 sw=2
autocmd FileType javascript setlocal ts=4 sts=4 sw=4

31
ts = '文件中每个 <Tab> 使用的空格数'sts = '编辑时每个 <Tab> 使用的空格数'sw = '自动缩进步骤使用的空格数'详情请参见:http://vimdoc.sourceforge.net/htmldoc/quickref.html#option-list - zdsbs
我需要至少为Ruby添加expandtab,可以在这里查看'too much php'的答案。 - Michael Durrant

91

Peter回答的很直接,但不幸的是选项不正确。您需要改用以下选项:

autocmd Filetype html setlocal ts=2 sw=2 expandtab
autocmd Filetype ruby setlocal ts=2 sw=2 expandtab
autocmd Filetype javascript setlocal ts=4 sw=4 sts=0 noexpandtab

还要注意:

  • 您可以通过使用:set list命令使vim显示制表符。
  • 一旦您正确设置了tab/space选项,您可以使用:retab!命令让vim修复文件(将空格替换为制表符或反之亦然)。

2
expandtab 相对于 sts=2 有什么好处? - James McMahon
12
@JamesMcMahon expandtab将所有制表符扩展为空格。sts(softtabstop)在缩进时插入空格和制表符:根据tabstop的大小,插入尽可能多的制表符以适应缩进,然后再插入空格。当然,如果打开了expandtab,则插入的所有制表符都会被转换为空格。https://dev59.com/7nI_5IYBdhLWcg3wBuNs 可以进一步帮助理解。没有expandtab,Peter的答案会插入宽度为2个字符的制表符,而不是空格。 - ajmccluskey

38
+1 给 Peter 的回答,但 Vim 也提供了另一种解决方案。如果你想要做的不仅仅是单个 setlocal 这样简单的设置,比如一次性设置大量选项、命令和映射,那么 vim 的 filetype plugin 功能可以帮你解决问题。
在你的 .vimrc 文件中需要加入 filetype plugin onfiletype plugin indent on,然后为 Ruby 等语言创建插件,只需创建 ~/.vim/ftplugin/ruby.vim 即可。你可以在这里使用任何你喜欢的命令,在加载 Ruby 文件时运行。推荐的命令包括 setlocalmap <buffer>command -buffer 和定义函数等。更多信息请参阅用户指南;如果你已经非常熟悉 vim 的脚本编写,则可以直接查看 :help 41.11,否则请先阅读 :help usr_40:help usr_41

11

还有一个不错的 Vim 脚本:DetectIndent,它会尝试检测你打开的文件的缩进方式。

如果你需要处理许多编码风格不同的文件时,它非常方便。

我在我的 .vimrc 中使用了一个自动命令:

:autocmd BufReadPost * :DetectIndent 

1
为了在按下tab键时插入空格字符,请设置“expandtab”选项:
:set expandtab

下一步是控制按下Tab键时插入的空格数量,设置“tabstop”选项。例如,要插入2个空格作为制表符,请使用:
:set tabstop=2

参考文献:http://vim.wikia.com/wiki/Converting_tabs_to_spaces


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接