最近在看<<深入理解计算机系统>>,看到第一章给出的hello程序,然后就用vi跟着敲了这么一段代码
#include <stdio.h>
int main()
{
printf("hello, world\n");
return 0;
}
书中说hello.c程序的ASCII码表示,我想着怎么在shell中把hello.c的ASCII码给打出来.
在网上搜了一圈之后,用od -c命令在shell中显示hello.c的ASCII码,然后我发现字节数比书中的少一点.
kali@kali:~/Public/cex/code/intro$ od -c hello.c
0000000 # i n c l u d e < s t d i o .
0000020 h > \n \n i n t m a i n ( ) \n {
0000040 \n \t p r i n t f ( " h e l l o ,
0000060 w o r l d \ n " ) ; \n \t r e t
0000100 u r n 0 ; \n } \n
0000111
对比了下书中的ASCII码样例,发现它是使用4个空格缩进,而自己的vi默认用\t水平制表符缩进,该怎么修改vi的设置换成4个空格缩进呢?
首先想到的是直接在vi命令行输入 :set tabstop=4 然后:x保存,重新od了一遍文件却并没有变化.这时才想起虽然设置了缩进为4个空格,但是我并没有改文件内容本身啊,也就是说现在还是\t.我应该修改文件内容,先把\t替换成4个空格.
想明白这一点,我进入vi编辑模式去修改文件内容,不过在这之前还需要命令模式下再设置一遍 :set tabstop=4 因为是临时操作,退出vi编辑器重来并不会保存之前的设置.
那么如果我想缩进的设置一直生效怎么弄呢?那就需要修改/etc/vim/下的vimrc文件,在文件末尾追加如下设置(ts就是tabstop的简写,正如nu是number的简写一样):
set ts=4
set expandtab
set autoindent
在把\t改为4个空格之后,再用od -c去显示hello.c程序文件内容就和书中的描述一致了.
kali@kali:~/Public/cex/code/intro$ od -a hello.c
0000000 # i n c l u d e sp < s t d i o .
0000020 h > nl nl i n t sp m a i n ( ) nl {
0000040 nl sp sp sp sp p r i n t f ( " h e l
0000060 l o , sp w o r l d \ n " ) ; nl sp
0000100 sp sp sp r e t u r n sp 0 ; nl } nl
0000117
此处用-a选项以名称的形式展示特殊字符,nl 就是\n,sp就是空格.