Vi(Visual Interface) 是一種文本編輯器,常見的文本編譯器有ASCII編碼,UNICODE編碼等。Vim即vi improved :是vi的增強版,vim是模式化的編輯。
vim在工作中有3種模式:
-編輯模式:也叫指令模式,:預設模式,移動光标,剪切/粘貼文本;
-插入模式:在文本檔案當中進行輸入内容;
-末行模式:vim内置的指令接口,執行vim的内置指令,儲存,退出等
如下圖所示:
<a href="http://blog.51cto.com/youguofusi/1965693"></a>

文字解釋三者之間的模式轉換:
指令–>插入:
i: 在目前光标所在字元的前面,轉為輸入模式;
I:在目前光标所在行的行首,轉換為輸入模式
A:在目前光标所在行的行尾,轉換為輸入模式
a: 在目前光标所在字元的後面,轉為輸入模式;
o: 在目前光标所在行的下方,建立一行,并轉為輸入模式;
O:在目前光标所在行的上方,建立一行,并轉為輸入模式;
插入–>指令:
ESC
指令–>擴充:
:
擴充–>指令:
ESC,Enter
注意:插入模式和擴充指令模式之間不能直接切換。
EX:使用Esc2次或enter回到指令模式,将沒有:
q退出
q!強制退出
w儲存
wq或x儲存并退出
wq!或x!當檔案對目前使用者權限為read-only時,可以強制儲存并退出(僅限root和目前檔案的owner)
<a href="http://blog.51cto.com/youguofusi/1965693">打開檔案</a>
vim +# :打開檔案,直接讓光标處于第#行的行首
vim +:打開檔案,定位至最後一行,預設行尾
vim +/PATTERN : 打開檔案,直接讓光标處于第一個PATTERN比對到的行的行首
–b file 二進制方式打開檔案
–d file1 file2… 比較多個檔案
-m file 隻讀打開檔案
ex file 或 vim –e 直接進入ex模式
如果該檔案存在,檔案被打開并顯示内容
如果該檔案不存在,當編輯後第一次存盤時建立它
<a href="http://blog.51cto.com/youguofusi/1965693">關閉檔案</a>
1、擴充模式關閉檔案
:q 退出
:wq 儲存并退出
:q! 不儲存并退出
:w 儲存
:w! 強行儲存
:wq! 強行儲存退出
2、指令模式下退出
ZZ: 儲存并退出
ZQ:不儲存退出
<a href="http://blog.51cto.com/youguofusi/1965693">移動光标(編輯模式)</a>
1、逐字元移動:
h: 左
l: 右
j: 下
k: 上
#h: 表示移動#個字元
2、以單詞為機關移動
w: 移至下一個單詞的詞首
e: 跳至目前或下一個單詞的詞尾
b: 跳至目前或前一個單詞的詞首
#w: 表示移動#個單詞
3、行内跳轉:
0: 絕對行首
^: 行首的第一個非空白字元
$: 絕對行尾
4、行間跳轉
#G:跳轉至第#行
gg: 第一行
G:最後一行
5、目前頁跳轉:
H:頁首 M:頁中間行 L:頁底
## vim編輯指令 ##
1、翻屏
Ctrl+f: 向下翻一屏
Ctrl+b: 向上翻一屏
Ctrl+d: 向下翻半屏
Ctrl+u: 向上翻半屏
2、删除單個字元
x: 删除光标所在處的單個字元
#x: 删除光标處起始的#個字元
xp: 交換光标所在處的字元及其後面字元的位置
删除指令: d
d指令跟跳轉指令組合使用
d$: 删除到行尾
d^:删除到非空行首
d0:删除到行首
dw:删除下一個單詞的詞首
de:删除跳至目前或下一個單詞的詞尾
db:删除跳至目前或前一個單詞的詞首
dd: 删除目前光标所在行
dd: 删除包括目前光标所在行在内的#行;
粘貼指令 p
p: 如果删除或複制為整行内容,則粘貼至光标所在行的下方,如果複制或删除的内容為非整行,則粘貼至光标所在字元的後面
P: 如果删除或複制為整行内容,則粘貼至光标所在行的上方,如果複制或删除的内容為非整行,則粘貼至光标所在字元的前面
複制指令 y
用法同d指令
#yy: 複制多行
Y: 複制整行
修改:先删除内容,再轉換為輸入模式
c: 用法同d指令
cc:删除目前行并輸入新内容
C:删除目前光标到行尾,并切換成插入模式
撤消編輯操作 u
u:撤消前一次的編輯操作
#u: 直接撤消最近#次編輯操作
連續u指令可撤消此前的n次編輯操作
撤消最近一次撤消操作:Ctrl+r
## 擴充模式 ##
1、内容界定
.: 表示目前行
:最後一行.,-1 目前行到倒數第二行
# 具體第#行,例如2表示第2行
+#: 從左側#表示的起始行,加上右側#表示的行數 如:2,+3 表示2到5行
##:從左側#表示起始行,到右側#表示結尾行
% 全文, 相當于1,$
2、查找
/PATTERN 從目前光标所在處向檔案尾部查找
?PATTERN 從目前光标所在處向檔案首部查找
n 與指令同方向
N 與指令反方向
查找并替換
在末行模式下使用s指令
格式:s/要查找的内容/替換為的内容/修飾符
修飾符:
i: 忽略大小寫
g: 全局替換;預設情況下,每一行隻替換第一次出現
gc:全局替換,每次替換前詢問
查找替換中的分隔符/可替換為其它字元,例如
s@/etc@/var@g
s#/boot#/#i
多檔案模式
使用vim編輯多個檔案
vim FILE1 FILE2 FILE3
:next 切換至下一個檔案
:prev 切換至前一個檔案
:last 切換至最後一個檔案
:first 切換至第一個檔案
:q退出目前檔案
:wall 儲存所有
:qall 退出所有
:wqall儲存所有檔案并退出
## 多視窗模式 ##
分屏顯示一個檔案
Ctrl+w, s: 水準拆分視窗
Ctrl+w, v: 垂直拆分視窗
在視窗間切換光标:
Ctrl+w, ARROW(h,j,k,l或方向鍵)
:qa 關閉所有視窗
分視窗編輯多個檔案
vim -o : 水準分割顯示
vim -O : 垂直分割顯示
q 能退出多視窗模式
/pat1/,/pat2/
從第一次被pat1模式比對到的行開始,一直到第一次被
pat2比對到的行結束
#,/pat/ :從第#行開始到第一次比對到pat為止
/pat/,$:從第一次比對到pat到最後一行
使用方式:後跟一個編輯指令
d(删除)
y(複制)
w file: 将範圍内的行另存至指定檔案中
r file:在指定位置插入指定檔案中的所有内容
<a href="http://blog.51cto.com/youguofusi/1965693">進階話題</a>
1、顯示或取消顯示行号
:set nu
:set nonu
nu = number
2、顯示忽略或區分字元大小寫
:set ic
:set noic
ic = ignorecase
3、設定自動縮進
:set ai
:set noai
ai = autoindent
4、查找到的文本高亮顯示或取消
:set hlsearch
:set nohlsearch
5、文法高亮
:syntax on
:syntax off
注意:特性目前有效,如果想要永久有效需修改配置檔案
配置檔案定義:
/etc/vimrc 針對所有使用者
~/.vimrc 針對目前使用者
<a href="http://blog.51cto.com/youguofusi/1965693">課堂練習</a>
1、複制/etc/profile至/tmp/目錄,用查找替換指令删除/tmp/profile檔案中的行首的空白字元
%s/^[[:blank:]]+//g
思路:
查找内容為空白字元為首要加^,替換内容為空白,g表示全局替換。
2、複制/etc/rc.d/init.d/functions檔案至/tmp目錄,用查找替換指令為/tmp/functions的每行開頭為空白字元的行的行首添加一個#号
%s/^[[:spacge:]]/# /g
或%s/^([[:space:]])/#\1/g
或%s/^[[:space:]]/#&/
思路:第二種方法使用了後向引用,\1表示引用[[:space:]],#号後都為空白字元。第三種方法中&相當于前面的空白字元。
3、複制/etc/rc.d/init.d/functions檔案至/tmp目錄,替換/tmp/functions檔案中的/etc/sysconfig/init為/var/log
%s/\/etc/sysconfig/init/\/viar/log/gi
思路:這裡的\表示轉義,gi表示全局替換,忽略大小寫
4、删除/tmp/functions檔案中所有以#開頭,且#後面至少有一個空白字元的行的行首的#号
%s/^#[[:space:]]{1,}//g
思路:\{1,\}表示比對前面指令至少1次,查找内容為:^#[[:space:]]\{1,\},替換内容:要删除是以為空。
本文轉自 優果馥思 51CTO部落格,原文連結:http://blog.51cto.com/youguofusi/1965693