在Linux中使用文本編輯器來編輯你的Linux參數(shù)配置文件是一件很重要的事情,因此系統(tǒng)管理員至少應(yīng)該熟悉一種文本編輯器。
在Linux世界里,絕大部分的配置文件都是以 ASCII(鍵盤上面可找到的)的純文本形式,(發(fā)音:/??ski/ass-kee[1],AmericanStandardCode forInformationInterchange,美國信息交換標(biāo)準(zhǔn)代碼)是基于拉丁字母的一套電腦編碼系統(tǒng)。 從[ 0000 0000 - 0111 1111 ]共128個字符。
vi 文本編輯器
所有的 Unix Like 系統(tǒng)都會內(nèi)置 vi 文本編輯器,其他的文本編輯器則不一定存在;
很多軟件的編輯接口都會主動調(diào)用 vi (如 crontab等命令);
vim 具有程序編輯的能力,可以主動以字體顏色辨別語法的正確性,方便程序設(shè)計;
程序簡單,編輯速度相當(dāng)快速。
vim 其實相當(dāng)于 vi 的高級版本,vim可以用顏色或底線等方式來顯示一些特殊信息。
在vi 里面,[ Tab ] 鍵所得到的結(jié)果與空格符得到的結(jié)果是不一樣的,特別強(qiáng)調(diào)一下。
在 vi 中,數(shù)字是很有意義的。數(shù)字通常代表重復(fù)做幾次的意思,也有可能是代表去到第幾個什么什么的意思。
vim 的保存文件、恢復(fù)與打開時的警告信息
當(dāng)我們在使用 vim 編輯時,vim 會在被編輯的文件目錄下再建一個名為 ?.filename.swp 的暫存文件。
由于 vim 的工作被不正常中斷,導(dǎo)致暫存盤無法通過正常流程來結(jié)束,所以暫存文件就不會消失,而繼續(xù)保留下來。此時繼續(xù)編輯文件就會出現(xiàn)某些情況。

1:可能有其他人或程序同時在編輯這個文件;
2:在前一個 vim 的環(huán)境中,可能因為某些不明原因?qū)е?vim 中斷(crashed)。
vi ?的三種模式:一般模式、編輯模式、命令行模式

