Vim使用与设置

image.png

  1. 命令模式
  • 保存与退出:ZZ
  • 代码格式化:gg=G
  • 光标移动:
    • h:光标左移
    • j:光标下移
    • k:光标上移
    • l:光标右移
    • w:移动一个单词
    • gg:移动到文件开头
    • G:移动到文件尾部
    • 0:移动到行首
    • $:移动到行尾
    • nG:移动到第n行
  • 删除命令
    • x:删除光标后一个字符,相当于Del
    • X:删除光标前一个字符,相当于BackSpace
    • dw:删除光标开始位置的字,包含光标所在字符
    • d0:删除光标前文本行所有内容,不包含光标所在字符
    • D/d$:删除光标后本行所有内容,包含光标所在字符
    • dd:删除光标所在行(实质是剪切)
    • ndd:从光标当前行向下删除n行
  • 撤销与反撤销
    • u:撤销
    • ctrl+r:反撤销
  • 复制与粘贴
    • yy:复制当前行
    • nyy:向下复制n行
    • p:光标下行粘贴
    • P:光标上层粘贴
  • 可视模式
    • v:方向键移动选中文本,按d删除(剪切),按y复制,p粘贴到光标后面,P粘贴到前面
    • ctrl+v:v的列选中模式
  • 替换操作
    • r:替换一个字符
    • R:向后替换字符(不限制字数)
  • 查找命令
    • /:/xxx回车,从光标所在位置开始搜索xxx,按n向下搜索,N向上搜索
    • ?:?xxx回车,从光标所在位置开始搜索xxx,按n向上搜索,N向下搜索
    • :将光标移动到待搜索字符串上,按n向上搜索,N向下搜索

    • K:与man相同,查看帮助文档
  1. 编辑模式
  • i:光标前插入
  • a:光标后插入
  • I:行首插入
  • A:行尾插入
  • o:向下新建一行,插入
  • O:向上新建一行,插入
  • s:删除后面一个字符,插入
  • S:删除当前行,插入
  • 列编辑:ctrl+v进入列模式,移动光标选中多行,按I插入字符,按两次ESC执行修改
  1. 末行模式
  • 保存退出
    • :q:退出
    • :q!:强制退出,不保存
    • :w:保存,不退出
    • :wq:保存退出
    • :x:等于wq
  • 替换操作
    • :s/old/new/ :光标所在行的第一个old替换成new
    • :s/old/new/g :光标所在行的所有old替换成new
    • :m,ns/old/new/g :将m行到n行之间的old全部替换为new
    • :%s/old/new/g :当前文件中所有old替换为new
    • :%s/old/new/gc :同上,但每次需要用户确认
    • :1,$s/old/new/g :当前文件中所有old替换为new
  • 快速翻屏
    • ctrl+u:up向上翻半屏
    • ctrl+d:down向下翻半屏
    • ctrl+f:front向前翻一屏(ctrl+d*2)
    • ctrl+b:back向后翻一屏(strl+u*2)
  • 执行shell命令
    • :!shell
  • 分屏操作
    • 打开文件后分屏
      • :sp :当前文件水平分屏
      • :vsp :当前文件垂直分屏
      • :sp 某文件 :与某文件水平分屏
      • :vsp 某文件 :与某文件垂直分屏
      • :ctrl+w+w :在多个窗口切换光标
      • :wall/:wqall/:xall/:qall/:qall! :保存/保存退出/保存退出/退出/强制退出
    • 打开文件前分屏
      • 水平分屏:vim -o file1 file2 …
      • 垂直分屏:vim -O file1 file2 …
  1. Vim配置文件
  • 用户级别配置文件:~/.vimrc
  • 系统级别配置文件:/etc/vim/vimrc
  • 常用设置
    • set tabstop=4 ——设置缩进4个空格
    • set nu ——设置行号
    • set shiftwidth ——设置gg=G缩进4个空格

      GCC编译器

      image.png
      image.png
  1. GCC指令流程
  • 预处理 :gcc -E a.c -o a.i
  • 翻译成汇编 :gcc -S a.i -o a.s
  • 编译 :gcc -c a.s -o a.o
  • 链接 :gcc a.o -o a.out
  • 简写 :gcc a.c -o a.out
  1. GCC常用参数
  • -v:查看gcc版本号,与—version相同
  • -E:生成预处理文件
  • -S:生成汇编文件
  • -c:编译,生成.o文件
  • -I:指定头文件路径(include,I)
  • -L:指定库文件路径(lib,L)
  • -l:指定库名称(lib,l)
  • -o:指定生成的目标文件名称
  • -g:包含调试信息,使用gdb调试需要添加-g参数
  • -On:编译优化,n=0~3,越大优化越多
  • -Wall:提示更多警告信息
  • -D:编译时定义宏定义
    • gcc -o a.out a.c -D MAX=10 # 编译时定义宏MAX=10

      静态库与动态库

  1. 静态库(static library)
  • 静态库制作
    • gcc -c a1.c a2.c # 将a1.c,a2.c编译生成二进制文件a1.o,a2.o
    • ar rcs libtest.a a1.o a2.o # 将a1.o,a2.o打包为test静态库
      • linux中静态库文件前缀lib后缀.a
      • r更新、c创建、s建立索引(不带-)
  • 静态库使用
    • gcc -o main.out main.c -L ./ -l test -I ./
      • 将main.c编译为main.out
      • -l test :使用库test(libtest)
      • -L ./ :在./路径下寻找libtest
      • -I ./ :在./路径下寻找所需头文件(./可省略)

image.png

  1. 动态库(shared library)/共享库
  • 动态库制作
    • gcc -fpic -c a1.c a2.c
    • gcc -shared a1.o a2.o -o libtest2.so
      • linux动态库文件前缀lib后缀.so
    • 简写:gcc -fpic -shared a1.c a2.c libtest2.so
  • 动态库使用
    • gcc -o main.out main.c -L ./ -l test2 -I ./
      • 将main.c编译为main.out
      • -l test2 :使用库test2(libtest2)
      • -L ./ :在./路径下寻找libtest2
      • -I ./ :在./路径下寻找所需头文件(./可省略)
    • ldd main.out # 查看可执行文件依赖的库

image.png

  • file main.out # 查看main.out文件类型为ELF类型

image.png

  • 如何让系统找到动态库
    • 拷贝自己制作的共享库到/lib或者/usr/lib
    • 临时设置:export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:库路径
    • 永久设置到用户:将上述指令写入~/.bashrc,执行. ~/.bashrc
    • 永久设置到系统(两种方法):
      1. 将上述指令写入/etc/profile
      2. 在/etc/ld.so.conf文件中加入库文件所在目录,执行sudo ldconfig -v