前言
前文介绍了很多指令,在Linux的运行测试,包括yum源的安装卸载查看,还有权限的理解,个人,组织,还有外人,U、G、X文件的分类,这些我们可以类比记忆与Windows的操作系统里面的知识点,我们这篇文章介绍的是vim的使用,
1.vim的使用
1.1 vim的基本概念
vim的三种模式(其实有好多模式,主要掌握这3种即可),分别是命令模式(command mode)、插 入模式(Insert mode)和底行模式(last line mode),各模式的功能区分如下:
- 命令模式:控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入Insert mode下,或者到 last line mode
- 插入模式只有在Insert mode下,才可以做文字输入,按「ESC」键可回到命令行模式。该模式是我们后面用的最频繁 的编辑模式。
- 底行模式:文件保存或退出,也可以进行文件替换,找字符串,列出行号等操作。 在命令模式下,shift+: 即可进入该模式
1.2 vim的基本使用
打开vim直接输入,vim就可以进入,我们正常进入vim默认是命令模式,这个时候需要我们输入a、i、o、都可以进入插入模式,这个时候我们是可以进行文本编辑的,退回命令模式就是esc,再通过命令模式输入shift+:就可以进入底行模式
- : w (保存当前文件)
- : wq (输入「wq」,存盘并退出vim)
- : q! (输入q!,不存盘强制退出vim)
1.3 vim的指令集
插入模式就是直接输入一些东西,类似于记事本的功能。
主要介绍的就是命令模式
- [h]、「j」、「k」、 「l」,分别控制光标左、下、上、右移一格
- 光标位置锚点: shitf+~(行首) shift+$(行尾)
- gg (起始行) shift+g(结束行) n+shift+g(指定行)
- b/w:按照单词为单位进行前后光标移动
文本操作:
- yy:复制当前行
- nyy:复制当前行及其之后的n行,包含当前行
- u: 撤销误操作
- p: 粘贴,np:一次重复粘贴n行
- dd:删除当前光标所在行,支持ndd
- dd->p:剪切功能
- shift+~:快速大小写切换
- x: 左向右删除光标之后的一个字符,支持nx
- X:右向左也是支持nX
- r: 替换一个字符,光标所在的字符,支持nrshift+r: 替换模式,直接进行多个内容的替换
- ctrl+r:撤销最近的撤销
底行模式:
- set nu: 调出行号
- set nonu:取消行号
- vs 文件:多文件操作[ctrl+w+w]w:保存
- q:退出
- !:强制[w!,q!,wq!]
1.4 vim的配置
在目录 /etc/ 下面,有个名为vimrc的文件,这是系统中公共的vim配置文件,对所有用户都有效。 而在每个用户的主目录下,都可以自己建立私有的配置文件,命名为:“.vimrc”。例如,/root目录下, 通常已经存在一个.vimrc文件,如果不存在,则创建之。 切换用户成为自己执行 su ,进入自己的主工作目录,执行 cd ~ 打开自己目录下的.vimrc文件,执行 vim .vimrc
如果我们想用已经配置好了的配置可以去网上找找就行。
touch .vimrc
vim .vimrc
在里面输入set nu,我们进入vim,就会每一行都会产生行号
2.gcc和g++---Linux的编译器
一个程序运行过程主要有下面这几个阶段
- 预处理(进行宏替换)
- 编译(生成汇编)
- 汇编(生成机器可识别代码)
- 连接(生成可执行文件或库文件)
各个阶段的格式
格式 gcc [选项] 要编译的文件 [选项] [目标文件]
gcc -E test.c -o test.i
gcc -S test.i -o test.s
gcc -c test.s -o test.o
gcc -o test.o mytest
运行一下这个C程序直接输入./mytest
这里引入一个问题,我们并没有写入一些头文件的代码,只是声明了一下头文件,在Linux中我们是怎么使用printf函数呢?答案是:系统把这些函数实现都被做到名为 libc.so.6 的库文件中去了,在没有特别指定时,gcc 会到 系统默认的搜索路径“/usr/lib”下进行查找,也就是链接到 libc.so.6 库函数中去,这样就能实现函 数“printf”了,而这也就是链接的作用,这里介绍一下动态链接和静态链接
2.1动态链接和静态链接
静态库是指编译链接时,把库文件的代码全部加入到可执行文件中,因此生成的文件比较大,但在运行时也 就不再需要库文件了。其后缀名一般为“.a”。静态库比动态库大的多。引入了很多文件
gcc test.c -o mytest_s -static
动态库与之相反,在编译链接时并没有把库文件的代码加入到可执行文件中,而是在程序执行时由运行时 链接文件加载库,这样可以节省系统的开销。动态库一般后缀名为“.so”,如前面所述的 libc.so.6 就是动态 库。gcc 在编译时默认使用动态库。完成了链接之后,gcc 就可以生成可执行文件,如下所示。 gcc hello.o –o hello
2.2 gcc的命令集
- -E 只激活预处理,这个不生成文件,你需要把它重定向到一个输出文件里面
- -S 编译到汇编语言不进行汇编和链接
- -c 编译到目标代码
- -o 文件输出到 文件
- -static 此选项对生成的文件采用静态链接
- -g 生成调试信息。GNU 调试器可利用该信息。
- -shared 此选项将尽量使用动态库,所以生成文件比较小,但是需要系统由动态库.
- -O0 -O1 -O2 -O3 编译器的优化选项的4个级别,-O0表示没有优化,-O1为缺省值,-O3优化级别最高
- -w 不生成任何警告信息。
- -Wall 生成所有警告信息。