一. vim的三種工作模式
1.命令模式:用vim打開文件之后,進入了不可編輯的狀態(tài),這個時候可以使用命令對文本進行操作。
2.行末模式:在命令模式下 鍵入 shift + : 就進入了行末模式。
3.輸入模式:在命令模式下 鍵入 i 就進入了輸入模式,這種模式就是對文本進行編輯。
行末模式、輸入模式鍵入esc 就進入命令模式。
二.命令模式常用快捷鍵
i: 輸入,光標前面
I: 輸入,光標前面
a: 輸入,光標會邏動一個位置
A:輸入,光標會邏動到最后
o:輸入,光標會邏動到下一行
O:輸入,光標會邏動到上一行
s:輸入,會刪除光標所在字符
S: 輸入,會刪除光標所在行
1.跳轉(zhuǎn)和刪除
h: 左
j:下
k:上
l:右
5G: 跳轉(zhuǎn)到多上行
5+回車:跳轉(zhuǎn)到多上行,末行模式
gg: 跳轉(zhuǎn)到開始
G: 跳轉(zhuǎn)到末尾
$:跳轉(zhuǎn)到行尾巴
0:跳轉(zhuǎn)到行首
gg=G : 格式化代碼
dw:刪除單詞,需要注意光標要在單詞的開始
x:刪除某個字母
d0:刪除光標至行首
v + h/j/k/l : 刪除選中區(qū)域
dd:刪除整行 剪切整行
3dd: 刪除3行
2.2 復制粘貼查找替換
yy: 復制
p: 粘貼,下一行
P:粘貼,本行
dd: 其實是刪除并且賦值,剪切
3yy: 賦值3行
u:撤銷
*:跳轉(zhuǎn)到下一個
/ + define + 回車 : 查找 , n 跳轉(zhuǎn)到下一個, N 是查看上一個
r + i : 把當前光標字符替換成 i
s /printf/println/ : 末行模式下,printf替換成println ,光標所在行,而且是前一個
%s /printf/println :每一行都替換,而且是前一個
%s /printf/println/g : 替換所有
1,3s /print/println/g :1-3行替換
2.3 其他 行末模式
ctrl+r:反撤銷
vsp:分屏
ctrl + ww : 切換分屏
q: 退出當前
wqall:保存退出全部
2.4 在命令模式下搜索單詞
/ + 單詞 + 回車
n 搜索下一個
N 搜索上一個
三. gcc 編譯四步驟
so 怎么來的? .c 文件 -> 可執(zhí)行文件,四個步驟
gcc -E -o hello.i hello.c
3.1 預處理階段:
宏定義展開,宏定義替換,展開 include 的文件。
3.2 預編譯階段:
在這個階段,GCC 才會去檢測你代碼的規(guī)范性,語法是否有錯誤,gcc 會把代碼翻譯成匯編
gcc -S -o hello.s hello.i
3.3 匯編階段:
把 .s 文件翻譯成二進制.o文件(機器的指令),文本打開的是亂碼
gcc -c -o hello.o hello.s
3.4 鏈接階段:
計算邏輯地址,合并數(shù)據(jù)段,有些函數(shù)是在另外一個 so 庫文件中的。
gcc -o hello hello.o
- 動態(tài)庫和靜態(tài)庫
人臉識別,github 下載編譯好的 android 的 so , 會有一些 .a ,會有一些 .so
4.1 靜態(tài)庫和動態(tài)庫的區(qū)別
靜態(tài)庫:其實是內(nèi)容的拷貝(代碼),運行階段沒有 .a 文件了也是可以執(zhí)行的。
動態(tài)庫:不會拷貝內(nèi)容,運行階段起的作用(加載),生成 so 的時候要生成與位置無關的代碼,沒有 so 不能運行。
四. 動態(tài)庫和靜態(tài)庫
下載編譯好的 android 的 so , 會有一些 .a ,會有一些 .so
4.1 靜態(tài)庫和動態(tài)庫的區(qū)別
靜態(tài)庫:其實是內(nèi)容的拷貝(代碼),運行階段沒有 .a 文件了也是可以執(zhí)行的。
動態(tài)庫:不會拷貝內(nèi)容,運行階段起的作用(加載),生成 so 的時候要生成與位置無關的代碼,沒有 so 不能運行。
4.2靜態(tài)庫與動態(tài)庫生成:(不是重點)
4.2.1 靜態(tài)庫生成
4.2.1.1 將 c 生成 .o
gcc -c add.c -o add.o
4.2.1.2 使用 ar 工具制作靜態(tài)庫
ar rcs libmath.a add.o xxx.o
4.2.1.3 編譯靜態(tài)庫到可執(zhí)行文件
gcc a.c libmath.a -o hello
4.2.2 動態(tài)庫生成
4.2.2.1 將 c 生成 .o (要生成與位置無關的代碼)
gcc -c add.c -o add.o -fPIC
4.2.2.2 使用 gcc -shared 制作動態(tài)庫
gcc -shared -o libmath.so add.o xxx.o
4.2.1.3 編譯動態(tài)庫到可執(zhí)行文件,需要指定動態(tài)庫的名稱 -l , 指定庫路徑 -L
gcc a.c -o a -l名稱 -L./