【Linux】vim快捷键,再也不用VS,把队友飒到哭 + gdb调试

一、 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

我们如果想删除当前光标后面的内容用 xnum+x删除n个字符
反响删除用shift + x

4.1.8 删多了,想撤回?

命令模式下,用 u撤回
那如何想撤回刚才的撤回呢?
answer:ctrl + r

总结一下command下的模式:
在这里插入图片描述

4.2 插入模式下

4.2.1 三种进入插入模式的方式

  1. a :光标向后移动一个字符
  2. i :当前字符进行插入
  3. 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


创作不易,如果文章对你帮助的话,点赞三连哦:)

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码

)">
< <上一篇
下一篇>>