按文件类型设置 Vim 空白首选项
Posted
技术标签:
【中文标题】按文件类型设置 Vim 空白首选项【英文标题】:Setting Vim whitespace preferences by filetype 【发布时间】:2010-12-06 11:10:36 【问题描述】:在我的工作中,我需要按照house风格进行缩进,具体如下:
html 和 ruby 编码时有 2 个空格 javascript 编码时的标签,推荐使用 tabwidth=4为每种文件类型指定不同的空白首选项的最佳方法是什么?
【问题讨论】:
Changing Vim indentation behavior by file type的可能重复 所有这些答案让我更加困惑。问题是选项取决于偏好。不过,接受的答案有一个很好的语法。这是一个很好的指南:vimcasts.org/transcripts/2/en 【参考方案1】:有很多方法,但这里有一个简单易懂的方法。将这些行添加到您的 ~/.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
【讨论】:
ts = '文件中彼得的回答很简单,但不幸的是选项不正确。您需要改用以下选项:
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 显示制表符。
正确设置制表符/空格选项后,您可以使用:retab!
命令让 vim 修复文件(用制表符替换空格,反之亦然)。
【讨论】:
expandtab
比 sts=2
有什么好处
@JamesMcMahon expandtab 将所有制表符扩展为空格。 sts (softtabstop) 为缩进插入空格和制表符:根据制表符的大小,尽可能多的制表符适合缩进,然后是空格。当然,如果打开了 expandtab,所有插入的选项卡都会转换为空格。 ***.com/questions/1562336/… 可能会有所帮助。如果没有展开选项卡,彼得的答案将插入 2 个字符宽的选项卡,而不是空格。【参考方案3】:
+1 对彼得的回答,但 Vim 也提供了另一种解决方案。如果你想做一些比单个 setlocal
更复杂的事情,比如一次设置一大堆选项、命令和映射,那么 vim 的文件类型插件功能就派上用场了。
您需要在您的.vimrc
中包含filetype plugin on
或filetype plugin indent on
,然后为例如创建一个插件。 ruby 你可以创建~/.vim/ftplugin/ruby.vim
。从技术上讲,您可以在此处使用您喜欢的任何命令,在加载 Ruby 文件时运行,但推荐的命令包括 setlocal
、map <buffer>
、command -buffer
和定义函数。更多信息在用户指南中;如果您对 vim 脚本非常熟悉,请跳转到 :help 41.11
,否则请阅读 :help usr_40
和 :help usr_41
。
【讨论】:
【参考方案4】:还有一个不错的 vim 脚本:DetectIndent,它会尝试检测您打开的文件的缩进。 如果您处理许多具有不同编码风格的文件,这将非常方便。
我在 .vimrc 中使用了自动命令:
:autocmd BufReadPost * :DetectIndent
【讨论】:
【参考方案5】:要在按下 Tab 键时插入空格字符,请设置 'expandtab' 选项:
:set expandtab
下一步是控制按下 Tab 键时将插入的空格字符数,设置 'tabstop' 选项。例如,要为制表符插入 2 个空格,请使用:
:set tabstop=2
参考:http://vim.wikia.com/wiki/Converting_tabs_to_spaces
【讨论】:
以上是关于按文件类型设置 Vim 空白首选项的主要内容,如果未能解决你的问题,请参考以下文章