在Visual Studio和VIM中执行编码风格
Enforcing coding styles in Visual Studio and VIM
我和一个中等规模的开发团队一起工作,其中一半是Linux开发人员,在Ubuntu上使用VIM,在OSX上使用MacVIM,另一半是Windows开发人员,使用Visual Studio 2010或更高版本。
在过去,当处理诸如由于混合行结束而导致SVN操作失败的事情时,或者由于硬制表符与空格作为制表符的混合(有时是不同的长度,例如:4个空格vs 2个空格vs 8个空格,等等)而导致代码审查的更改时,浪费了相当多的时间,我想结束它。
计划是采用我们设计的通用编码风格,它几乎与Linux内核编码风格相同。对于所有开发人员,我们可以要求他们通过Linux内核开发人员使用的checkpatch.pl
脚本运行他们的代码,但是我们的代码包括C, c++和c# ,所以我们需要将规则检查器脚本推广到ANSI C之外。
是否有一种通用的方法来实现一个规则集的VIM,另一个为Visual studio?我们想要生成一个检查整个文件的脚本,它可以连接到我们的版本控制系统,以便在提交完成之前在代码上运行,或者作为一个运行时脚本来强制编码类型的样式?
谢谢。
EditorConfig似乎可以在Vim, Visual Studio和许多其他编辑器和ide中做你想做的事情。
运行时"脚本"是最好的第一道防线。在这种情况下,它将是各种Vim和Visual Studio设置,以帮助执行您的代码风格。仅这一点就能解决相当多的问题。请记住,这不会捕获所有内容,但会鼓励使用您想要的编码风格。
我在Linux上工作过&以前在一个团队中使用Visual Studio(有时是我自己)。整个制表符/空格的问题把我逼疯了,因为会有大量的行,要么移位得太多,要么移位得不够。为了解决这个问题,我最终在Vim中使用了这三个设置(在Visual Studio中也设置了类似的值),从而在根处捕获了一类问题。
Vimset 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风格),或者最后":set fileformat=mac"(对于mac)。
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后端方法,因为它可能比您预期的要花更长的时间才能把它做好,而且当它搞砸了,它可能也会比您预期的花费更多的时间。毕竟,你只是想提高效率,对吧?
纪律是关键!
- 在执行其他功能的同时播放动画(LED矩阵和Arduino/ESP8266)
- C++,系统无法执行指定的程序
- 如何确定我已使用非编码文件到达 EOF?
- 使用C++中的模板和运算符重载执行矩阵运算
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 执行函数时导致崩溃的变量
- 无论条件是否为true,if总是在c++中执行
- 当函数模板参数是具有默认参数的类模板时,函数模板参数的推导如何执行
- 在C++中对T*类型执行std::move的意外行为
- 使用QProcess执行命令,并将结果存储在QStringList中
- 如何将不同的可执行文件合并到一个窗口框架中进行编码?像浏览器一样
- 如何使jse文件执行编码.exe并静默添加启动?Javascript将文件添加到启动?
- 什么是执行范围内的字符集及其编码
- 在我的switch语句完全执行之前,我的while循环进入第二次迭代,我用c ++编码
- 导入函数 Matlab 编码器和C++可执行文件
- Windows NT 二进制可执行文件内部常量字符串编码
- C++ 使用按钮执行编码的测试 UI.WINAPI (no MFC)
- 从Makefile中的c可执行文件中删除硬编码的路径
- 添加C++前缀是否"const"硬件级别执行任何不同操作,或者只是对编码人员的保护?
- 在Visual Studio和VIM中执行编码风格