Working withWorking with Different Coding Styles

Working with Different Coding Styles

 

问题最近看代码看得相当的 high,有时候也写上几行,再没有了那种不能写代码的郁闷。工作中当然还是没有多少 coding 的机会,不过我现在能挤出时间,尽量增加跟代码的接触 (感谢开明的老板),所以工作心情好多了。这里记录此过程中一个非技术的小问题。

因为接触了好几个开源项目 (Expand Your Bandwidth), 而每个都有不同的代码风格,导致我写代码的时候有点不方便。如何缩进 (或者说 tab 键的处理) 是主要的问题,有的用 4 个空格缩进 (比如多数的 python 代码), 有的用 8 个空格 (比如 systemd), 有的用真正的 tab (比如 Linux kernel, packagekit)。但是对于 vim 来说,配置只能有一个,没法照顾到所有的情况。

我能想到的解决办法有这么几个:

  • 在文件头部指定代码风格,比如 "Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8"。这叫 mode line,vim 和 emacs 都支持,但是两者的格式却不一样,上边那个是 emacs 的,要是 vim 的话,得再添一行,"vim: set ts=8 sw=4 tw=0:"。鉴于此,不能指望每个项目在每个文件里为每种编辑器写一行 mode line。systemd 就只考虑了 emacs,因为 Lennart Poettering 用的是 emacs。
  • 上面的问题有两个办法,1) 学习 emacs, 2) 用这个 vim 插件,让 vim 识别 emacs 的 mode line。1) 就算了... 但是 2) 基本上也行不通,因为有相当多的项目根本就没有任何的 mode line。
  • vim 在读取配置的时候,能够识别当前目录下的配置文件。这样就可以为每个工程加一个 .vimrc,在里边指定本工程的代码风格。

方案

第一跟第二条属于自己控制不了的,最后一个还比较靠谱。不过 vim 默认不会读取当前目录下的配置文件。因此首先要在 ~/.vimrc 里添加这么两行 (引用):

set exrc   " enable per-directory .vimrc files
set secure   " disable unsafe commands in local .vimrc files

第二行是为安全起见 (因为 vimrc 里的东西是被 vim _执行_ 的,所以可以被用作特洛伊木马)。

然后写各工程的 .vimrc,这些都不会太长,因为只需要指定少数几个选项,比如 expandtab 和 shiftwidth。

$ cat .vimrc 
autocmd FileType c set noexpandtab shiftwidth=8

这个配置适合 packagekit,用真正的 tab 进行缩进 (只针对 C 文件;工程里还有 python 文件,仍然使用 vim 的全局配置)。

剩下的一个问题是,git status 的时候说有 untracked file,看起来实在不够清爽 :-) 本来可以让 git 忽略掉 .vimrc,但是项目里的 .gitignore 不是我能掌控的。不过,记住我们用的是 git :-) 用户可以指定全局的 gitignore 文件 (引用)。

$ git config --global core.excludesfile '~/.gitignore'

再写好 gitignore,

$ cat ~/.gitignore 
.vimrc

这样,就 OK 了!

posted on 2012-03-31 16:38  Richard.FreeBSD  阅读(171)  评论(0)    收藏  举报

导航