1.vim进入insert mode的方式
a 向后移动一列并进入insert mode
o 向下移动并新起一行并进入insert mode
a行//光标在这
b行
按o后
a行
//光标在这
b行
i 直接进入insert mode
2.低行操作(通过shift+;进入)有:
w(保存) q(退出) !(强制执行) shift+zz(退出) set nonu(去除行号) set nu(加行号)
!+command(指令) 可以在vim的底行实行指令(如ls)
%s/dststr/srcstr/(将文件中的srcstr替换为dststr)
:%s/foo/bar/ 将每一行的第一个bar替换为foo
:%s/foo/gar/g 将所有的bar替换为foo
vim可以直接打开一个文件(不存在就新建一个,wq退出就保存下来,否则不保存)
vs:可以再开一个文件(可以新建一个也可以用已有文件)
:vs filename //再打开一个文件
下图左右为两个文件

底行在操作那个文件取决于光标在那个文件中(ctrl +ww可以将光标更换到另一个文件中(逆序切换))
1./+一个单词:标亮文件中与该单词相同的所有单词,按n自动顺序到下一个
上面为/+hello后的情况
2.!+字母 自动运行最近与该些字母匹配的命令行。例:
!v enter后匹配最近的与该字母的命令行
有vim code.c(最近的代码出现)
vim + 文件路径 + n :光标打开文件后自动跳到第n行
!+字母:自动运行最近与这些字母匹配的命令行
3.vim
1.其是系统中安装的软件,当.vimrc文件存在时,vim就使用该文件的配置,否则就是用默认配置,因此我们最好自己配置一个.vimrc
在.vimrc中使用"可以注销该行代码
命令行:cat /etc/redhat-release 说明系统版本
cpp
[fengyouyinli@VM-0-2-centos ~]$ cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)
4.gcc/g++的使用
直接生成可执行文件:
cpp
[fengyouyinli@VM-0-2-centos ~]$ gcc gal.c -o galagame
//gal.c是已存在文件,galagame是要生成的可执行文件的文件名
[fengyouyinli@VM-0-2-centos ~]$ ls
galagame gal.c install.sh teste
预处理:
cpp
[fengyouyinli@VM-0-2-centos ~]$ gcc -E code.c -o code.i //临时文件
//处理完预处理就停下来
[fengyouyinli@VM-0-2-centos ~]$ ls
code.c code.i galagame gal.c install.sh teste
/usr/include/ 存c语言的头文件
cpp
[fengyouyinli@VM-0-2-centos ~]$ ls /usr/include/
aio.h crypt.h features.h grp.h langinfo.h malloc.h neteconet pcrecpp.h resolv.h stdio_ext.h uchar.h wchar.h
aliases.h ctype.h fenv.h gshadow.h lastlog.h math.h netinet pcre.h rpc stdio.h ucm wctype.h
alloca.h db_185.h FlexLexe
编译:
cpp
[fengyouyinli@VM-0-2-centos ~]$ gcc -S code.i -o code.s
//处理完编译就停下来
[fengyouyinli@VM-0-2-centos ~]$ ls
code.c code.i code.s galagame gal.c install.sh teste
汇编:
cpp
[fengyouyinli@VM-0-2-centos ~]$ gcc -c code.s -o code.o//.o文件也叫可重定位目标文件
//汇编完就停止
[fengyouyinli@VM-0-2-centos ~]$ ls
code.c code.i code.o code.s gal.c
为什么还要链接?
因为头文件的展开只是函数声明,真正的源代码还在外部库里面,只有链接在一起时才能正常使用库函数。
链接:
cpp
gcc code.o -o code//生成的可执行文件的名字
cpp
[fengyouyinli@VM-0-2-centos ~]$ gcc -c gal.c //直接生成对应的.o文件
[fengyouyinli@VM-0-2-centos ~]$ ls
code code.c code.i code.o code.s gal.c gal.o
连接所有文件的方法:
cpp
[fengyouyinli@VM-0-2-centos ~]$ gcc gal.o code.o -o ccb
[fengyouyinli@VM-0-2-centos ~]$ ls
ccb code code.c code.i code.o code.s gal.c gal.o
库文件也是.o文件,统筹文件的本质就是将一堆.o文件打包在一起。
一个命令:
ldd + 文件路径:查看该文件中用了哪些库
/lib64/libc.so.6是c语言的库,在文件中执行库函数时,会跑到该库中执行完该函数后再回到原文件中。
库的后缀
1.动态库:linux(.so) windows(.dll)
2.静态库:linux(.a) windows(.lib)
系统的命令库也会使用很多的库,例ls
cpp
[fengyouyinli@VM-0-2-centos ~]$ ldd /usr/bin/ls
linux-vdso.so.1 => (0x00007ffddd3d6000)
libselinux.so.1 => /lib64/libselinux.so.1 (0x00007f78b2d54000)
libcap.so.2 => /lib64/libcap.so.2 (0x00007f78b2b4f000)
libacl.so.1 => /lib64/libacl.so.1 (0x00007f78b2946000)
libc.so.6 => /lib64/libc.so.6 (0x00007f78b2578000)
libpcre.so.1 => /lib64/libpcre.so.1 (0x00007f78b2316000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f78b2112000)
/lib64/ld-linux-x86-64.so.2 (0x00007f78b2f7b000)
libattr.so.1 => /lib64/libattr.so.1 (0x00007f78b1f0d000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f78b1cf1000)
宏定义:
cpp
gcc code.c -o code -DM=100
//-D代表后面的为宏定义,M是宏定义的名字,=100是该宏的值(可以没有值,默认为1)
此处可以说明预处理的本质就是修改我们的代码,-DM就是将#define M直接插入到我们的代码中了。