在Vim中,如何自动判断是使用空格还是制表符缩进?

在Vim中,如何自动判断是使用空格还是制表符缩进?

有时我编辑其他源代码,其中流行的风格是使用选项卡。在这种情况下,我想保留使用文字选项卡的现有约定。

对于我自己创建的文件以及使用空格作为主要缩进样式的文件,我希望改用它。

我怎样才能在 vim 中做到这一点?

答案1

您可以在您的文件中使用类似的内容~/.vimrc来调整以适当使用空格/制表符:

" By default, use spaced tabs.
set expandtab

" Display tabs as 4 spaces wide. When expandtab is set, use 4 spaces.
set shiftwidth=4
set tabstop=4

function TabsOrSpaces()
    " Determines whether to use spaces or tabs on the current buffer.
    if getfsize(bufname("%")) > 256000
        " File is very large, just use the default.
        return
    endif

    let numTabs=len(filter(getbufline(bufname("%"), 1, 250), 'v:val =~ "^\\t"'))
    let numSpaces=len(filter(getbufline(bufname("%"), 1, 250), 'v:val =~ "^ "'))

    if numTabs > numSpaces
        setlocal noexpandtab
    endif
endfunction

" Call the function after opening a buffer
autocmd BufReadPost * call TabsOrSpaces()

答案2

有各种各样的插件,例如(从我自己的插件开始):

  • 我的缩进一致性警察检查缓冲区的缩进并分析所使用的缩进宽度和方法。如果存在冲突或发现制表符和空格的错误组合,它会向您发出警报并帮助您找到违规者 - 就像友好的警察一样:>
  • 缩进查找器是一个 Python 脚本和 Vim 插件,可扫描任何加载的缓冲区并配置适当的缩进设置
  • yaifa.vim是上面的 vimscript 的端口
  • 检测缩进.vim作者:Ciaran McCreesh 尝试自动检测缩进设置
  • 猜测缩进基于 detectorindent.vim
  • 缩进检测.vim 作者:Eric Van Dewoestine 执行简单的检测,并可以根据文件规范设置默认值
  • 匹配缩进.vim检测制表符、2 个和 4 个空格缩进并相应地调整缩进设置
  • 侦探vim作者:Tim Pope 启发式自动调整“shiftwidth”和“tabstop”(通过不检查错误或不一致缩进的简单采样)或通过查看相同类型的其他文件
  • 文件风格设置“expandtab”时突出显示制表符、尾随空格以及长于“textwidth”的行,但实际上并不检查缩进的一致性
  • 展示空间突出显示每个缓冲区/文件类型的缩进内的空格。
  • 压痕检测器当打开或写入文件时运行,有关于混合制表符/空格缩进的警告,并且可以自动调整 Vim 的相应选项。

答案3

之前发布的插件之一应该适合一般用途。

但是,如果您正在开发一个共享项目,人们可能会使用不同的编辑,那么我建议使用.editorconfig文件以在所有编辑器之间共享配置。例如:

[*]
indent_style = space
indent_size = 4
end_of_line = lf
insert_final_newline = true

这是一个相当知名的标准。一些编辑器尊重它开箱即用,但其他编辑器需要一个插件。这是 Vim 的插件:

https://github.com/editorconfig/editorconfig-vim

安装此插件后,我发现我能够跳入其他人的项目,并且我的编辑器将立即尊重他们的格式约定,即使在新文件上也是如此。

如果我创建一个.editorconfig文件,其他人就可以更轻松地打开我的项目。

相关内容