第二周学习过程总结
1.重點知識點梳理:
? ? ? ? ? GCC編譯的四個步驟:預(yù)處理(gcc -E)、編譯(gcc -S)、匯編(gcc -c)、鏈接
? ? ? ? ? 靜態(tài)鏈接庫的生成:ar rcsv libxxx.a xxx.o ?
? ? ? ? ? 共享庫的生成 gcc -fPIC -c xxx.c
快速記憶
Vim:
Vim具有6種基本模式和5種派生模式,我們這里只簡單介紹下6種基本模式:
- 普通模式(Normal mode)
- 插入模式(Insert mode)
- 可視模式(Visual mode)
- 選擇模式(Select mode)
- 命令行模式(Command line mode)
- Ex模式(Ex mode)
三種常用模式的切換:
vim啟動進(jìn)入普通模式,處于插入模式或命令行模式時只需要按Esc或者Ctrl+[(這在vim課程環(huán)境中不管用)即可進(jìn)入普通模式。普通模式中按i(插入)或a(附加)鍵都可以進(jìn)入插入模式,普通模式中按:進(jìn)入命令行模式。命令行模式中輸入wq回車后保存并退出vim。
幾個快捷鍵:
- 大寫“K”可以用來查找函數(shù)的幫助信息:查看?man?page,命令模式下,將光標(biāo)放在函數(shù)名上,按"K"可以直接察看?man?page。
- 幾個設(shè)置
:set?nu?顯示行號
:set?ai?自動縮行
:set?ts=4?設(shè)置一個?TAB?鍵等于幾個空格
- 移動光標(biāo)
[[?轉(zhuǎn)到上一個位于第一列的"{"
]]?轉(zhuǎn)到下一個位于第一列的"{"
{?轉(zhuǎn)到上一個空行
}?轉(zhuǎn)到下一個空行
gd?轉(zhuǎn)到當(dāng)前光標(biāo)所指的局部變量的定義。
進(jìn)入vim:
(1)使用vim命令進(jìn)入vim:
vim后面加上你要打開的已存在的文件名或者不存在(則作為新建文件)的文件名。 打開Xfce終端,輸入以下命令
$ vim practice_1.txt直接使用vim也可以打開vim編輯器,但是不會打開任何文件。
$ vim進(jìn)入命令行模式后輸入:e 文件路徑?同樣可以打開相應(yīng)文件。
(2)游標(biāo)移動
在進(jìn)入vim后,按下i鍵進(jìn)入插入模式。在該模式下您可以輸入文本信息,下面請輸入如下三行信息:
12345678 abcdefghijk shiyanlou.com按Esc進(jìn)入普通模式,在該模式下使用方向鍵或者h(yuǎn),j,k,l鍵可以移動游標(biāo)。
| h | 左 |
| l | 右(小寫L) |
| j | 下 |
| k | 上 |
| w | 移動到下一個單詞 |
| b | 移動到上一個單詞 |
請嘗試在普通模式下使用方向鍵移動光標(biāo)到shiyanlou這幾個字母上面。
(3)插入模式
在普通模式下使用下面的鍵將進(jìn)入插入模式,并可以從相應(yīng)的位置開始輸入
| i | 在當(dāng)前光標(biāo)處進(jìn)行編輯 |
| I | 在行首插入 |
| A | 在行末插入 |
| a | 在光標(biāo)后插入編輯 |
| o | 在當(dāng)前行后插入一個新行 |
| O | 在當(dāng)前行前插入一個新行 |
| cw | 替換從光標(biāo)所在位置后到一個單詞結(jié)尾的字符 |
請嘗試不同的從普通模式進(jìn)入插入模式的方法,在最后一行shiyanlou前面加上www.,注意每次要先回到普通模式才能切換成以不同的方式進(jìn)入插入模式
(4)保存文檔
從普通模式輸入:進(jìn)入命令行模式,輸入w回車,保存文檔。輸入:w 文件名可以將文檔另存為其他文件名或存到其它路徑下。
(5)退出
從普通模式輸入:進(jìn)入命令行模式,輸入wq回車,保存并退出編輯
以下為其它幾種退出方式:
| :q! | 強(qiáng)制退出,不保存 |
| :q | 退出 |
| :wq! | 強(qiáng)制保存并退出 |
| :w <文件路徑> | 另存為 |
| :saveas 文件路徑 | 另存為 |
| :x | 保存并退出 |
| :wq | 保存并退出 |
?
普通模式下輸入Shift+zz即可保存退出vim
(6)刪除
進(jìn)入普通模式,使用下列命令可以進(jìn)行文本快速刪除:
| x | 刪除游標(biāo)所在的字符 |
| X | 刪除游標(biāo)所在前一個字符 |
| Delete | 同x |
| dd | 刪除整行 |
| dw | 刪除一個單詞(不適用中文) |
| d$或D | 刪除至行尾 |
| d^ | 刪除至行首 |
| dG | 刪除到文檔結(jié)尾處 |
| d1G | 刪至文檔首部 |
除此之外,你還可以在命令之前加上數(shù)字,表示一次刪除多行,如:
2dd表示一次刪除2。
gcc
我們可以把編譯過程分成四步:
- 預(yù)處理:gcc?–E?hello.c?–o?hello.i;gcc?–E調(diào)用cpp
- 編?譯:gcc?–S?hello.i?–o?hello.s;gcc?–S調(diào)用ccl
- 匯?編:gcc?–c?hello.s?–o?hello.o;gcc?-c?調(diào)用as
- 鏈?接:gcc?hello.o?–o?hello?;gcc?-o?調(diào)用ld
gdb
GDB最基本的命令有:
- gdb?programm(啟動GDB)
- b?設(shè)斷點(要會設(shè)4種斷點:行斷點、函數(shù)斷點、條件斷點、臨時斷點)
- run?開始運行程序
- bt?打印函數(shù)調(diào)用堆棧
- p?查看變量值
- c?從當(dāng)前斷點繼續(xù)運行到下一個斷點
- n?單步運行
- s?單步運行
- quit?退出GDB
調(diào)試命令:
- display?跟蹤變量值的改變
- until?跳出循環(huán)
- finish?跳出函數(shù)
- help?幫助
?
2.詳細(xì)介紹
vim重復(fù)命令
重復(fù)執(zhí)行上次命令
在普通模式下.(小數(shù)點)表示重復(fù)上一次的命令操作
拷貝測試文件到本地目錄
$ cp /etc/protocols .打開文件進(jìn)行編輯
$ vim protocols普通模式下輸入x,刪除第一個字符,輸入.(小數(shù)點)會再次刪除一個字符,除此之外也可以重復(fù)dd的刪除操作
執(zhí)行指定次數(shù)相同的命令
進(jìn)入普通模式輸入N<command>,N表示重復(fù)后面的次數(shù),下面來練習(xí)以下:
在普通模式下,你還可以使用dw或者daw(delete a word)刪除一個單詞,所以你可以很容易的聯(lián)想到dnw(n替換為相應(yīng)數(shù)字)表示刪除n個單詞
游標(biāo)的快速跳轉(zhuǎn)
普通模式下,下列命令可以讓光標(biāo)快速調(diào)轉(zhuǎn)到指定位置,我們分別討論快速實現(xiàn)行間跳轉(zhuǎn)和行內(nèi)跳轉(zhuǎn)
行間跳轉(zhuǎn)
| nG(n Shift+g) | 游標(biāo)移動到第 n 行(如果默認(rèn)沒有顯示行號,請先進(jìn)入命令模式,輸入:set nu以顯示行號) |
| gg | 游標(biāo)移動到到第一行 |
| G(Shift+g) | 到最后一行 |
?
小技巧:你在完成依次跳轉(zhuǎn)后,可以使用Ctrl+o快速回到上一次(跳轉(zhuǎn)前)光標(biāo)所在位置,這個技巧很實用,比如當(dāng)你在寫代碼時,忽然想起有個bug,需要修改,這時候你跳過去改好了,只需要按下Ctrl+o就可以回到你之前的位置。vim中會用很多類似的小技巧就等著你去發(fā)掘。
行內(nèi)跳轉(zhuǎn)
普通模式下使用下列命令在行內(nèi)按照單詞為單位進(jìn)行跳轉(zhuǎn)
| w | 到下一個單詞的開頭 |
| e | 到下一個單詞的結(jié)尾 |
| b | 到前一個單詞的開頭 |
| ge | 到前一個單詞的結(jié)尾 |
| 0或^ | 到行頭 |
| $ | 到行尾 |
| f<字母> | 向后搜索<字母>并跳轉(zhuǎn)到第一個匹配的位置(非常實用) |
| F<字母> | 向前搜索<字母>并跳轉(zhuǎn)到第一個匹配的位置 |
| t<字母> | 向后搜索<字母>并跳轉(zhuǎn)到第一個匹配位置之前的一個字母(不常用) |
| T<字母> | 向前搜索<字母>并跳轉(zhuǎn)到第一個匹配位置之后的一個字母(不常用) |
依次進(jìn)行如下操作練習(xí):
- 在普通模式下,任意跳轉(zhuǎn)到一行,使用w跳轉(zhuǎn)到一個單詞的開頭,然后使用dw刪除這個單詞
- 在普通模式下,使用e跳轉(zhuǎn)到一個單詞的結(jié)尾,并使用~將游標(biāo)所在字母變成大寫或小寫
復(fù)制粘貼和剪切
復(fù)制及粘貼文本
-
普通模式中使用y復(fù)制
- 普通模式中,yy復(fù)制游標(biāo)所在的整行(3yy表示復(fù)制3行)
- 普通模式中,y^?復(fù)制至行首,或y0。不含光標(biāo)所在處字符。
- 普通模式中,y$?復(fù)制至行尾。含光所在處字符。
- 普通模式中,yw?復(fù)制一個單詞。
- 普通模式中,y2w?復(fù)制兩個單詞。
- 普通模式中,yG?復(fù)制至文本末。
- 普通模式中,y1G?復(fù)制至文本開頭。
-
普通模式中使用p粘貼
- 普通模式中,p(小寫)代表粘貼至光標(biāo)后(下)
- 普通模式中,P(大寫)代表粘貼至光標(biāo)前(上)
打開文件進(jìn)入普通模式練習(xí)上述命令,這會兒你就可以隨意yy了,一 一+
$ vim protocols剪切及粘貼
其實前面講得dd刪除命令就是剪切,你每次dd刪除文檔內(nèi)容后,便可以使用p來粘貼,也這一點可以讓我們實現(xiàn)一個很爽快的功能——交換上下行:
ddp,就這么簡單,即實現(xiàn)了快速交換光標(biāo)所在行與它下面的行
?
實驗心得:熟悉掌握相關(guān)命令。在普通模式下.(小數(shù)點)表示重復(fù)上一次的命令操作。例如:普通模式下輸入 x,刪除第一個字符,輸入.(小數(shù)點)會再次刪除一個字符,除此之外也可以重復(fù) dd 的刪除操作。nG(n Shift+g) gg G(Shift+g)Ctrl+o,若有bug需要修改,只需要按下 Ctrl+o 就可以回到之前的位置。
字符的替換及撤銷(Undo操作)
替換和撤銷(Undo)命令
替換和Undo命令都是針對普通模式下的操作
| r+<待替換字母> | 將游標(biāo)所在字母替換為指定字母 |
| R | 連續(xù)替換,直到按下Esc |
| cc | 替換整行,即刪除游標(biāo)所在行,并進(jìn)入插入模式 |
| cw | 替換一個單詞,即刪除一個單詞,并進(jìn)入插入模式 |
| C(大寫) | 替換游標(biāo)以后至行末 |
| ~ | 反轉(zhuǎn)游標(biāo)所在字母大小寫 |
| u{n} | 撤銷一次或n次操作 |
| U(大寫) | 撤銷當(dāng)前行的所有修改 |
| Ctrl+r | redo,即撤銷undo的操作 |
打開文件進(jìn)行編輯:
$ vim practice_2 # 輸入以下文本 www.shiyanlou.com然后依次進(jìn)行如下操作
- 輸入11G,跳轉(zhuǎn)到11行
- 輸入fa跳轉(zhuǎn)到第一個a字符
- 輸入r,并且輸入b,a字符被b字符替換(實用)
- 輸入R替換字符,輸入新字符串,輸入完按ESC回到普通模式(實用)
- 輸入cc替換整行字符,輸入新字符串,輸入完按ESC回到普通模式
- 輸入cw?替換一個英文字(word),輸入完按ESC回到普通模式(實用)
- 輸入~,翻轉(zhuǎn)游標(biāo)所在字符的大小寫
- 輸入C?替換至行尾,即游標(biāo)所在處以后的字都會被替換,輸入完按ESC回到普通模式
- 輸入u?撤銷上一次的操作
快速縮進(jìn)
使用命令進(jìn)行快速調(diào)整縮進(jìn)操作
這一小節(jié)學(xué)習(xí)如何在vim中進(jìn)行快速縮進(jìn),縮進(jìn)操作均在普通模式下有效
打開文件進(jìn)行編輯
$ vim protocols- 普通模式下輸入15G,跳轉(zhuǎn)到15行
- 普通模式下輸入>>?整行將向右縮進(jìn)(使用,用于格式化代碼超爽)
- 普通模式下輸入<<?整行向左回退
- 普通模式下輸入:進(jìn)入命令行模式下對shiftwidth值進(jìn)行設(shè)置可以控制縮進(jìn)和回退的字符數(shù)
shiftwidth命令
shiftwidth命令是指上一節(jié)>>命令產(chǎn)生的縮進(jìn)(可以簡寫成sw) 普通模式下輸入:進(jìn)入命令行模式下對shiftwidth值進(jìn)行設(shè)置可以控制縮進(jìn)和回退的字符數(shù) 獲取目前的設(shè)定值
:set shiftwidth?設(shè)置縮進(jìn)為10個字符
:set shiftwidth=10輸入ESC回到普通模式,再次嘗試>>看縮進(jìn)量是否變化
調(diào)整文本位置
命令行模式下輸入:ce(center)命令使本行內(nèi)容居中
:ce命令行模式下輸入:ri(right)命令使本行文本靠右
:ri命令行模式下輸入:le(left)命令使本行內(nèi)容靠左
:le查找
快速查找
普通模式下輸入/然后鍵入需要查找的字符串 按回車后就會進(jìn)行查找。??與/功能相同,只不過?是向上而/是向下查找。 進(jìn)入查找之后,輸入n和N可以繼續(xù)查找?n表示繼續(xù)查找,N反向查找
高級查找
- 普通模式下輸入\*尋找游標(biāo)所在處的單詞
- 普通模式下輸入\#同上,但?\*?是向前(上)找,#則是向后(下)找
- 普通模式下輸入g\*同\*?,但部分符合該單詞即可
- 普通模式下輸入g\#同\#?,但部分符合該單詞即可
以上查找n,N?的繼續(xù)查找命令依然可以用。
實驗心得:學(xué)習(xí)執(zhí)行指定次數(shù)相同的命令,替換和 Undo 命令都是針對普通模式下的操作
命令 r+<待替換字母> R cc 說明 將游標(biāo)所在字母替換為指定字母 連續(xù)替換,直到按下 Esc 替換整行,即刪除游標(biāo)所在行,并進(jìn)入插入模式。
多文件編輯
使用vim編輯多個文件
編輯多個文件有兩種形式,一種是在進(jìn)入vim前使用的參數(shù)就是多個文件。另一種就是進(jìn)入vim后再編輯其他的文件。 同時創(chuàng)建兩個新文件并編輯
$ vim 1.txt 2.txt默認(rèn)進(jìn)入1.txt文件的編輯界面
- 命令行模式下輸入:n編輯2.txt文件,可以加!即:n!強(qiáng)制切換,之前一個文件的輸入沒有保存,僅僅切換到另一個文件
- 命令行模式下輸入:N編輯1.txt文件,可以加!即:N!強(qiáng)制切換,之前文件內(nèi)的輸入沒有保存,僅僅是切換到另一個文件
進(jìn)入vim后打開新文件
- 命令行模式下輸入:e 3.txt?打開新文件3.txt
- 命令行模式下輸入:e#?回到前一個文件
- 命令行模式下輸入:ls可以列出以前編輯過的文檔
- 命令行模式下輸入:b 2.txt(或者編號)可以直接進(jìn)入文件2.txt編輯
- 命令行模式下輸入:bd 2.txt(或者編號)可以刪除以前編輯過的列表中的文件項目
- 命令行模式下輸入:e! 4.txt,新打開文件4.txt,放棄正在編輯的文件
- 命令行模式下輸入:f?顯示正在編輯的文件名
- 命令行模式下輸入:f new.txt,改變正在編輯的文件名字為new.txt
恢復(fù)文件
如果因為斷電等原因造成文檔沒有保存,可以采用恢復(fù)方式,vim -r進(jìn)入文檔后,輸入:ewcover 1.txt來恢復(fù)
$ vim -r 1.txt可視模式
可視模式命令簡介
- 在普通模式下輸入v(小寫),進(jìn)入字符選擇模式,就可以移動光標(biāo),光標(biāo)走過的地方就會選取。再次按下v會后就會取消選取。
- 在普通模式下輸入Shift+v(小寫),進(jìn)入行選擇模式,按下V之后就會把整行選取,您可以上下移動光標(biāo)選更多的行,同樣,再按一次Shift+v就可以取消選取。
- 在普通模式下輸入?Ctrl+v(小寫),這是區(qū)域選擇模式,可以進(jìn)行矩形區(qū)域選擇,再按一次Ctrl+v取消選取。
- 在普通模式下輸入d刪除選取區(qū)域內(nèi)容
- 在普通模式下輸入y復(fù)制選取區(qū)域內(nèi)容
視窗操作
視窗操作簡介
vim可以在一個界面里打開多個窗口進(jìn)行編輯,這些編輯窗口稱為vim的視窗。 打開方法有很多種,例如可以使用在命令行模式下輸入:new?打開一個新的vim視窗,并進(jìn)入視窗編輯一個新文件(普通模式下輸入Ctrl+w也可以,但是Ctrl+w在chrome下會與chrome關(guān)閉標(biāo)簽頁的快捷鍵沖突,所以使用該快捷鍵你可以在IE或其它瀏覽器進(jìn)行練習(xí)),除了:new命令,下述列舉的多種方法也可以在命令模式或普通模式下打開新的視窗:
- 命令行模式下輸入:sp 1.txt?打開新的橫向視窗來編輯1.txt
- 命令行模式下輸入:vsp 2.txt?打開新的縱向視窗來編輯1.txt
- 普通模式下Ctrl-w s?將當(dāng)前窗口分割成兩個水平的窗口
- 普通模式下Ctrl-w v?將當(dāng)前窗口分割成兩個垂直的窗口
- 普通模式下Ctrl-w q?即 :q 結(jié)束分割出來的視窗。如果在新視窗中有輸入需要使用強(qiáng)制符!即:q!
- 普通模式下Ctrl-w o?打開一個視窗并且隱藏之前的所有視窗
- 普通模式下Ctrl-w j?移至下面視窗
- 普通模式下Ctrl-w k?移至上面視窗
- 普通模式下Ctrl-w h?移至左邊視窗
- 普通模式下Ctrl-w l?移至右邊視窗
- 普通模式下Ctrl-w J?將當(dāng)前視窗移至下面
- 普通模式下Ctrl-w K?將當(dāng)前視窗移至上面
- 普通模式下Ctrl-w H?將當(dāng)前視窗移至左邊
- 普通模式下Ctrl-w L?將當(dāng)前視窗移至右邊
- 普通模式下Ctrl-w -?減小視窗的高度
- 普通模式下Ctrl-w +?增加視窗的高度
視窗操作練習(xí)
- 命令行模式下輸入:new?打開一個新的vim視窗
- 命令行模式下輸入:sp 2.txt?打開新的橫向視窗來編輯2.txt
- 命令行模式下輸入:vsp 3.txt?打開新的橫向視窗來編輯3.txt
- 如果使用非chrome瀏覽器可以使用Ctrl+w進(jìn)行視窗間的跳轉(zhuǎn)
- 分別在不同視窗的命令行模式下輸入:q!退出多視窗編輯
文檔加密
創(chuàng)建加密文檔
$ vim -x file1輸入您的密碼 確認(rèn)密碼 這樣在下一次打開時,vim就會要求你輸入密碼
在vim執(zhí)行外部命令
在命令行模式中輸入!可以執(zhí)行外部的shell命令
- :!ls?用于顯示當(dāng)前目錄的內(nèi)容
- :!rm FILENAME用于刪除名為 FILENAME 的文件
- :w FILENAME可將當(dāng)前 VIM 中正在編輯的文件另存為 FILENAME 文件
幫助系統(tǒng)
vim中的查看幫助
- 普通模式下按F1打開vim自己預(yù)設(shè)的幫助文檔
- 命令行模式下輸入:h shiftwidth?打開名為shiftwidth的幫助文件
- 命令行模式下輸入:ver?顯示版本及參數(shù)
功能設(shè)定
vim的功能設(shè)定
可以在編輯文件的時候進(jìn)行功能設(shè)定,如命令行模式下輸入:set nu(顯示行數(shù)),設(shè)定值退出vim后不會保存。要永久保存配置需要修改vim配置文件。 vim的配置文件~/.vimrc,可以打開文件進(jìn)行修改,不過務(wù)必小心不要影響vim正常使用
獲取目前的設(shè)定
- 命令行模式下輸入:set或者:se顯示所有修改過的配置
- 命令行模式下輸入:set all?顯示所有的設(shè)定值
- 命令行模式下輸入:set option??顯示option的設(shè)定值
- 命令行模式下輸入:set nooption?取消當(dāng)期設(shè)定值
set功能的說明
- 命令行模式下輸入:set autoindent(ai)?設(shè)置自動縮進(jìn)
- 命令行模式下輸入:set autowrite(aw)?設(shè)置自動存檔,默認(rèn)未打開
- 命令行模式下輸入:set background=dark或light,設(shè)置背景風(fēng)格
- 命令行模式下輸入:set backup(bk)?設(shè)置自動備份,默認(rèn)未打開
- 命令行模式下輸入: set cindent(cin)?設(shè)置C語言風(fēng)格縮進(jìn)
3.問題及解答
1.在使用“x”刪除光標(biāo)所在位置的字符時,錯刪了字符,不會撤回。
使用u鍵可以撤銷。
2. 問題:GDB的n(next)命令讓GDB執(zhí)行下一行,然后暫停。 s(step)命令的作用與此類似,只是在函數(shù)調(diào)用時step命令會進(jìn)入函數(shù),那么實際使用中應(yīng)該優(yōu)先選用哪個?為什么?
next是單步跟蹤程序,當(dāng)遇到函數(shù)調(diào)用時,也不進(jìn)入此函數(shù)體;而step遇到用戶自定義的函數(shù),將步進(jìn)到函數(shù)中去運行,而 next 則直接調(diào)用函數(shù),不會進(jìn)入到函數(shù)體內(nèi)。
Step命令,如果step命令將要運行的源代碼行上有函數(shù)調(diào)用,那么step命令將導(dǎo)致GDB進(jìn)入到被調(diào)用函數(shù)的內(nèi)部。
3.有些成對的命令無法清楚記憶,導(dǎo)致浪費大量時間,如f與F,?與/
多次記憶,重復(fù)練習(xí)
?
轉(zhuǎn)載于:https://www.cnblogs.com/20135302wei/p/4842480.html
總結(jié)
- 上一篇: 兴业银行股票为啥跌 具体原因解析
- 下一篇: 睿远基金怎么购买