VI的工作模式
Vi有三種基本的工作模式:
1.指令模式(Command Mode):指令模式主要使用方向鍵移動光標位置進行文字的編輯
2.文本輸入模式(Input Mode) :在指令模式下(Command Mode)按a/A鍵、i/I鍵、o/O鍵進入文本模式
3.行末模式(Last line Mode) :末行模式主要進行一些文字編輯輔助功能,比如字串搜索、替代、保存文件等操作
指令模式(Command Mode) 下輸入 a、i、o進入文本輸入模式(Input Mode)
文本輸入模式(Input Mode)下按 ESC 進入指令模式(Command Mode)
指令模式(Command Mode)下輸入 : 進入末行模式(Last line Mode)
末行模式(Last line Mode)下指令錯誤則返回指令模式(Command Mode)
VI命令常用用法
這裡介紹的都是最基本最常用的vi命令~折騰vps夠用了,比如退出vi的命令等等~
0、進入vi的命令
vi filename :打開或新建文件,並將光標置於第一行首
vi n filename :打開文件,並將光標置於第n行首
vi filename :打開文件,並將光標置於一行首
vi /pattern filename:打開文件,並將光標置於第一個與pattern匹配的串處
vi -r filename :在上次正用vi編輯時發生系統崩潰,恢復filename
vi filename....filename :打開多個文件,依次進行編輯
1、指令模式(Command Mode)
PageDn ----- 向下移動一頁
PageUp ----- 向上移動一頁
0 -----光標移動至行首
h -----光標左移一格
l -----光標右移一格
j -----光標下移一行
k -----光標上移一行
$+A-----將光標移動到該行最後
d+方向鍵 -----刪除文字
dd -----刪除整行
pp -----整行復制
r -----修改光標所在的字符
S -----刪除光標所在的列,並進入輸入模式
2、文本輸入模式(Input Mode)
a -----在光標後開始插入
A -----在行尾開始插入
i -----從光標所在位置前面開始插入
I -----從光標所在列的第一個非空白字元前面開始插入
o -----在光標所在列下新增一列並進入輸入模式
O -----在光標所在列上方新增一列並進入輸入模式
ESC -----返回命令行模式
3、末行模式(Last line Mode)
:q -----結束Vi程序,如果文件有過修改,先保存文件
:q! -----強制退出Vi程序(不保存修改)
:wq -----保存修改並退出程序
ZZ-----保存修改並退出程序(在沒有開啟Caps Lock時按住Shift鍵再按兩個z鍵)
:set num -----設置行號
搬移與復制
==========
利用 delete 及 put 指令可完成資料搬移之目的。
利用 yank 及 put 指令可完成資料復制之目的。
yank 和 delete 可將指定的資料復制到記憶體緩沖區,而藉由 put 指令
可將緩沖區內的資料復制到螢幕上。
例:
搬移一行 .在該行執行 dd
.游標移至目的地
.執行 p
復制一行 .在該行執行 yy
.游標移至目的地
.執行 p
.指令重復
=========
在指令模式中,可在指令前面加入一數字 n,則此指令動作會重復執行 n
次。
例:
刪除10行 .10dd
復制10行 .10yy
.游標移至目的地
.p
指標往下移10行 .10j
..取消前一動作(Undo)
===================
即復原執行上一指令前的內容。
u 恢復最後一個指令之前的結果。
U 恢復游標該行之所有改變。
..搜尋
=====
在vi中可搜尋某一字串,使游標移至該處。
/字串 往游標之後尋找該字串。
?字串 往游標之前尋找該字串。
n 往下繼續尋找下一個相同的字串。
N 往上繼續尋找下一個相同的字串。
..資料的連接
===========
J 句子的連接。將游標所在之下一行連接至游標該行的後面。
若某行資料太長亦可將其分成兩行,只要將游標移至分開點,進入輸入模式
(可利用 a、i等指令)再按《Enter》即可。
..環境的設定
===========
:set nu 設定資料的行號。
:set nonu 取消行號設定。
:set ai 自動內縮。
:set noai 取消自動內縮。
自動內縮(automatic indentation)
在編輯文件或程式時,有時會遇到需要內縮的狀況,『:set ai』即提供自
動內縮的功能,用下例解釋之:
.vi test
.(進入編輯視窗後)
this is the test for auto indent
《Tab》start indent ← :set ai (設自動內縮)
《Tab》data
《Tab》data
《Tab》data ← :set noai (取消自動內縮)
the end of auto indent.
.注: 可刪除《Tab》字元。
從當前位置刪除到行尾
d$
從當前位置復制到行尾
y$ 如果要粘貼到其他地方 p 就可以了
13.
:%s/old_word/new_word/g
這個指令是於在整個文件中替換特定字符串
14.光標控制
k:上移 nk 上移n行
j:下移 nj 下移n行
將光標移到第n行,按下 mk
將光標移到第m行,按下 "ay'k
即將第n到m的行存到a寄存器,以此類推,b,c........寄存器等
這樣就可以將你常用的需要復用的內容粘貼到不同的寄存器中以備用
想粘貼到某處,直接將光標移到某地,按下 ‘ap 即可,以此類推,b,c........寄存器等
在當前屏幕中
H 跳到第一行
M 跳到中間一行
L 跳到最後一行
15.
表8-2 刪除命令
刪除命令操作
d l 刪除當前字符(與x命令功能相同)
d 0 刪除到某一行的開始位置
d ^ 刪除到某一行的第一個字符位置(不包括空格或TA B字符)
d w 刪除到某個單詞的結尾位置
d 3 w 刪除到第三個單詞的結尾位置
d b 刪除到某個單詞的開始位置
d W 刪除到某個以空格作為分隔符的單詞的結尾位置
d B 刪除到某個以空格作為分隔符的單詞的開始位置
d 7 B 刪除到前面7個以空格作為分隔符的單詞的開始位置
d) 刪除到某個語句的結尾位置
d 4) 刪除到第四個語句的結尾位置
d( 刪除到某個語句的開始位置
d } 刪除到某個段落的結尾位置
d { 刪除到某個段落的開始位置
d 7 { 刪除到當前段落起始位置之前的第7個段落位置
d d 刪除當前行
d /t e x t 刪除從文本中出現“ t e x t”中所指定字樣的位置,一直向前直到下一個該字樣所出現的
位置(但不包括該字樣)之間的內容
d fc 刪除從文本中出現字符“c”的位置,一直向前直到下一個該字符所出現的位置(包括
該字符)之間的內容
d tc 刪除當前行直到下一個字符“ c”所出現位置之間的內容
D 刪除到某一行的結尾
d $ 刪除到某一行的結尾
5 d d 刪除從當前行所開始的5行內容
d L 刪除直到屏幕上最後一行的內容
d H 刪除直到屏幕上第一行的內容
d G 刪除直到工作緩存區結尾的內容
d 1 G 刪除直到工作緩存區開始的內容
替換命令
替換命令操作
s 將當前字符替換為一個或多個字符
S 將當前行替換為一個或多個字符
5 s 將從當前字符開始的5個字符替換為一個或多個字符
vi替換使用規則:
:g/s1/s/s2/s3/g
第一個g表示對每一個包括s1的行都進行替換,第二個g表示對每一行包括s1的行所有的s2都用s3替換
s表示替換,s2是要被替換的字符串,他可以和s1相同(如果相同的話用//代替),s3是替換字符串