vim+vscode+tmux+gdb

个人的一些认为比较常用以及不经常用到的的快捷操作

vscode

  1. 查找文件ctrl+p, esc退出
  2. 分割屏幕ctrl+\,通过ctrl+1/2/3来切换分割屏幕的焦点
  3. ctrl+` 打开/关闭终端
  4. ctrl+tab, 在tab之间切换
  5. 模糊查找当前工作目录下的所有文件ctrl+p, #
  6. Ctrl + Shift + Tab 导航tab
  7. alt + <-/->切换tab
  8. alt + o在源文件和头文件之间切换
  9. ctrl + 1/2/3可以在分屏之间切换

vim

  1. 跳转到指定行号n, ngg
  2. 复制整行 yy, 复制包括当前行接下来n行, nyy
  3. 复制指定行v模式下指定复制内容,然后y键复制。
  4. 粘贴
    如复制内容不是一整行:p粘贴到当前光标处,P粘贴到当前行首。
    如复制内容是一整行:p粘贴到当前行的下一行,P粘贴到当前行的上一行
  5. 剪切dd
  6. 在当前文件查找指定内容,/+内容
  7. ctrl+] 跳转到函数的定义处,ctrl+t返回上一次光标处
  8. u撤销,ctrl+r恢复
  9. ^y向上移动一行, ^e向下移动一行
  10. ^b向上移动一页,^f向下移动一页
  11. number + shift + G, 跳到第number行
  12. tab之间切换, Alt+number.
  13. 可视条件下选中后<>完成缩进。
  14. 要想跳转到函数定义处,需要在项目目录中输入ctags -R命令。ctrl+]跳转, ctrl+o返回。
  15. 可视模式下注释+d
  16. 替换变量名:%s/foo/bar/g将整个文件中的foo替换为bar
  17. 在vim文件内使用shell命令:! command
  18. 在当前文件中打开另一个文件:e file
  19. 在Vim中编译代码:!gcc %, 编译并运行代码:!gcc % || ./a.out
  20. dw删除一个词
  21. I将光标跳转到行首并进入Insert模式

tmux

  1. 任何命令都需要加ctrl+b前缀
  2. c创建窗口;n, p切换窗口
  3. %垂直分屏, “水平分屏
  4. x关闭窗口(等同于^d)
  5. o在窗口之间切换
  6. PgUp开启tmux终端界面的翻页,q退出。

gdb

  1. delete 删除所有断点
  2. layout src/reg/asm 显示c源代码、寄存器和汇编,但未分屏;focus src/reg/asm在src、reg和asm的tui中来回切换
  3. layout split获得c和asm的分屏。
  4. info/i frame 查看栈帧, info/i args查看传递给main的参数, i locals显示当前的本地变量。
  5. 通过backtrace查看栈帧,frame n(n为bt结果的栈帧号),然后i frame查看当前栈帧号的详细内容
  6. print/p查看argv数据;print/p *argv(默认打印一个参数);可以通过print/p *argv@n 来选择argv数组中的n个元素即参数; p *argv@argc打印所有参数
  7. print是打印值,x是访问主存。
  8. Ctrl + x,再按1:单窗口模式,显示一个窗口
  9. Ctrl + x,再按2:双窗口模式,显示两个窗口
  10. Ctrl + x,再按a:回到传统模式,即退出layout,回到执行layout之前的调试窗口。
  11. ^x+a关闭可视化
  12. wa跟踪某个变量(watch point)
  13. u跳出循环

<>(gdb续)

  1. break/b
    • break 函数名
    • break 行号
    • break 文件名:行号
    • break 文件名:函数名
    • break +偏移量
    • break -偏移量
    • break *地址
    • break 断点 if 条件
    • 若不指定位置就默认在下一行代码上设置断点
    • info break显示断点信息
  2. run/r, 如果不加参数,执行到断点位置后暂停运行(和start命令一样的效果)
  3. print/p
    • p $eax,显示寄存器(寄存器名前加$)
  4. p/格式 变量, 显示寄存器可用的格式:
    • x, 显示为十六进制数
    • d, 显示为十进制数
    • u, 显示无符号十进制数
    • o, 显示八进制数
    • t, 显示二进制数(two)
    • a, 显示地址
    • c, 显示为字符
    • f, 浮点小数
    • s, 显示为字符串
    • i, 显示为机器语言
  5. x/NFU ADDR, 显示内存的内容(eXamining):
    • N为重复次数
    • F为上述的P格式
    • U代表的单位:
      • b, 字节
      • h, 半字
      • w, 字(4字节默认)
      • g, 双字

cgdb

  1. 使用i切换到GDB commandesc切换到source window
  2. source window下,可以像vim一样用\匹配内容, 且移动到指定行按下space可以可视化打断点。
  3. q或者^c+d退出gdb
  4. 调整source window的大小, -缩小一行,=增加一行。
  5. source window^w窗口水平竖直分割切换。
  6. F5 = run, F6 = continue, F7 = finish, F8 = next, F10 = step
  7. CGDB的配置, 在~/.cgdb/目录下创建cgdbrc文件并编辑。如果cgdbrc文件存在,CGDB就会执行该文件中的每一行。
    • :set disasm,以汇编语言的形式显示。
    • :set hls,高亮显示匹配到的字符串
    • :set syn=style设置当前文件对应语法风格的高亮。

git

  • git clone -b branch XXX克隆指定分支的代码
  • git reset --hard 1a703e回滚到某个历史commit
  • git branch -m <branchName>将当前分支名更改为branchName
  • git 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保持一致