vi是Unix世界裏極爲廣泛的全屏幕文本編輯器,vim是它的改進版本Vi IMproved的簡稱。幾乎能夠說任何一臺Unix機器都會提供這套軟件。html
只要簡單的在Shell下執行vi就能夠進入 vi 的編輯環境。在實際操做以前先對它有個瞭解會比較好。linux
vi 有兩種模式,輸入模式以及指令模式。輸入模式便是用來輸入文字資料,而指令模式則是用來下達一些編排文件、存檔、以及離開 vi 等等的操做指令。當執行 vi 後,會先進入指令模式,此時輸入的任何字元都視爲指令。shell
第一步:vim
1、文本編譯工具vi使用bash
vi的名字取自於visual,意爲「直觀」,它是一個全屏幕編輯程序。還有gedit、emacs在Linux系統中vi是最經常使用的編輯程序,它的文本編輯功能十分強大,但使用起來比較複雜。編輯器
2、Linux系統中的vi實際上是vim,是vi的加強版。vi編輯程序有兩種工做模式:工具
命令模式(指令模式):此模式下的按鍵看成指令來處理。spa
輸入模式:此模式的按鍵做爲真正的輸入。htm
第二步:blog
vi操做模式的切換,要進入輸入模式,能夠按以下命令鍵:
新增:‘a’,從光標後開始輸入文本。‘A’,從光標所在行末尾輸入新的文本。
插入:‘i’,從光標前開始插入文本。‘I’,從光標行的第一個非空格字符前開始插入文本。
開始:‘o’,從光標所在行下新增一行並進入輸入模式。‘O’,從光標所在行上新增一行並進入輸入模式。
第三步:
從輸入模式按ESC進入命令模式
第四步:
進入和退出vi
進入vi,在提示符下:
vi
vi 文件名
退出vi,在指令模式下:
:q,退出
:wq,存盤後退出
:q!,不存盤強制退出
:x,強制存盤退出
第五步:
刪除和修改文本
指令模式下:
x:刪除光標處的一個字符
dd:刪除光標所在行
r:修改光標所在字符
R:進入改寫狀態
s:刪除光標所在字符,並進入輸入狀態
S:刪除光標所在行,並進入輸入狀態
第六步:
光標移動
1、指令模式下:
h:向左移動一列
j 或+:向下移動一行
k 或-:向上移動一行
l:向右移動一列
組合:nh,nj,nk,nl。分別是移動n行(列)
在有方向鍵的鍵盤上,不管指令模式或輸入模式均可以用方向箭頭來移動光標
2、光標按行移動
指令模式下:
:n回車:將光標移動到第n行
:$回車或者L:將光標移動到最後一行
M:將光標移動到中間一行
H:將光標移動到第一行
:set number:顯示行號
:set nonumber:取消顯示行號
3、光標按單詞移動
指令模式下:
w:將光標移動到下一個單詞頭
b:將光標移動到前一個單詞頭
e:將光標移動到下一個單詞尾
組合:nw、nb、ne
4、光標按字符移動
指令模式下:
$:將光標移動到當前行尾
^或0:將光標移動到當前行首
n|:將光標移動到當前行的第n個字符
fm:將光標移動到當前行的下一個字符m處
光標返回原處
兩個單引號‘’
第七步:
文本編輯
1、翻頁
指令模式下:
Ctrl+d:下翻半屏
Ctrl+u:上翻半屏
Ctrl+f:下翻一屏
Ctrl+b:上翻一屏
2、查找
指令模式下:
/string:從當前位置向前查找字符串string
?string:從當前位置向後查找字符串string
繼續查找:
n:沿前述查找方向繼續查找同一字符串
N:沿前述查找方向的反方向繼續查找同一字符串
3、刪除文本
指令模式下:
x:刪除字符
dw:刪除單詞
dd:刪除行
D:刪除從光標到行末全部字符
dfm:刪除從光標到第一個字符m間的文本
:5d:刪除第5行
:5,$d:刪除從第5行到最後一行
能夠和整數n組合
4、撤銷和重複命令
指令模式下:
u:撤銷最後一個更改操做
U:撤銷對本行的全部修改
5、文本替換
指令模式下:
m:替換當前字符爲m,替換後仍爲命令模式
R:替換當前字符後的一系列字符,替換後變爲輸入模式。
s:多個字符替換單個字符
cw:單詞替換
cc:行替換
C:替換當前行剩餘部分
cfm:替換當前字符到指定的字符m
6、文本刪除與替換對比
命令類型 刪除 替換
字符 x r
單詞 dw cw
行 dd cc
從光標到行尾 D C
從光標到字符m dfm cfm
7、全局替換
指令模式下:
搜索當前行的第一個實例
:s/bash/sch把當前行的第一個bash換爲sch
搜索指定行的第一個實例
:1,10s/bash/sch 把1到10行bash換爲sch
:5,$s/bash/sch 把5到末行bash換爲sch
設置過濾條件進行搜索
:g/var/s/bash/sch把包含var行中的bash替換爲sch
同一行中替換全部實例
:s/bash/sch/g把當前行中全部bash替換爲sch
替換整個文件中的全部實例
:1,$s/bash/sch/g把整個文件中的bash替換爲sch
8、移動和複製文本
指令模式下:
yy:複製當前行
dd:剪切當前行(刪除)
p、P:粘貼當前行
9、複製和移動文本塊
指令模式下:
把某(幾)行復制並粘貼到某行後
:5 copy8 把5行復制並粘貼到第8行後
:1,5 copy$ 把1-5行復制並粘貼到末行後
:.,$ copy0 把當前行到末行復制並粘貼到文件頭
把copy改成move即爲移動文本塊(注:.表示當前行,0表示文件頭,$表示文件尾)
第八步:
文件保存
指令模式下:
:w 保存文件
:wq或者:x或者ZZ 保存並退出vi,返回linux提示符
:w f1.c 把當前文件另存爲f1.c
:q! 放棄對文件的保存,直接退出
1、保存文本塊
指令模式下:
:2,5 write f2 把第2到第5行另存爲文件f2
保存文本塊,並直接覆蓋掉已有(若是有)文件
:2 write! f2 把第2行強行另存爲文件f2
向文件追加文本
:2 write >> f2 把第2行追加到文件f2末尾
第九步:
與shell交互
指令模式下:
讀某文件的內容到當前打開文件
:5 read a 把文件a中的內容讀到當前打開文件的第5行後
在vi中執行shell命令
:!pwd
在vi中執行shell命令,並把結果添加到vi中
:5 read! pwd把pwd執行結果插入到第5行後
:e 在vi中編輯某文件時,不退出vi而創建新文件
:n 在vi中編輯某文件時,不退出vi而加載新文件