1. vim编辑器
vim的区别简单点来说,它们都是多模式编辑器,vim的三种模式(有好多模式,这里主要讲解三个常用的),分别是命令模式、插入模式和底行模式。
1.1 正常/普通/命令模式
控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入插入模式下,或者到底行模式。
1.2 插入模式
只有在插入模式下,才可以做文字输入,按「ESC」键可回到命令行模式。该模式是用的最多的编辑模式。
1.3 末行模式(底行模式)
⽂件保存或退出,也可以进行文件替换,找字符串,列出行号等操作。
2. vim的基本操作
vim test.c
在系统提示符号输入vim及文件名称后,就进入vim全屏幕编辑画面。
2.1 [正常模式]切换⾄[插入模式]
输入a,或者i,或者o。
2.2 [插入模式]切换⾄[正常模式]
目前处于[插入模式],只能输入文字,如果发现输错了字,想用光标键往回移动,将该字删除,可以先按⼀下「ESC」键转到[正常模式]再删除文字。(但是一般可以直接删除)。
2.3 [正常模式]切换⾄[末行模式]
shift+; 其实就是输入:
2.4 退出文件
退出vim及保存⽂件,要首先进入底行模式下输入:
:w(保存当前文件)
:wq(输入wq,存盘并退出vim)
:q!(输⼊q!,不存盘强制退出vim)
3.vim正常模式的一些命令
3.1 移动光标
h,j,k,l | 分别表示左,下,上,右移动一格 |
G | 移动到文章结尾 |
$ | 移动到光标所在行的“行尾” |
^ | 移动到光标所在行的“行⾸” |
w | 光标跳到下个字的开头 |
e | 光标跳到下个字的字尾 |
b | 光标回到上个字的开头 |
*l | 光标移到该行的第*个位置 |
gg | 进入到文本开始 |
shift+g | 进入文本末端 |
ctrl+b | 屏幕往“后”移动⼀⻚ |
ctrl+f | 屏幕往“前”移动⼀⻚ |
ctrl+u | 屏幕往“后”移动半⻚ |
ctrl+d | 屏幕往“前”移动半⻚ |
3.2 删除文字
x | 每按⼀次,删除光标所在位置的⼀个字符 |
#x | 表⽰删除光标所在位置的“后⾯(包含⾃⼰在内)”#个字符 |
X | ⼤写的X,删除光标所在位置的“前⾯”⼀个字符 |
#X | 表⽰删除光标所在位置的“前⾯”#个字符 |
dd | 删除光标所在⾏ |
#dd | 从光标所在行开始删除#行 |
3.3 复制
yw | 将光标所在之处到字尾的字符复制到缓冲区中 |
#yw | 复制#个字到缓冲区 |
yy | 复制光标所在行到缓冲区。 |
#yy | 表⽰拷⻉从光标所在的该⾏“往下数”#行⽂字 |
p | 将缓冲区内的字符贴到光标所在位置(也就是说p需要和'y'指令配合使用) |
3.4 替换
r | 替换光标所在处字符 |
R | 替换光标所到之处的字符,直到按下「ESC」键为⽌ |
3.5 撤销上⼀次操作
u | 误执⾏⼀个命令,可以⻢上按下u,回到上⼀个操作。按多次“u”可以执行多次回复 |
ctrl+r | 撤销的恢复 |
3.6 更改
cw | 更改光标所在处的字到字尾处 |
c#w | 表⽰更改#个字 |
3.7 跳到指定的行
ctrl+g | 列出光标所在行的行号 |
#G | 表⽰移动光标至文章的第#行行⾸ |
4. vim末行模式的一些命令
set nu | 输入set nu后,会在⽂件中的每⼀行前⾯列出行号 |
# | #号表示⼀个数字,在冒号后输入⼀个数字,再按回车键就会跳到该行了 |
/+关键字 | 先输入 / 键,再输入想寻找的字符,如果第⼀次找的关键字不是想要的,可以⼀直按n后往后寻找到您要的关键字 |
?+关键字 | 先输入 ? 键,再输入想寻找的字符,如果第⼀次找的关键字不是想要的,可以⼀直按n后往后寻找到您要的关键字 |
w | 输入字⺟w就可以将文件保存起来 |
q | 按q就是退出,如果⽆法离开vim,可以在q后加⼀个!强制离开vim |
wq | 离开时,wq⼀起使⽤,这样在退出的时候还可以保存文件 |
5. 批量化注释和去注释
这里会使用到一个新模式,视图模式( ctrl + v 进入视图模式)
批量化注释:
输入ctrl+v,再通过h,j,k,l移动光标控制要注释的部分,再进入插入模式(shift+i),最后输入//。
批量化去注释:
输入ctrl+v,再通过h,j,k,l移动光标控制要去掉注释的部分,再输入d。
6. cgdb的一些常用指令
要使用cgdb调试,必须在源代码⽣成⼆进制程序的时候,加上编译 -g 选项,如果没有添加,程序无法被调试。
gcc test.c -o test -g
如果没有安装cgdb可以通过以下方式安装:
Ubuntu: sudo apt-get install -y cgdb
Centos: sudo yum install -y cgdb
list/l | 显示源代码,从上次位置开始,每次列出10行 |
list/l 函数名 | 列出指定函数的源代码 |
list/l 文件名:行号 | 列出指定⽂件的源代码 |
r/run | 从程序开始连续执行 |
n/next | 单步执行,不进入函数内部 |
s/step | 单步执行,进入函数内部 |
break/b [文件名:]行号 | 在指定行号设置断点 |
break/b 函数名 | 在函数开头设置断点 |
info break/b | 查看当前所有断点的信息 |
finish | 执行到当前函数返回,然后停止 |
print/p 表达式 | 打印表达式的值 |
set var 变量=值 | 修改变量的值 |
continue/c | 从当前位置开始连续执行程序 |
delete/d breakpoints | 删除所有断点 |
delete/d breakpoints n | 删除序号为n的断点 |
disable breakpoints | 禁⽤所有断点 |
enable breakpoints | 启⽤所有断点 |
info/i breakpoints | 查看当前设置的断点列表 |
display 变量名 | 跟踪显示指定变量的值(每次停止时) |
undisplay 编号 | 取消对指定编号的变量的跟踪显示 |
until 行号 | 执行到第#行 |
backtrace/bt | 查看当前执行栈的各级函数调⽤及参数 |
info/i locals | 查看当前栈帧的局部变量值 |
quit | 退出cgdb调试器 |
6.1 set var 变量=值 和 watch 变量
set var 变量=值:
这个是用于调试,去查看是否由于该变量引起逻辑错误,可以通这个命令去暂时修改这个变量的值,去观察。
watch 变量:
执行时监视⼀个表达式(如变量)的值。如果监视的表达式在程序运行期间的值发生变化,cgdb会暂停程序的执行,并通知。