vim、gcc/g++、ctags簡析

<一>.vim

    一.vim有主要有三種模式:命令模式、插入模式、底行模式

        1.命令模式(command mode)

            控制光標的移動、字符、字或行的刪除,移動複製某段進入Insert mode下,或者lastline         mode。

        2.插入模式(Insert mode)

            只有在Insert mode下,纔可以做文字輸入,按【Esc】鍵可回到命令行模式

        3.底行模式(lastline mode)

            將文件保存(:w)或者退出(:q),也可以設計編輯環境,如尋找字符串,列出行號等等

    、基本操作

        1.vim test.c     

            若直接touch一個test.c則vim打開即可以編輯,若test.c不存在執行此命令則會創建並

        打開。進入vim後,是處於[命令號模式],需要切換到[插入模式]纔可以輸入程序。

            在[命令模式]下按字符 i 或者 a 即可以進入[插入模式]。插入模式下可以輸入文字或

        者刪除需要刪除的內容.

            【Esc】可以切換至[命令行模式]

             要退出vim或者保存文件,在[命令行模式]下按 : 冒號進入[底行模式]

                 :w    (保存當前文件)

                 :wq    (保存並退出)

                 :q!    (強制退出vim)

         2.命令功能鍵

            a.插入模式

            按 i 進入插入模式,此時是從光標當前位置開始輸入文件

            按 a 進入插入模式,從光標所在的位置的下一個位置開始輸入文字

            按 o 進入插入模式,是插入新的一行,並從首行開始輸入文字

            b.命令行模式

            按 gg 光標移動到文章的最開始

            按 GG 光標移動到文章的最末

            按 ^  光標移動到所在行的行首

            按 w  光標跳到下個單詞的開頭

            按 e  光標跳到下個字的字尾

            按 b  光標回到上個字的開頭


            按 x  每按一次,刪除光標所在位置的一個字符

            按 #x 6x表示刪除光標所在位置的後面(包括自己在內)的6個字符

            按 X  每按一次,刪除光標所在位置的前面的一個字符

            按 dd 刪除光標所在行

            按 #dd 例如6dd表示從光標所在行開始刪除#行

            

            yw    將光標所在之處到字尾的字符複製到緩衝區

            #yw   複製#個字到緩衝區

            yy    複製光標所在行到緩衝區 

            #yy   複製從光標所在行往下數#行

            p     粘貼到光標所在位置

            

            R     替換光標所在處的字符,直到按【Esc】退出replace模式

            u     撤銷上一次操作,可以執行多次回覆

            cw    更改光標所處的字到字尾處

            

            ctrl g列出光標所在行行號

            #G    15G表示移動光標到文章的第15行行首


             h(左)j(下)k(上)l(右)

            ^(光標移至行首)

            G 光標移至文章最後

            $ 光標移至行尾

            c.底行模式

            :set nu    在文件的每一行前面列出行號

            :#         輸入一個數字再按回車跳到改行

            :/關鍵字   先按 / 再輸入您想尋找的字符,如果第一次找的關鍵字不是想要的,就按

                    n 即可以找到

            :?關鍵字    同上

<二>.gcc/g++   

    一、編譯過程

        1.預處理:(gcc -E 預處理結束後停止)

    ​    ​    gcc -E test.c -o test.i

         預處理包括宏替換、刪除註釋、條件編譯、頭文件展開

    ​    ​2.編譯:生成彙編

    ​    ​    ​gcc -S test.i -o test.s

    ​    ​ gcc首先要檢查代碼的規範性,是否有語法錯誤等,檢查無誤後,gcc把代碼翻譯成彙編語言

    ​    ​3.彙編:生成機器可識別代碼

    ​    ​    ​gcc -c test.s -o test.o

​    ​    ​ -c將彙編代碼轉化爲.o的二進制目標代碼

    ​    ​4.連接:生成可執行文件或庫文件

    ​    ​    ​鏈接全局變量和函數。

    ​    ​    ​gcc test.o -o test

    ​    ​    ​函數庫一般分爲靜態庫和動態庫,靜態庫是編譯連接時,把文件的代碼全加入到可執行

    ​    ​文件中,因此生成的文件比較大,但運行時就不需要庫文件了;動態庫與靜態相反,編譯連

    ​    ​接時沒有把代碼加入,而是在運行時運行連接文件加載庫,這樣就可以節省系統開銷

        ​5.gcc也可以直接由test.c成爲可執行文件

    ​    ​    ​gcc -o test tes.c

    ​​二、編譯選項分析

    ​    ​-E    ​只激活預處理,不生成文件,我們需要把它重新定向到一個輸出文件裏面

    ​    -S    ​編譯到彙編語言不進行彙編和連接

    ​    ​-c    ​編譯到目標文件

    ​    ​-o    ​輸出到文件

    ​    ​-static 禁止使用動態庫,所以編譯出來的東西一般比較大

    ​    ​-share  儘量使用動態庫,所以生成的文件比較小,需要系統調用動態庫

    ​    ​-w    ​不生成任何警告

    ​    ​-Wall 生成所有警告信息

    ​    ​-g    ​生成調試信息