一般模式? ? ? ? ? ? ? ? 刪除、復(fù)制與粘貼
x,X ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?x為向后刪除一個字符,X為先前刪除一個字符
nx(n代表數(shù)字) ? ? ? ? ? ? ? 向后刪除n個字符
dd ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?刪除當(dāng)前行
D ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?刪除當(dāng)前行所有字符,使成為空行
ndd(n代表數(shù)字)? ? ? ? ? ? 刪除光標(biāo)所在行的向下n列
d1G ? ? ? ? ? ? ? ? ? ? ? ? ? ? 刪除光標(biāo)所在行到第一行的所有數(shù)據(jù)
dG ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?刪除光標(biāo)所在行到最后一行的所有數(shù)據(jù)
yy ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 復(fù)制光標(biāo)所在行
y1G ? ? ? ? ? ? ? ? ? ? ? ? ? 復(fù)制光標(biāo)所在行到第一行的所有數(shù)據(jù)
yG ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?復(fù)制光標(biāo)所在行到最后一行的所有數(shù)據(jù)
ynj(n代表數(shù)字)? ? ? ? ? ? 復(fù)制光標(biāo)所在行向下n+1行
dnj(n代表數(shù)字)? ? ? ? ? ? 刪除光標(biāo)所在行向下n+1行
p,P ? ? ? ? ? ? ? ? ? ? ? ? ? p為復(fù)制的數(shù)據(jù)粘貼在光標(biāo)的下一行,P為復(fù)制的數(shù)據(jù)粘貼在光標(biāo)的上一行
J ? ? ? ? ? ? ? ? ? ? ? ? ? ? 將光標(biāo)所在行與下一行的數(shù)據(jù)結(jié)合成一行
u ? ? ? ? ? ? ? ? ? ? ? ? ? ? 恢復(fù)前一個操作(undo)
ctrl + r ? ?? ? ? ? ? ? ? ? ? 重做上一個操作
. ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 重復(fù)前一個操作
編輯模式
i,I? ? ? ? ? ? ? ? ? ? ? i為在當(dāng)前光標(biāo)所在處插入輸入的文字,I為在光標(biāo)所在行第一個非空字符插入輸入的文字
a,A? ? ? ? ? ? ? ? ? ? ? a為在當(dāng)前光標(biāo)所在處下一個字符插入輸入的文字,A為在光標(biāo)所在行最后一個字符的下一個字符處插入輸入的文字
o,O? ? ? ? ? ? ? ? ? ? ? o為在光標(biāo)所在行的下一行行首開始插入字符,O為在光標(biāo)所在行的上一行行首開始插入字符
r,R? ? ? ? ? ? ? ? ? ? ? r為替換光標(biāo)所在那一個字符,R為一直替換光標(biāo)所指的文字,直到退出
Esc? ? ? ? ? ? ? ? ? ? ? 退出,回到一般模式
命令模式? ? ? ? ? ? ? ? 光標(biāo)移動
h? ? ? ? ? ? ? ? ? ? ? ? 光標(biāo)向左移一個字符
j? ? ? ? ? ? ? ? ? ? ? ? 光標(biāo)向下移一個字符
k? ? ? ? ? ? ? ? ? ? ? ? 光標(biāo)向上移一個字符
l? ? ? ? ? ? ? ? ? ? ? ? 光標(biāo)向右移一個字符
Ctrl+f (Page Down) ? ? ? ? ? ? ? ?屏幕向下翻一頁
Ctrl+b (Page Up) ? ? ? ? ? ? ? ? ? 屏幕向上翻一頁
Ctrl+d? ? ? ? ? ? ? ? ? 屏幕向下翻半頁
Ctrl+u? ? ? ? ? ? ? ? ? 屏幕向上翻半頁
+? ? ? ? ? ? ? ? ? ? ? ? 光標(biāo)移動到下一行的第一個非空字符
-? ? ? ? ? ? ? ? ? ? ? ? 光標(biāo)移動到當(dāng)前行的第一個非空字符
n空格(n代表數(shù)字)? ? ? ? ? 光標(biāo)向當(dāng)前行向右移動n個字符
0(數(shù)字0)? ? ? ? ? ? ? ? ? 光標(biāo)移動到當(dāng)前行的第一個字符(可以為空字符,注意與-區(qū)分)
$? ? ? ? ? ? ? ? ? ? ? ? 光標(biāo)移動到當(dāng)前行的最后一個字符(可以為空字符,注意與-區(qū)分)
H? ? ? ? ? ? ? ? ? ? ? ? 光標(biāo)移動到當(dāng)前屏幕最上方的那一行的第一個非空字符
M? ? ? ? ? ? ? ? ? ? ? ? 光標(biāo)移動到當(dāng)前屏幕最中間那一行的第一個非空字符
L? ? ? ? ? ? ? ? ? ? ? ? 光標(biāo)移動到當(dāng)前屏幕最下方的那一行的第一個非空字符
G? ? ? ? ? ? ? ? ? ? ? ? 光標(biāo)移動到該文章最后一行的第一個非空字符
gg ? ? ? ? ? ? ? ? ? ? ? ? ? ?移動到這個文件的第一行,相當(dāng)于 1G
nG(n代表數(shù)字)? ? ? ? ? ? 光標(biāo)移動到該文章第n行的第一個非空字符
/word? ? ? ? ? ? ? ? ? ? 在光標(biāo)之后查找word字符串 ?# 使用 /word 配合 n 以 N 是非常有幫助的。可以讓你重復(fù)地查找到一些關(guān)鍵字
n ? ? ? ? ? ? ? ? ? ? ? ? ?這個 n 為英文字符,代表重復(fù)前一個查找的操作。
?word? ? ? ? ? ? ? ? ? ? 在光標(biāo)之前查找word字符串
:s/word1/word2/g? ? ? ? 在光標(biāo)當(dāng)前行查找word1,并替換成word2
:n1,n2s/word1/word2/g? ? 在第n1行與第n2行之間查找word1,并替換成word2
:%s/word1/word2/gc ? ? ? ?整個文章查找word1,并替換成word2,且在替換前顯示提示字符給用戶確認(rèn)(confirm)
:w? ? ? ? ? ? ? ? ? ? ? 將編輯的數(shù)據(jù)保存到硬盤文件中
:w [filename]? ? ? ? ? ? 將編輯后的數(shù)據(jù)保存到硬盤的另一個文件中
:r [filename]? ? ? ? ? ? 在編輯數(shù)據(jù)時,讀入另一個文件中的數(shù)據(jù),即將filename文件中的內(nèi)容加到光標(biāo)所在行下一行
:wq或:x? ? ? ? ? ? ? ? ? 保存并退出
:q? ? ? ? ? ? ? ? ? ? ? 退出,適用于未修改的文件
:q!? ? ? ? ? ? ? ? ? ? ? 強(qiáng)制退出,適用于修改文件后不保存退出
:!command ? ?執(zhí)行命令
:r !command ? ?將命令結(jié)果寫入
:set nu? ? ? ? ? ? ? ? ? 顯示行號
:set nonu? ? ? ? ? ? ? ? 取消行號
:n1,n2 w [filename]? ? ? 將n1到n2行的內(nèi)容保存到名為filename的文件中
vim 的功能
1、塊選擇(Visual Block)

