Uinx vim指令詳解

進入輸入模式

Vi切換到輸入模式的正規(guī)方法

指令 指令說明
a 在當前光標之后輸入
A 在當前行之末輸入
i 在當前光標之前輸入
I 在當前行之首輸入
o 在當前行之下新增一行,并在新增行輸入
O 在當前行之上新增一行,并在新增行輸入

輸入結束后,按Esc鍵推出輸入模式

光標移動

Vi光標移動

指令 指令說明
h 向左移動一個字節(jié)
i 向右移動一個字節(jié)
j 向下移動一個字節(jié)
k 向上移動一個字節(jié)
b 左移一個單詞,到詞首
w 右移一個單詞,到詞首
e 右移一個單詞,到詞尾
:0 移動到文檔起始位置
0 移動當前行行首
^ 移動到文檔起始位置
$ 移動到當前行行尾
+ 移至下一行的行首
- 移至上一行的行首
H 移至視窗的第一行
M 移至視窗的中間一行
L 移至視窗的最后一行
G 移至該文件的最后一行
nG 移至該文檔的第n行
N+ 下移n行
n+ 上移n行
{ 光標移動到上一個空行
} 光標移動到下一個空行
[[ 光標移動到下一個函數(shù)起始位置(‘{’字符所在位置)
]] 光標移動到上一個函數(shù)起始位置(‘{’字符所在位置)
( 光標移動到上一段落起始位置,空行也被認為是段落(多個連續(xù)空行被認為是一個段落)
) 光標移動到上一段落起始位置,空行也被認為是段落(多個連續(xù)空行被認為是一個段落)

以上命令從h到e,均可指定重復操作次數(shù),如5h表示光標向前移動5個字節(jié),10j表示向下移動10行

視窗移動

Vi視窗移動

指令 指令說明
<Ctrl>+f 視窗下卷一頁
<Ctrl>+b 視窗上卷一頁
<Ctrl>+d 視窗下卷半頁
<Ctrl>+u 視窗上卷半頁
<Ctrl>+e 視窗下卷一行
<Ctrl>+y 視窗上卷一行

刪除操作

**Vi刪除操作

指令 指令說明
x 刪除光標所在字節(jié)
X 刪除光標前一字節(jié)
dw 從光標當前位置開始向后刪除一個單詞
db 從光標當前位置開始向前刪除一個單詞
d0 從行首刪除至當前光標位置
d$ 從光標當前位置刪除至行尾
dd 刪除光標所在行
D 同d$
dG 刪除從當前光標位置直到文檔末尾的所有內(nèi)容

以上x、X、dw、db、dd可以指定字符/行數(shù),如3x表示刪除從當前光標所在位置起的3個字符,3dd表示刪除從當前光標所在行開始的3行。

拷貝和粘貼操作

Vi拷貝粘貼

指令 指令說明
[n]yy 拷貝一行或n行
p 粘貼剛剛拷貝或者刪除(d*命令操作的內(nèi)容)到當前光標后面,如果如果是單詞則粘貼到當前行,其他內(nèi)容則在當前光標所在行后面添加新行進行粘貼
P 粘貼剛剛拷貝或者刪除(nx或者d*命令操作的內(nèi)容)到當前光標后面,如果如果是單詞則粘貼到當前行,其他內(nèi)容則在當前光標所在行后面添加新行進行粘貼

修改操作

Vi修改操作

指令 指令說明
s 修改光標所在字節(jié),修改完成后按Esc鍵結束
S 修改整行內(nèi)容,修改完成后按Esc鍵結束
r 替換當前光標所在字節(jié)
R 進入替換狀態(tài),直至按Esc鍵結束
cw 修改一個單詞(從光標位置至詞尾)
cb 修改一個單詞(從詞首至光標位置)
cc 修改整行內(nèi)容,完成后按Esc鍵結束,同S
c0 修改行首至光標位置的內(nèi)容
c$ 修改光標位置至行尾的內(nèi)容
~ 光標所在字節(jié)大小寫切換

指令重復

Vi指令重復

指令 指令說明
nx 刪除n個字節(jié)
ndd 刪除n行
ns 修改n個字節(jié)

在指令模式中,可在指令前面加入一個數(shù)字n,則該指令會重復執(zhí)行n次。常用的重復操作

取消前一操作

Vi取消前一個操作

指令 指令說明
u 撤消上一指令的結果
U 撤銷本行上的所有修改

查找字符串

Vi查找字符串

指令 指令說明
/字符串 從當前光標向后查找該字符串
?字符串 從當前光標向前查找該字符串
n 從當前光標向后查找下一個字符串
N 從當前光標向前查找下一個字符串
# 向上查找當前光標所在位置的單詞,如果當前位置為空白,則為其后的第一個單詞
* 向下查找當前光標所在位置的單詞,如果當前位置為空白,則為其后的第一個單詞

查看編輯狀況

Vi查看編輯狀況

指令 指令說明
<Ctrl> + g 顯示正在編輯的文件名、當前光標所在行數(shù)、文件總行數(shù)、文件是否被修改

括號匹配

Vi括號匹配

指令 指令說明
% 定位到匹配的“(”、“)”、“{”、“}”

括號匹配符可以用在各種指令中,如d%表示從但前光標位置刪除到匹配的“(”“)”“{”“}”
的位置,c%表示替換從當前光標到配置的“(”“)”“{”“}”位置,y%表示拷貝從當前光標位
置到其后匹配的“)”或“}”。當光標不在“(”“)”“{”“}”上時,默認找其后最近的“(”,然后找“{”。

執(zhí)行指令

Vi執(zhí)行指令

指令 指令說明
:10,20d 刪除第10行至第20行的內(nèi)容
:10d 刪除第10行的內(nèi)容
:%d 刪除全部內(nèi)容
:10,20co30 將第10行至第20行的內(nèi)容復制到第30行之后
:10,20mo30 將第10行至第20行的內(nèi)容移動到第30行之后
:1,$s/old/new 將第1行至最后一行中的old替換成new
:1,$s/^/new 將第1行至最后一行的內(nèi)容前面插入new
:10 將光標移至第10行
:10,20y 拷貝第10行至第20行的內(nèi)容
:g/old/s//new 在全文檔范圍內(nèi)查找每行第一次出現(xiàn)的old字符串并替換為new字符串
:g/old/s//new/g 在全文檔范圍內(nèi)查找所有old字符串并替換為new字符串
:g/old/d 刪除文檔中包含old字符串的行
:r filename 讀入filename文件內(nèi)容,并粘貼到當前光標下一行
:e 重新載入當前文檔的內(nèi)容覆蓋當前所有修改,其實就是將所有自上次保存(或者打開)后的所有修改撤銷。
:$ 光標移動到文檔末尾一行行首
:[w]n[!] [filename] 切換到下一個文件進行編輯。如果指定了filename則打開指定的filename文件進行編輯,如果filename不存在則默認為創(chuàng)建該新文件。如果沒有指定文件名,則只能在vi已經(jīng)打開多個文件且當前編輯的文件不是最后一個文件時使用該命令。n表示next,w表示在切換到下一個文件前將當前文件的修改進行保存,!表示強制執(zhí)行。
:rew[!] rew即rewind,重新打開第一個文件進行編輯,但是如果當前文件的修改沒有保存的話將失敗,如果使用了!,則將舍棄對當前文檔的最近修改(自上次存儲或者文件打開以來),強行打開第一個文件進行編輯。
:la[!] la即last,打開最后一個文件進行編輯,類似rew,只不過一個是打開第一個文件,一個是打開最后一個文件。
:help [key] 顯示vi的幫助信息,如果指定了命令,則顯示該命令的幫助信息。用:exit或:q推出幫助界面。

以上用具體的數(shù)字為例進行介紹,數(shù)字表示行數(shù),光標所在行可用“.”代替,文件最后一行可用“$”代替。

保存與退出

Vi保存與退出

指令 指令說明
:w 保存,但不退出
:wq 保存并退出
:x 同:wq
:q 退出,如果當前文件沒有保存,禁止退出
:q! 不保存退出
:w file1 將內(nèi)容保存至文件file1中,注意:此時編輯的仍為原文件
:w! file1 將內(nèi)容覆蓋保存至文件file1中,如文件file1存在,:w file1將禁止執(zhí)行

環(huán)境設置

Vi環(huán)境設置

指令 指令說明
:set 顯示已設置的環(huán)境狀況
:set all 顯示所有的環(huán)境設置選項
:set nu 顯示行號
:set nonu 不顯示行號
:set ts=n 設置Tab鍵的長度為n

vi環(huán)境設置的缺省值可在$HOME/.exrc文件中設置。

重復指令

Vi重復指令

指令 指令說明
. 重復上一條指令

切換到shell狀態(tài)

Vi切換到shell狀態(tài)

指令 指令說明
:sh 切換到shell狀態(tài),此時可以執(zhí)行所有shell命令,知道執(zhí)行exit返回文檔編輯狀態(tài)。
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容