前两天GFree_Wind给我讲,我们代码风格要采用Kernel的风格,平时我写代码还算注意,但是也有不少小毛病,大家看我发博文贴上来的代码,有的地方缩进就是怪怪的,这是因为我在写完代码后,直接采用了自动缩进的排版工具,但是并没有将tab键转化成4个空格所致,我们知道不同的编辑器将tab解释为不同,我vim排完版,然后用gedit打开粘帖到CU 博客,就发现格式和我期待的很不一致。
在自己的目录下编辑自己的.vimrc,
添加下面的几行:
解释下含义,
这样就完毕了。这样出来了C 风格的缩进,同时也满足了tab键变成了4个空格。
同时我们注意,Makefile的tab键不允许扩展成4个空格,否则会出现语法错误。所以我们用了 下面语句对Makefile类型特殊处理。
另外一点对于新写的代码满足了table变成了4个空格,但是对老文件,并不会重新排版,用户可以采用如下命令重新解析tab键
这个工具非常有用,写代码的时候,就不必计较格式稍微有点不工整,同时编辑的时候还可以用tab键(总比不停敲四个空格效率高),显示的时候又不会混乱。
采用这个之后配置之后,tab变成四个空格,无论在什么编辑器下看,都是一致的输出。
现在今天花了半个多小时,把用vim格式化代码中tab扩展成空格学习了下,写下这篇博文。去年的时候,我的老大波哥曾经教过我一次indent 这个自动缩进工具,可以个性化配置,可惜我当时有其他事情打断,没有好好学,至今学会的东西还远达不到波哥想教我的那些东西,可惜现在换了东家,不能常在身旁听波哥教导,深以为恨啊。波哥是很古典的那种程序员,编程习惯,平时爱好,都是那种古典 hacker式的,为人比较谦和,乐于分享,令我很是崇拜啊。
- vim ~/.vimrc
- : filetype indent on
- set et
- set ci
- set shiftwidth=4
- autocmd FileType make setlocal noexpandtab
- set ci
表示采用类似c 语言的缩进风格。
与自动缩进相关的变量表
变量名 | 缩写 | 含义 |
---|---|---|
(no)autoindent | ai | 自动缩进,即为新行自动添加与当前行同等的缩进。 |
(no)cindent | ci | 类似C语言程序的缩进 |
(no)smartindent | si | 基于autoindent的一些改进 |
- set et
作用是展开tab,将用户输入的tab自动展开成若干个空格,至于多少空格,看shiftwidth。
在这种情况下,可以格式化我们的C 代码了。
变量名 | 缩写 | 含义 |
---|---|---|
tabstop=X | ts | 编辑时一个TAB字符占多少个空格的位置。 |
shiftwidth=X | sw | 使用每层缩进的空格数。 |
(no)expandtab | (no)et |
是否将输入的TAB自动展开成空格。开启后要输入TAB,需要Ctrl-V |
softtabstop=X | sts | 方便在开启了et后使用退格(backspace)键,每次退格将删除X个空格 |
(no)smarttab | (no)sta | 开启时,在行首按TAB将加入sw个空格,否则加入ts个空格。 |
- 1 gg 回到文件的第一行
- 2 shift+v
- 3 shift+g 回到文件的最后一行
- 4 = 格式化
同时我们注意,Makefile的tab键不允许扩展成4个空格,否则会出现语法错误。所以我们用了 下面语句对Makefile类型特殊处理。
- autocmd FileType make setlocal noexpandtab
- :retab
这个工具非常有用,写代码的时候,就不必计较格式稍微有点不工整,同时编辑的时候还可以用tab键(总比不停敲四个空格效率高),显示的时候又不会混乱。
采用这个之前,可以看到tab键并没有变成空格,不同的编辑器对tab的解读不同造成输出结果不是预期的。
#include#include int main(int argc ,char* argv[]) { int a = 4; int b = 5; int f_a = factorial(a); int f_b = factorial(b); while(1) { if(cmp(f_a,f_b)) { printf("f_a is bigger than f_b\n"); } else { printf("f_a is not bigger than f_b\n"); } sleep(100); } return 0; }
参考文献:
1 Vim代码缩进设置
2 波哥曾经的教导