2、多文件編輯

3、多窗口功能

4、vim 環(huán)境設(shè)置與記錄: ~/.vimrc,~/.viminfo
因為我們的vim會主動將你曾經(jīng)做過的行為記錄下來,好讓你下次可以輕松作業(yè)。那個記錄操作的文件就是:~/.viminfo。 ?如果你曾經(jīng)使用過vim,那你的主文件夾應(yīng)該會存在這個文件才對。這個文件是自動產(chǎn)生的,你不必自行創(chuàng)建。
此外,每個distribution對vim的默認(rèn)環(huán)境都不太相同,舉例來說,某些版本在查找到關(guān)鍵字時并不會高亮反白,有些則會自動幫你進(jìn)行縮進(jìn)排列。其實這些都是可以自行設(shè)置的。那就是vim的環(huán)境設(shè)置。

整體的vim的設(shè)置值一般時放置在 /etc/vimrc 這個文件中,不過不建議你修改它。你可以新建 ?~/.vimrc ?將你的值寫入。
舉例如下:

5、vim 常用命令示意圖

其他vim使用注意事項
1、中文編碼問題
你的Linux系統(tǒng)默認(rèn)支持的語系數(shù)據(jù),這與 /etc/sysconfig/i18n ? ?有關(guān);
你的終端接口(bash)的語系,這與 LANG這個變量有關(guān);
你的文件原本的編碼;
打開終端機(jī)的軟件。
修改語系編碼:
LANG=zh_CN.utf-8
2、DOS 與 Linux 的斷行字符
Linux的【Enter】為LF符號($),由于DOS的斷行符號是CRLF(^M$),也就多出來了一個CR(^M)。這樣寫出來的程序可能就會出現(xiàn)問題而無法執(zhí)行。
如果在不同的系統(tǒng)之間復(fù)制一些純文本文件時,千萬記得要使用 UNIX2dos ?或者 ?dos2UNIX 來轉(zhuǎn)換一下斷行格式。

3、語系編碼轉(zhuǎn)換
使用 ?iconv ?這個命令來進(jìn)行編碼轉(zhuǎn)換

iconv -f ?gbk ?-t ?utf-8 ?aaagbk
重點回顧
Linux下配置文件多位文本文件,故使用vim即可進(jìn)行編輯;
vim可視為程序編輯器,可用以編輯 shell script 、配置文件等;
vi 為所有UNIX like 的操作系統(tǒng)都會存在的編輯器,且執(zhí)行速度塊;
vi 的界面大致可以分為兩部分:上半部的本文與最后一行的狀態(tài)+命令行模式;
數(shù)字是有意義的,用來說明重復(fù)進(jìn)行幾次操作的意思,如 5yy 為復(fù)制5行的意思;
小數(shù)點“.”為重復(fù)進(jìn)行前一次操作,也是經(jīng)常使用的按鍵功能;
vim會主動創(chuàng)建swap暫存文件,多疑不要隨意斷線;
可以使用 ctrl + v 進(jìn)行復(fù)制/粘貼/刪除的行為;
使用 :sp 功能可以切割窗口;
vim的環(huán)境設(shè)置可以寫入 ~/.vimrc 文件中;
可以使用 iconv 進(jìn)行文件語系編碼的轉(zhuǎn)換;
使用 dos2UNIX 及 UNIX2dos 可以變更文件每一行的行尾斷行符。