在 Visual Studio 和 VIM 中强制执行编码风格

Enforcing coding styles in Visual Studio and VIM

我与一个中等规模的开发人员团队合作,其中一半是 Linux 开发人员在 OSX 上使用 VIM on Ubuntu and MacVIM,另一半是 Windows 开发人员使用 Visual Studio 2010 年或以后。

过去,在处理诸如由于混合行结尾导致 SVN 操作失败,或由于硬制表符与空格作为制表符(以及有时长度不同,即:4 个空格 vs 2 个空格 vs 8 个空格等),我想结束它。

计划采用我们设计的通用编码风格,这与 Linux 内核开发人员使用的 Linux Kernel coding style. For all developers, we could require them to run their code through the checkpatch.pl script 几乎相同,但我们的代码包括 C 、C++ 和 C#,因此我们需要将规则检查器脚本泛化到 ANSI C 之外。

是否有通用的方法来为 VIM 和 Visual studio 实施规则集?我们想生成一个脚本来检查整个文件,它可以挂接到我们的版本控制系统中,以便它在提交完成之前 运行 在代码上,并且可能作为一个 运行-time 脚本来执行编码器类型的风格?

谢谢。

EditorConfig seems to do exactly what you want in Vim, Visual Studio, and a lot of other editors and IDEs.

运行次"script"是最好的第一道防线。在这种情况下,将有各种 Vim 和 Visual Studio 设置来帮助加强您的代码风格。仅此一项就可以解决很多问题。请记住,这不会涵盖所有内容,但会鼓励您想要的编码风格。

我以前在一个团队中 Linux 和 Visual Studio 工作过(有时是我一个人)。整个 Tabs/Spaces 问题让我发疯,因为会有大量的线路要么被转移得太多要么不够。为了解决这个问题,我最终在 Vim 中使用了这三个设置(也在 Visual Studio 中设置了类似的值),从而从根本上解决了一个 class 问题。

Vim

set expandtab
set shiftwidth=4  " Mainly for if/for/while/general {} block indentation.  4 spaces.
set softtabstop=-1 " Allows us to use the Tab key and have it act like shiftwidth.

Visual Studio

  • 按下 Tab 键时插入空格。
  • 在代码块内缩进时移动 4 个空格

他们的关键是摆脱制表符,或者至少让两个系统使用相同的设置(即都使用具有相同值的制表符或用空格代替制表符)

注意事项:

  • 有人将文件从一个操作系统复制到另一个操作系统,然后将该文件签入 machine 上的 SVN。 SVN 将盲目提交,比方说,来自 UNIX 系统的 DOS 行结束文件。您只想 checkout/commit 文件 在同一系统上 。否则,检查 out/editing/committing 文件都在同一个 OS 上应该没有问题,因为 SVN 可以在检查时转换行结尾。您可以 "fix" 通过将文件加载到 Vim 中,然后通过键入“:set fileformat=dos”将行尾转换为您想要的特定 OS(如果您想更改Windows-style), ":set fileformat=unix" (对于 unix 风格), 或者最后 ":set fileformat=mac" 对于 Mac.

就代码风格而言,您可能已经知道,Vim 和 Visual Studio 都提供了很大的灵活性。虽然我无法为您提供 Vim 的具体设置,但要查看的选项是

autoindent
cindent
cinoptions  (implied from cindent)
cinkeys     (implied from cindent)
comments    (default is probably fine, but here for thoroughness)

所以,你会想要

set autoindent

编辑C或C++文件时自动设置cindent。 cinoptions 和 cinkeys 的默认值对我来说没问题,但我过去在与不同的小组合作时对它们进行了调整。

不要忘记在选定的行范围内使用“=”命令来重新格式化代码!这非常方便!

我回避完全自动的 SVN 后端方法,因为它可能比您预期的要花更长的时间才能正确使用,而且当它搞砸时,您一天中花费的时间也可能比您预期的要多。毕竟,您真的只想提高工作效率,对吧?

纪律是关键!