<三>.gdb(Linux調試器)

    gdb是Linux下的代碼調試工具,在使用時需要在源代碼生成時加上-g選項。退出調試ctrl+d或者quit

​    ​一、調試過程

    ​    ​r/run    ​    ​運行程序

    ​    ​s/step      ​ 進入函數調用

    ​    ​b/breaktrace 查看各級函數調用及參數

    ​    ​info break   查看斷點信息

    ​    ​finish    ​   執行到當前函數返回,然後停下來等待命令

    ​    ​break行號    ​在某一行設置斷點

    ​    ​break函數名  在某函數開頭設置斷點

    ​    ​continue/c   從當前位置開始連續而非單步執行程序

    ​    ​run/r    ​    ​從開始連續而非單步執行程序

    ​    ​delete breakpoints   刪除所有斷點

    ​    ​delete breakpoints n 刪除行號爲n的斷點

    ​    ​disable breakpoints  警用斷點

    ​    ​enable breakpoints   啓用斷點

    ​    p 變量    ​    ​    ​   打印變量值

    ​    ​display 變量名    ​   動態顯示每次停下來變量的值

    ​    ​undisplay      ​    ​  取消先前設置的那些變量的跟蹤

    ​    ​until行號    ​    ​    ​跳至行號    ​   

    ​    ​n/next    ​    ​    ​   單步執行

<四>.ctags(Linux代碼查看)

    ​ctags -R    ​在當前目錄下建立索引

    ​ctrl+]    ​  跳轉到函數或變量定義處

    ​ctrl+T    ​  跳轉至上級

    

 <五>.Makefile

    ​一個工程中的源文件很多,按其類型、功能、模塊分別放在若干個目錄中,Makefile定義了一系列的規則來指哪些文件需要先編譯,哪些文件後編譯,哪些文件需要重新編譯,或者一些複雜的操作。Makefile帶來的好處就是——實現自動化編譯,一旦寫好,只需要一個make命令,整個工程自動化編譯,極大的提高了軟件開發的效率。

    ​make是一個命令工具,是一個解釋makefile中指令的工具,make執行命令時,需要一個makefile文件,告訴make怎麼去編譯與鏈接程序

    ​makefile 是一個文件(描述了一個工程如何編譯等)

依賴關係&依賴方法

依賴方法(緊挨依賴關係 以tab開頭)

    ​1.make一個文件

    ​    ​touch Makefile//建立一個文件

vim Makefile//進入makefile

{//進入vim

test:test.o(依賴關係)(若發現test.o不存在,繼續向下尋找test.o的依賴關係)

gcc -o test test.o(依賴方法)

test.o:test.s

gcc -c test,s -o test.o

test.c:test.i

gcc -S test.i test.s

test.o:test.c

gcc -E test.c -o test.i(依次生成)

}

    ​或者可以直接

    ​    ​test:test.c

gcc -o test test.c

    ​    退出makefile文件後​

    ​    ​make    ​(執行makefile裏的命令)

    ​    ​./test  (運行可執行命令)

    ​    ​在makefile文件裏可以寫清理工程(一般放到最後)

    ​    ​{

.PHONY:clean(PHONY指明僞目標)(目標文件有具體依賴列表,僞目沒有具體依賴列表,

    ​    ​標期待使用依賴方法)

clean:

rm -f test,o test.c test.i(在前面加@就可以屏蔽相關細節)

}

    ​    ​保存並退出makefile後執行clean就可以了刪除相關文件

    ​    ​make clean




進度條小程序
<span style="font-size:18px;">#include<stdio.h>
#include<string.h>

void proc()
{
<span style="white-space:pre">	</span>int count=0;
<span style="white-space:pre">	</span>char buf[102];
<span style="white-space:pre">	</span>memset(buf,'\0',sizeof(buf));
<span style="white-space:pre">	</span>const char*lable="|\-\\";

<span style="white-space:pre">	</span>while(count<=100)
<span style="white-space:pre">	</span>{
<span style="white-space:pre">		</span>buf[count]='#';
<span style="white-space:pre">		</span>printf("[%-100s][%d%%][%c]\r",buf,count++,lable[count%4]);
<span style="white-space:pre">		</span>fflush(stdout);
<span style="white-space:pre">		</span>usleep(10000);
<span style="white-space:pre">	</span>}
<span style="white-space:pre">	</span>printf("\n");
}</span>


發佈了28 篇原創文章 · 獲贊 1 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章