在Linux中编写C语言代码
在终端中可以使用vi查看或编写c语言代码:
-
输入
vi a.c
,这会在当前路径下新建一个文件a.c,然后系统会使用vi去打开它 -
进入后会发现按键盘是输入不了的,这是因为目前是vi的命令行模式
- 打开vi默认是命令行模式
- 按
i
进入输入模式,在输入模式时会看到页面下方会显示INSERT
。 - 按
esc
可从输入模式回到命令行模式
-
使用vi编辑完代码后,在命令行模式下输入
:wq
,即可保存文件然后退出viw:保存
q:退出
在终端使用gcc编译
- 输入
gcc 文件名 -o 编译后程序的名称
,这里输入gcc a.c -o firstProgram
,然后回车。如果只是打gcc a.c
也可以,系统会默认把编译好的程序命名为a.out - 然后就会出现firsProgram这个程序,可以用
ls
命令看一下当前路径下有些什么东西 - 输入:
./firstProgram
即可运行程序
命令行模式下输入:set nu
,回车后代码会显示行数
如果用gcc编译后出现segmentation fault,可以输入命令gcc xxx.c -g
,然后输入gdb a.out
,使用gdb调试生成的程序。按r
使程序运行。有时候gdb调试工具会告诉你段错误出现的原因,但也有可能不会告知。
使用man查看代码手册
举个例子,某次编写代码发现gcc编译不认识free()
,就可以在终端里面输入:man free
,然后会发现并没有写出这个free()
包含在哪个头文件。继续在命令行输入man 2 free
、man 3 free
,最终可以在man 3 free
里面看到free()
需要包含头文件stdlib.h
。man
后面的数字表示分页,可以就认为是第几页
一些常用的vi操作
摘自:Linux vi/vim
输入区分大小写
-
G
:移动到这个档案的最后一行(常用) -
nG
:n
为数字。移动到这个档案的第n
行。例如20G
则会移动到这个档案的第 20 行(可配合 :set nu
) -
gg
:移动到这个档案的第一行,相当于1G`啊! (常用) -
n+Enter
:n
为数字。光标向下移动n
行(常用) -
x, X
:在一行字当中,x
为向后删除一个字符 (相当于del
按键),X
为向前删除一个字符(相当于backspace
亦即是退格键) (常用) -
nx
:n 为数字,连续向后删除n个字符。举例来说,我要连续删除 10 个字符:10x
-
dd
:剪切游标所在的那一整行(常用),用p/P
可以粘贴。 -
ndd
:n 为数字。剪切光标所在的向下 n 行,例如20dd
则是剪切 20 行(常用),用p/P
可以粘贴。 -
d1G
:删除光标所在到第一行的所有数据 -
dG
:删除光标所在到最后一行的所有数据 -
d$
:删除游标所在处,到该行的最后一个字符 -
d0
:那个是数字的 0 ,删除游标所在处,到该行的最前面一个字符 -
yy
:复制游标所在的那一行(常用) -
nyy
:n 为数字。复制光标所在的向下 n 行,例如20yy
则是复制 20 行(常用) -
y1G
:复制游标所在行到第一行的所有数据 -
yG
:复制游标所在行到最后一行的所有数据 -
y0
:复制光标所在的那个字符到该行行首的所有数据 -
y$
:复制光标所在的那个字符到该行行尾的所有数据 -
p, P
:p
为将已复制的数据在光标下一行贴上,P
则为贴在游标上一行。举例来说,我目前光标在第20行,且已经复制了10行数据。则按下p
(小写)后, 那10行数据会贴在原本的20行之后,亦即21行开始贴。但如果是按下P
(大写)呢? 那么原本的第 20 行会被推到变成 30 行 (常用) -
J
:将光标所在行与下一行的数据结合成同一行 -
c
:重复删除多个数据,例如向下删除 10 行:10cj
-
u
:复原前一个动作(常用) -
Ctrl+r
:重做上一个动作(常用)
这个u
与Ctrl
+r
是很常用的指令,一个是复原,另一个则是重做一次 -
.
:这是小数点,意思是重复前一个动作的意思。 如果想要重复删除、重复贴上等等动作,按下小数点.
就好 (常用)