目录
- 一、 vim键盘图
- 二、 vim工具介绍
- 三、 常见模式
- 3.1 插入模式(insert mode)
- 3.2 命令模式(command mode)
- 3.3 底行模式(last line mode)
- 四、 vim快捷键
- 4.1 命令模式下
- 4.1.1 HJKL
- 4.1.2 快速移动至句首或句尾
- 4.1.3 切换至页首或页尾
- 4.1.4 切换任意行
- 4.1.5 复制粘贴和剪切
- 4.1.6 切换大小写
- 4.1.7 删除键不仅仅是Backspace
- 4.1.8 删多了,想撤回?
- 4.2 插入模式下
- 4.2.1 三种进入插入模式的方式
- 4.2.2 批量替换
- 4.2.3 !
- 4.2.4 ❓
- 五、 vim简单配置
- 六、 函数库
- 七、 gdb调试
- 7.1 背景介绍
- 7.2 调试技巧
一、 vim键盘图
我们先来一张vim的高清cheatsheet感受一下
二、 vim工具介绍
vim是多模式编辑器,兼容性好,因为可以在x window、mac os、windows上皆可运行,用熟了vim是很有必要的,现在仍然还有很多公司都是在vim环境下编写和测试代码,因为大批量换新机成本太高了。
三、 常见模式
这几种模式可以相互切换,但是注意插入模式和低行模式之间是不能直接切换的
,需要按「Esc」回到命令模式后再切换到底行模式
3.1 插入模式(insert mode)
顾名思义,只有在插入模式下才可以做文字输入,按「ESC」键可回到命令行模式。该模式是我们后面用的最频繁的编辑模式。
3.2 命令模式(command mode)
控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入insert mode下,或者到last line mode
3.3 底行模式(last line mode)
文件保存或退出,也可以进行文件替换,找字符串,列出行号等操作。 在命令模式下,shift+: 即可进入该模式。
要查看你的所有模式:打开vim,底行模式直接输入
help vim-modes
这里一共有12种模式
四、 vim快捷键
4.1 命令模式下
4.1.1 HJKL
由于历史原因以前的设计是根据电报键盘设计的,而那时候的电报键盘是没有上下左右按键的,我们在vim中分别用HJKL来代替左,下,上,右
4.1.2 快速移动至句首或句尾
光标的首位锚点:
shift + ^ , 指向此行的最前面
shift + $ , 指向此行的最后面
4.1.3 切换至页首或页尾
shift + g , 直接切换到最后一行
快速按 gg,直接切换到最上面一行
4.1.4 切换任意行
(give a num you wanna swap) + shirt + g ,切换到任意行
4.1.5 复制粘贴和剪切
yy , 复制一行
数字 + yy ,从此行开始向下复制n行
p,粘贴之前复制的一行
数字 + p,粘贴n次
比如复制前两行,并粘贴1000次,shift + g去到页底查看
数字 + dd,支持n行剪切或删除
我们2000 + dd,既可删除2000行
4.1.6 切换大小写
shirt + ~ ,切换大写/小写
4.1.7 删除键不仅仅是Backspace
我们如果想删除当前光标后面的内容用 x
,num+x
删除n个字符
反响删除用shift + x
4.1.8 删多了,想撤回?
命令模式下,用 u
撤回
那如何想撤回刚才的撤回呢?
answer:ctrl + r
总结一下command下的模式:
4.2 插入模式下
4.2.1 三种进入插入模式的方式
- a :光标向后移动一个字符
- i :当前字符进行插入
- o : 新起一行
4.2.2 批量替换
%s/old/new/g,将所有old关键字换成new,g代表全部替换
4.2.3 !
! ,可以切到terminal界面,便于查看
!man 3 printf,不退出情况下查看printf的使用方法
./test ,不退出的情况下执行程序
4.2.4 ❓
?, 对关键词进行搜索,如下图搜索new关键字
五、 vim简单配置
在目录 /etc/ 下面,有个名为vimrc的文件,这是系统中公共的vim配置文件,对所有用户都有效
vim .vimrc 在里面可设置:
语法高亮 syntax on
显示行号: set nu
设置缩进的空格数为4: set shiftwidth=4
六、 函数库
函数库一般分为静态库和动态库
静态库是指编译链接时,把库文件的代码全部加入到可执行文件中,因此生成的文件比较大,但在运行时也就不再需要库文件了。其后缀名一般为“.a”。
(本质就是将相关库中的代码,拷贝到自己的可执行程序里,不依赖三方库独立运行。动态往往体积比较小,但是也有弊端,就是依赖第三方库)
动态库与之相反,在编译链接时并没有把库文件的代码加入到可执行文件中,而是在程序执行时由运行时
链接文件加载库,这样可以节省系统的开销。动态库一般后缀名为“.so”, gcc 在编译时默认使用动态库。
gcc默认生成的二进制程序,是动态链接
,这点可以通过file命令验证
下图我们可以看到此test可执行程序为动态库
七、 gdb调试
7.1 背景介绍
程序的发布分两种,debug模式和release模式,一般Linux gcc/g++出来的二进制程序默认是release模式,如果要使用gdb调试,就必须在源代码生成二进制程式时,加上-g
选项,如
gcc test.c -o test -g
可以通过readelf
读取可执行信息
7.2 调试技巧
list + 行号,显示test源码,每次列10行
list + 函数名,列出某个函数源代码
b + 9,给第九行打断点
info b,查看断点信息
delete breakpoints + num:删除第n个断点
r或者run,debug开始调试
单步执行,回车或者按n
s或者step,进入函数调用
print(variable name):打印表达式的值,通过表达式可以修改变量的值或者调用函数
查看当前信息 :p + variable name
取地址信息: p + &(variable name)
display + 变量名,等于插个眼,当变量发生改变会显示出来
undisplay:取消对先前设置的那些变量的跟踪
c,直接跳到下个断点处
d + 对应的断点号进行删除
bt,查看调用的堆栈
finish,只接把当前的函数跑完并返回
until X行号:跳至X行
quit:退出gdb
创作不易,如果文章对你帮助的话,点赞三连哦:)