vim+vscode+tmux+gdb
个人的一些认为比较常用以及不经常用到的的快捷操作
vscode
- 查找文件ctrl+p, esc退出
- 分割屏幕ctrl+\,通过ctrl+1/2/3来切换分割屏幕的焦点
- ctrl+` 打开/关闭终端
- ctrl+tab, 在tab之间切换
- 模糊查找当前工作目录下的所有文件ctrl+p, #
- Ctrl + Shift + Tab 导航tab
- alt + <-/->切换tab
- alt + o在源文件和头文件之间切换
- ctrl + 1/2/3可以在分屏之间切换
vim
- 跳转到指定行号n, ngg
- 复制整行 yy, 复制包括当前行接下来n行, nyy
- 复制指定行v模式下指定复制内容,然后y键复制。
- 粘贴
如复制内容不是一整行:p粘贴到当前光标处,P粘贴到当前行首。
如复制内容是一整行:p粘贴到当前行的下一行,P粘贴到当前行的上一行 - 剪切dd
- 在当前文件查找指定内容,/+内容
- ctrl+] 跳转到函数的定义处,ctrl+t返回上一次光标处
- u撤销,ctrl+r恢复
^y
向上移动一行,^e
向下移动一行^b
向上移动一页,^f
向下移动一页- number + shift + G, 跳到第number行
- 在
tab
之间切换,Alt
+number
. - 可视条件下选中后
<
或>
完成缩进。 - 要想跳转到函数定义处,需要在项目目录中输入
ctags -R
命令。ctrl+]
跳转,ctrl+o
返回。 - 可视模式下注释+
d
。 - 替换变量名
:%s/foo/bar/g
将整个文件中的foo
替换为bar
- 在vim文件内使用shell命令
:! command
- 在当前文件中打开另一个文件
:e file
- 在Vim中编译代码
:!gcc %
, 编译并运行代码:!gcc % || ./a.out
dw
删除一个词I
将光标跳转到行首并进入Insert
模式
tmux
- 任何命令都需要加ctrl+b前缀
- c创建窗口;n, p切换窗口
- %垂直分屏, “水平分屏
- x关闭窗口(等同于^d)
- o在窗口之间切换
- PgUp开启tmux终端界面的翻页,q退出。
gdb
- delete 删除所有断点
- layout src/reg/asm 显示c源代码、寄存器和汇编,但未分屏;focus src/reg/asm在src、reg和asm的tui中来回切换
- layout split获得c和asm的分屏。
- info/i frame 查看栈帧, info/i args查看传递给main的参数, i locals显示当前的本地变量。
- 通过backtrace查看栈帧,frame n(n为bt结果的栈帧号),然后i frame查看当前栈帧号的详细内容
- print/p查看argv数据;print/p *argv(默认打印一个参数);可以通过print/p *argv@n 来选择argv数组中的n个元素即参数; p *argv@argc打印所有参数
print
是打印值,x
是访问主存。Ctrl + x
,再按1:单窗口模式,显示一个窗口Ctrl + x
,再按2:双窗口模式,显示两个窗口Ctrl + x
,再按a:回到传统模式,即退出layout,回到执行layout之前的调试窗口。^x+a
关闭可视化wa
跟踪某个变量(watch point)u
跳出循环
<>(gdb续)
break/b
break 函数名
break 行号
break 文件名:行号
break 文件名:函数名
break +偏移量
break -偏移量
break *地址
break 断点 if 条件
- 若不指定位置就默认在下一行代码上设置断点
info break
显示断点信息
run/r
, 如果不加参数,执行到断点位置后暂停运行(和start命令一样的效果)print/p
p $eax
,显示寄存器(寄存器名前加$)
p/格式 变量
, 显示寄存器可用的格式:- x, 显示为十六进制数
- d, 显示为十进制数
- u, 显示无符号十进制数
- o, 显示八进制数
- t, 显示二进制数(two)
- a, 显示地址
- c, 显示为字符
- f, 浮点小数
- s, 显示为字符串
- i, 显示为机器语言
x/NFU ADDR
, 显示内存的内容(eXamining):N
为重复次数F
为上述的P格式U
代表的单位:- b, 字节
- h, 半字
- w, 字(4字节默认)
- g, 双字
cgdb
- 使用
i
切换到GDB command
,esc
切换到source window
。 - 在
source window
下,可以像vim
一样用\
匹配内容, 且移动到指定行按下space
可以可视化打断点。 q
或者^c+d
退出gdb
- 调整
source window
的大小,-
缩小一行,=
增加一行。 - 在
source window
下^w
窗口水平竖直分割切换。 F5
=run
,F6
=continue
,F7
=finish
,F8
=next
,F10
=step
。CGDB
的配置, 在~/.cgdb/
目录下创建cgdbrc
文件并编辑。如果cgdbrc
文件存在,CGDB
就会执行该文件中的每一行。:set disasm
,以汇编语言的形式显示。:set hls
,高亮显示匹配到的字符串:set syn=style
设置当前文件对应语法风格的高亮。
git
git clone -b branch XXX
克隆指定分支的代码git reset --hard 1a703e
回滚到某个历史commitgit branch -m <branchName>
将当前分支名更改为branchNamegit checkout -b <newbranch>
创建新分支并切换到新分支git diff
查看修改的差异git reset <filename>
删除暂存区中特定的文件git rm <filename>
删除工作区的文件,并将该文件放入stage for removal中git merge [branch]
合并指定分支到当前分支git checkout -b [branch]
新建分支git checkout [branch]
切换分支git reset --hard
重置暂存区和工作区与上一次commit保持一致