1. 输入以下命令可以启动vi:
(1) vi:不指定文件名,在保存文件时需要指定文件名。
(2) vi 文件名:该文件既可以是已存在的,也可以是新建的。
(3) vi +n 文件名:进入vi,光标停在第n行开始处。
(4) vi + 文件名:进入vi,光标停在文件最后一行开始处。
(4) vi +/字符串 文件名:进入vi,光标停在第一个字符串处所在行。
2. vi中保存文件并退出:
(1) w 文件名:将当前文件的内容保存由"文件名"指定的新文件中,若该文件已存在则产生错误。
(2) w! 文件名:将当前文件的内容保存由"文件名"指定的新文件中,若该文件已存在则覆盖原文件。
3. 光标的移动:
(1) nw:右移n个字,n为数字,光标处于第n个字的字首。
(2) w:右移1个字,光标处于下一个字的字首。
(3) nb:左移n个字,n为数字,光标处于第n个字的字首。
(4) b:左移1个字,光标处于下一个字的字首。
(5) (:移到本句的句首,如果已经处于本句的句首,则移动到前一句的句首。
(6) ):移动下一句的句首。
(7) {:移到本段的段首,如果已经处于本段的段首,则移动到前一段的段首。
(8) 1G:移动到文件首航的行首;G:移动到文件末行的行首;nG:移动到文件第n行的行首。
(9) <ctrl>+g:报告光标所处的位置。
4. 文本的删除:
(1) dw:删除光标所在文职的一个字;ndw:删除从光标开始的n个字。
(2) db:删除光标前的一个字;ndb:删除从光标开始的前n个字。
(3) d0:删除从光标前一个字符到行首的所有字符。
(4) d$:删除光标所在字符到行尾的所有字符。
(5) d(:删除从当前字符开始到句首的所有字符。
(6) d):删除从当期字符开始到句尾的所有字符。
(7) d{:删除从当前字符开始到段首的所有字符。
(8) d}:删除从当前字符开始到短尾的所有字符。
5. 文本查找和替换:
(1) ?string<Enter>:查找字符串
(2) :s/old/new:在当前行用new替换old,只替换一次。
(3) :s/old/new/g:在当前行用new替换old
(4) :1,10s/old/new/g:在1~10行用new替换old
(5) :1,$s/old/new/g:整个文件中用new替换old
6. 文本的复制与粘贴
(1) yw:将光标所在位置到字尾的字符复制到缓冲区中
(2) nyw:将光标所在位置开始的n个字复制到缓冲区中
(3) yb:从光标开始向左复制一个字
(4) nyb:从光标开始向左复制n个字
(5) y0:复制从光标前一个字符到行首的所有字符
(6) y$:复制从光标开始到行末的所有字符
(7) np:在光标所在位置的后面插入复制的文本,共复制n次
(8) nP:在光标所在位置的前面插入复制的文本,共复制n次。
7. Linux下的变量的命名规则:
(1) 变量名必须有一定的意义,并且意义准确;
(2) 不建议大小写混用;
(3) 在失去意义的情况下,尽量使用较短的变量名。
(4) 不采用匈牙利命名法表示变量的类型。
(5) 函数名应该以动词开头,因为函数是一组具有特定功能的语句块;
(6) 尽量避免使用全局变量
8. gcc编译程序时可分为4个阶段:
(1) 预处理(Pre-Processing)
预处理阶段,输入的是C语言源文件,通常为*.c,主要处理#ifdef、#include和#define预处理命令。该阶段一般会生成一个中间文件*.i。其命令为:
gcc -E test.c -o test.i
(2) 编译(Compling)
在编译阶段,输入的是中间文件*.i,编译后生成汇编语言文件*.s。其命令为:
gcc -S test.i -o test.s
(3) 汇编(Assembling)
在汇编阶段,将输入的汇编文件*.s转换为二进制机器码*.o,其命令为:
gcc -c test.s -o test.o
(4) 链接(Linking)
在链接阶段将输入的二进制机器代码文件*.s与其他的机器代码文件和库文件汇集成一个可执行的二进制代码文件,其命令为:
gcc test.o -o test
最终生成可执行文件test。
可简化为:gcc test.c -o test
9. gcc编译多个源文件,其命令为:
gcc -o test testmain.c other1.c other2.c
该命令将同时编译3个源文件,最后生成一个可执行程序test。
注意:在生成可执行程序时,一个程序无论是只有一个源文件还是多个源文件,在所有被编译和连接的源文件中必须有且只有一个main函数。
10. gcc的选项:
(1) -c : 只编译,不链接成可执行文件,编译器只是由输入.c等为后缀的源代码文件生成.o为后缀的目标文件,通常用于编译不包含主程序的子程序文件。
(2) -g:产生调试器gdb所必需的符号信息,要对源代码调试,必须在编译程序时加入该选项。
(3) -O:对程序进行优化编译、链接,产生的可执行文件的执行效率高,但在编译、链接的速度就相应的慢一些。
(4) -O2:比-O更好地优化编译、链接。
(5) -Wall:输出所有警告信息
(6) -w:关闭所有警告,建议不使用
(7) -Idirname:将名为dirname的目录加入到程序头文件目录列表中
(8) -Ldirname:将名为dirname的目录加入到程序的库文件搜索目录列表中,它是链接过程中使用的参数。
(9) -lname:指示编译器,在链接时,装载名为libname.a的函数库,该函数库位于系统预定义的目录或者由-L选项指定的目录。
11. gcc的报错类型及对策
(1) C语法错误
(2) 头文件或库文件错误
(3) 未定义的符号
12. strcpy是不安全的,存在安全漏洞,因此一般应该使用strncpy,strcat与strncat同样如此。
13. strstr是从字符串s1中寻找s2第一次出现的位置,返回指向第一次出现s2位置的指针,如果没有找到,则返回NULL。strchr查找字符串s中首次出现的字符c的位置,返回首次出现字符c指针,如果s中不存在c则返回NULL。