引言
vim(vi improved)編輯器是從 vi 發(fā)展出來的一個(gè)文本編輯器。 代碼補(bǔ)全、編譯及錯誤跳轉(zhuǎn)、語法高亮等方便編程的功能特別豐富,在程序員中被廣泛使用。
vim 可以說是程序開發(fā)者的一項(xiàng)很好用的工具,它更是一個(gè)程序開發(fā)工具而不只是文字處理軟件。
在vim中編輯代碼可以使程序員的手指集中在鍵盤中央,從而提高效率。
在vim中編輯代碼后,要執(zhí)行代碼就需要編譯器,在Linux中使用gcc
與g++
編譯C與C++代碼
vim
為方便演示,我們touch
一個(gè)test_vim.c
文件,并使用vim 文件名
以vim方式打開這個(gè)文件:
Vim的三種模式及模式切換
vim編輯器有許多模式,在這里只介紹三種常用的模式:命令(普通)模式Normal mode
、底行模式Last line mode
、插入模式Insert mode
:
命令模式(Normal mode)
控制屏幕光標(biāo)的移動,字符、字或行的刪除,移動復(fù)制某區(qū)段及進(jìn)入到Insert mode或者到 last line mode下:
使用vim 文件名
打開后的狀態(tài)就是命令(正常)模式:
插入模式(Insert mode)
只有在Insert mode下,才可以做文字輸入,是使用的最頻繁的編輯模式。在命令模式下按i
即可進(jìn)入該模式,按Esc
鍵可回到命令行模式:
這個(gè)模式中可以正常編輯代碼,就不贅述了。
末行模式(last line mode)
文件保存或退出,也可以進(jìn)行文件替換,找字符串,列出行號等操作。 在命令模式下按:
即可進(jìn)入該模式,按Esc
鍵可回到普通模式:
普通模式下操作
由于空文件下無法觀察普通模式的操作,所以先使用插入模式在test_vim.c
文件中輸入一些內(nèi)容:
常用命令:
-
移動光標(biāo)
小寫英文字母h
、j
、k
、l
,分別控制光標(biāo)左、下、上、右移一格:G
:移動到文章的最后$
:移動到光標(biāo)所在行的“行尾”^
:移動到光標(biāo)所在行的“行首”w
:光標(biāo)跳到下個(gè)字的開頭e
:光標(biāo)跳到下個(gè)字的字尾b
:光標(biāo)回到上個(gè)字的開頭#l
:光標(biāo)移到該行的第#個(gè)位置gg
:進(jìn)入到文本開始ctrl + b
:屏幕向后移動一頁ctrl + f
:屏幕向前移動一頁ctrl + u
:屏幕向后移動半頁ctrl + d
:屏幕向前移動半頁
(移動光標(biāo)的命令就不舉例使用了) -
刪除文字
x
:每按一次,刪除光標(biāo)所在位置的一個(gè)字符#x
:表示刪除光標(biāo)所在位置的后(包含自己在內(nèi))#個(gè)字符X
:每按一次,刪除光標(biāo)所在位置的前一個(gè)字符#X
:表示刪除光標(biāo)所在位置的前#個(gè)字符dd
:刪除光標(biāo)所在行#dd
:從光標(biāo)所在行開始刪除#行 -
復(fù)制
yw
:將光標(biāo)所在之處到字尾的字符復(fù)制到緩沖區(qū)中#yw
:復(fù)制#個(gè)字到緩沖區(qū)yy
:復(fù)制光標(biāo)所在行到緩沖區(qū)。#yy
:表示拷貝從光標(biāo)所在行向下#行文字p
:將緩沖區(qū)內(nèi)的字符貼到光標(biāo)所在位置
需要注意的是:所有與y
有關(guān)的復(fù)制命令都必須與p
配合才能完成復(fù)制與粘貼功能 -
替換
r
:替換光標(biāo)所在處的字符。R
:替換光標(biāo)所到之處的字符,直到按下Esc
鍵為止。 -
撤銷上一次操作
u
:回到上一個(gè)操作,按多次可以執(zhí)行多次回復(fù)ctrl + r
: 撤銷的恢復(fù) -
更改
cw
:更改光標(biāo)所在處的字到字尾處c#w
:表示更改#個(gè)字符 -
跳至指定的行
ctrl+g
: 列出光標(biāo)所在行的行號#G
:表示移動光標(biāo)至文章的第#行行首
底行模式下操作
常用命令:
-
列出行號
set nu
: 在文件中的每一行前面列出行號。
(我使用的vim環(huán)境已經(jīng)是配置過的,所以會默認(rèn)顯示行號) -
跳到文件中的某一行
#
:跳到第#行 -
查找字符
/關(guān)鍵字
: 先按「/」鍵,再輸入您想尋找的字符,如果第一次找的關(guān)鍵字不是您想要的,可以一直按n
會往后尋找?關(guān)鍵字
:先按「?」鍵,再輸入您想尋找的字符,如果第一次找的關(guān)鍵字不是您想要的,可以一直按n
會往前尋找 -
保存與退出
w
: 可以將文件保存起來,使用!
強(qiáng)制保存q
:退出vim,后加!
強(qiáng)制離開vimwq
:保存并退出
gcc與g++
在之前的C語言部分,我們知道我們所寫的C代碼要經(jīng)過一系列處理為可執(zhí)行程序后才能被系統(tǒng)執(zhí)行,其中包括預(yù)編譯、編譯、匯編、鏈接
在Windows環(huán)境下我們經(jīng)常使用Visual Studio、DevC、VC等開發(fā)環(huán)境環(huán)境進(jìn)行代碼的編寫、編譯與運(yùn)行。而在Linux下我們使用vim
編寫代碼后,就使用gcc
與g++
編譯C與C++代碼:
gcc的使用(g++類似)
首先創(chuàng)建一個(gè)test_gcc.c
文件,并使用vim在其中編輯一段代碼:
預(yù)編譯
在預(yù)編譯中會進(jìn)行頭文件包含、宏替換、注釋刪除、條件編譯等,在Linux中執(zhí)行完預(yù)編譯后會生成一個(gè).i
文件
使用 gcc -E 依賴文件 -o 目標(biāo).i文件
就可以實(shí)現(xiàn)將原文件只處理到預(yù)編譯結(jié)束,生成.i
文件為止:
我們可以使用vim打開這個(gè)test_gcc.i
文件查看預(yù)編譯后的代碼:
可以看到,與之前的代碼對比,將stdio.h文件拷貝到這里,并刪除了注釋,將M替換為100。
編譯
編譯即將預(yù)編譯后的文件轉(zhuǎn)化為匯編代碼,在這之前還需要做詞法分析、語法分析、語義分析、代碼優(yōu)化等的行為,在這過程中將會檢查代碼中的錯誤(即編譯錯誤)。編譯結(jié)束后會生成一個(gè).s
文件
使用gcc -S 原文件 -o 目標(biāo).s文件
就可以實(shí)現(xiàn)將原文件只處理到編譯結(jié)束,生成.s文件中止,(原文件可以為.c
文件,也可以是已經(jīng)預(yù)編譯后的.i
文件)
當(dāng)然我們也可以使用vim查看這個(gè).s
文件:
匯編
匯編即將之前生成的匯編代碼生成目標(biāo)代碼(在這里就是機(jī)器可識別的二進(jìn)制代碼),這其中還要進(jìn)行符號表的生成等(符號與其地址),之后會生成一個(gè).o
文件
使用 gcc -c 原文件 -o 目標(biāo).o文件
就可以將原文件處理到匯編結(jié)束,生成.o文件為止(原文件可以為之前的任意狀態(tài)的文件)
我們當(dāng)然也可以通過vim查看這個(gè).o
文件(但這并沒有什么意義,因?yàn)橥耆床欢?,這里就不展示了)
鏈接
在進(jìn)行完之前的處理后,就需要將我們寫的文件與庫,或者與我們寫的其他文件鏈接起來,最終生成一個(gè)可執(zhí)行程序。這個(gè)過程中會重新定位符表
使用 gcc 原文件 -o 可執(zhí)行文件
就可以實(shí)現(xiàn)將之前任一狀態(tài)的文件處理后進(jìn)行鏈接從而生成一個(gè)可執(zhí)行程序:./
打開這個(gè)可執(zhí)行程序就可以運(yùn)行了:
需要注意的是,當(dāng)編輯的代碼中含有C99標(biāo)準(zhǔn)及以后的語法時(shí),需要在編譯時(shí)加上 -std=c99
選項(xiàng)
靜態(tài)庫與動態(tài)庫
我們在文件中包含的stdio.h只是頭文件,即聲明。而這些函數(shù)的定義是在庫中的,這也就是為什么我們需要將我們寫的代碼與庫進(jìn)行鏈接后才能生成可執(zhí)行程序。 系統(tǒng)中有兩種類型的庫,即靜態(tài)庫與動態(tài)庫。
靜態(tài)庫是指編譯鏈接時(shí),把庫文件的代碼全部加入到可執(zhí)行文件中。所以生成的文件比較大,但在運(yùn)行時(shí)也就不再需要庫文件了,其后綴名一般為.a
動態(tài)庫是在編譯鏈接時(shí)并沒有把庫文件的代碼加入到可執(zhí)行文件中,而是在程序執(zhí)行時(shí)由運(yùn)行時(shí)鏈接文件加載庫,這樣可以節(jié)省系統(tǒng)的開銷。動態(tài)庫一般后綴名為.so
gcc 在編譯時(shí)默認(rèn)使用動態(tài)庫(可以通過file
查看):
總結(jié)
到此,關(guān)于Linux工具中的編譯器vim
與編譯器gcc
/g++
就介紹完了
在下一篇文章中將介紹其余的Linux工具,希望大家持續(xù)關(guān)注哦
如果大家認(rèn)為我對某一部分沒有介紹清楚或者某一部分出了問題,歡迎大家在評論區(qū)提出
如果本文對你有幫助,希望一鍵三連哦文章來源:http://www.zghlxwxcb.cn/news/detail-612793.html
希望與大家共同進(jìn)步哦文章來源地址http://www.zghlxwxcb.cn/news/detail-612793.html
到了這里,關(guān)于Linux工具【1】(編輯器vim、編譯器gcc與g++)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!