在 Visual Studio 和 VIM 中强制编码样式

Posted

技术标签:

【中文标题】在 Visual Studio 和 VIM 中强制编码样式【英文标题】:Enforcing coding styles in Visual Studio and VIM 【发布时间】:2015-06-05 14:22:55 【问题描述】:

我与一个中型开发人员团队合作,其中一半是在 Ubuntu 上使用 VIM 和在 OSX 上使用 MacVIM 的 Linux 开发人员,另一半是使用 Visual Studio 2010 或更高版本的 Windows 开发人员。

过去,在处理诸如由于混合行结尾而导致 SVN 操作失败,或者由于混合使用硬制表符和空格制表符(有时是不同的长度,即:4 个空格对 2 个空格对 8 个空格等),我想结束它。

计划采用我们设计的通用编码风格,几乎与Linux Kernel coding style 相同。对于所有开发人员,我们可以要求他们通过 Linux 内核开发人员使用的checkpatch.pl script 运行他们的代码,但是我们的代码包括 C、C++ 和 C#,因此我们需要泛化规则检查器不仅仅是 ANSI C 的脚本。

是否有一种通用的方式来实现 VIM 的规则集和 Visual Studio 的另一个?我们想生成一个检查整个文件的脚本,它可以连接到我们的版本控制系统中,以便在提交完成之前在代码上运行,或者作为一个运行时脚本来强制编码器类型的样式?

谢谢。

【问题讨论】:

“将样式作为编码器类型强制执行”对我来说似乎有点限制,我会选择预提交挂钩和共享编辑器设置/格式规则(如果可用)。 @FrankOsterfeld 如果这限制性太强,那么使用我们定义的规则自动缩进怎么样,即:当用户点击ENTER 时自动插入正确数量的硬标签,但允许他们通过退格等删除它。 【参考方案1】:

EditorConfig 在Vim、Visual Studio 和a lot of other editors and IDEs 中似乎完全符合您的要求。

【讨论】:

【参考方案2】:

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

我以前曾在一个团队中使用过 Linux 和 Visual Studio(有时是我自己)。整个 Tabs/Spaces 问题让我发疯了,因为会有大量的行组被转移或不够。为了解决这个问题,我最终在 Vim 中使用了这三个设置(在 Visual Studio 中也设置了类似的值),从而从根本上解决了一类问题。

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 个空格

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

注意事项:

有人将文件从一个操作系统复制到另一个操作系统,然后将该文件签入该计算机上的 SVN。 SVN 会盲目地提交来自 UNIX 系统的 DOS 行结束文件。您只想在同一系统上签出/提交文件。否则,在同一个操作系统上签出/编辑/提交文件应该没有问题,因为 SVN 可以在签出时转换行尾。你可以通过将文件加载到 Vim 中来“修复”这个问题,然后通过键入 ":set fileformat=dos" (如果你想更改为 Windows 风格)、":set fileformat 将行尾转换为你想要的特定操作系统=unix"(适用于 unix 风格),或者最后是适用于 Mac 的 ":set fileformat=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 后端方法,因为它可能需要比您预期的更长的时间才能正确完成,而且当它搞砸时,您一天中的时间也可能比您预期的要多。毕竟,您真的只是想提高工作效率,对吧?

纪律严明是关键!

【讨论】:

以上是关于在 Visual Studio 和 VIM 中强制编码样式的主要内容,如果未能解决你的问题,请参考以下文章

Vim,Visual Studio Code,Emacs 哪个好

Visual Studio 中类似 ViM 的搜索突出显示可能吗?

如何强制 Visual Studio 在 https 中运行网站

我可以强制 Visual Studio 使用 mingw 编译器吗

强制 Visual Studio 2010 将 CSS 放置在非内联文件中?

如何强制在 Visual Studio 2013 中打开解决方案文件 (SLN)?