vi (vim)詳解/圖解

來源:互聯網
上載者:User

[文法]:vi [-wn] [-R] 檔案...
[說明]: vi 是一個基於行編輯器 ex 上的全螢幕編輯器,可以在vi 中使用 ex,ed的全部命令,vi選項中 -wn 指將編輯視窗大小置為n行,-R 為將編輯的檔案置為唯讀模式, vi 工作模式分為命令模式和輸入模式,一般情況下在命令模式下,可敲入vi命令,進入輸入模式下時可以編輯要編輯的文本,命令 a A i I o O c C s S R 可進入輸入模式,在輸入模式下按 ESC 鍵可推出輸入模式,回到命令模式,在命令模式中敲入: 命令,則可進入ex方式,在螢幕底部出現提示符 : ,此時可使用任意ex命令,螢幕底行也用來作/
? ! 命令的提示行,大多數命令可以在其前面加數字,表示命令執行的重複次數,下面簡單介紹一下vi 的命令集,^ 表示(CTRL)鍵
^B 退回前一頁,前面加數字表示重複次數,每次換頁時
保留上一頁的兩行
^D 在命令模式下,表示下滾螢幕的一半,在輸入模式下,表示回退至
左邊的自動縮排處
^E 顯示螢幕底線之下的一行
^F 前進一頁,前面加數字表示重複次數,每次換頁時
保留上一頁的兩行
^G 顯示當前檔案名稱,當前行號和檔案總行數,並用百分比符號當前行在
整個檔案中的位置
^H(退格) 在命令模式下,游標左移一格;在輸入模式下,刪去前面的字元
^I(TAB) 在輸入模式下,產生一串空格
^J(LF) 游標下移一行
^L 重新整理螢幕,即將螢幕重新顯示
^M(斷行符號) 在命令模式下,游標移動至下行開頭
在輸入模式下,開闢一新行
^N 游標下移一行
^P 游標上移一行
^Q 在輸入模式下,將其後的非列印字元作為本文插入
^R 重新整理螢幕
^U 螢幕上滾一半,前面加數字時表示上滾的行數,此數字對
以後的^D ^U 命令有效
^V 在輸入模式下,將其後的非列印字元作為本文插入
^W 在輸入模式下,使游標回退一個字
^Y 顯示螢幕底線之上的一行
^Z 暫停編輯,退回上層Shell
^[(ESC) 退出輸入模式,回到命令模式
! 暫時退出編輯,執行Shell命令
(雙引號) 用於標誌有名緩衝區,編號緩衝區1-9用於儲存被刪去的本文,字
母名緩衝區a-z供使用者存放自訂的本文
$ 將游標移動到當前行尾,前加數字則表示前移行數,如2$表示移動
到下一行行尾
% 將游標移動到配對的小括弧()或大括弧{}上去
( 退回句子開頭
) 前移到句子開頭
- 退到上一行第一個非空白字元
. 重複上一次改變緩衝區內容的命令
/ 模式 向前搜尋模式,將游標移動到模式出現處,模式是一個正規
運算式,(參看 grep)
: 在螢幕底部提示:,其後可使用ex命令
? 功能同 / ,但方向是向前尋找
[[ 游標回退至前一節分界處
轉意符
]] 游標前移至節分界處
^(不是CTRL) 游標移至當前行第一個非Null 字元上
' 連續兩個''表示將游標移至其移動前的位置,'後跟字母表示游標字
母標記的行首(參看 m 命令)
A 在行尾插入本文,進入輸入模式
B 游標回退一個字
C 替換游標後的內容
D 刪除游標後的內容
E 游標前移到字尾
F 字元 在當前行向左尋找指定字元
G 游標移動到其前面數字指定的行,若未指定則移動到最後一行
H 游標移動到螢幕頂行,若前面有數字,則移動到螢幕上該數字
指定的行
I 在行開頭插入本文
J 串連兩行,若前面有數字則串連數字指定的行
L 游標移動到螢幕底行,若前面有數字,則移動到螢幕底線往上數該
數字指定的行
M 游標移動到螢幕中線
N 使用模式尋找/或?時,重複找下一個匹配的模式,但方向與上次相
反,其功能同 n ,但方向相反
O 在當前行上開闢一新行
P 將上次被刪除的本文插入游標前面,可在其前面加緩衝區編號,編
號1-9用於儲存被刪去的本文,字母名緩衝區a-z供使用者存放自定
義的本文
Q 從vi 推出進入ex命令狀態
R 替換字串
S 替換整行
T 字元 向左尋找字元
U 將當前行恢複至第一次修改前的狀態
W 游標移至下一個字首
X 刪除游標前的字元
Y 將當前行存入無名緩衝區,前面加數字表示存入的行數,也可用有
名緩衝區來儲存,以後可用命令p或P將其取出
ZZ 存檔退出vi
a 游標後插入本文
b 游標回退至上一個字首
cw 替換當前字
c) 替換當前句子
dw 刪除一個字
dd 刪除一行
e 游標移到下一個字末
f 字元 在當前行向前尋找字元
h 游標左移一格
i 在游標前插入本文
j 游標下移一行
k 游標上移一行
l 游標右移一格
m 字母 用字母標記當前行,以後可用 '字母使游標移動到當前行,
(參看'命令)
n 重複上次 / 或 ? 命令
o 在當前行下開闢一新行
p 將使用者緩衝區內容放到游標位置(參看P命令)
r 替換當前字元
s 用一串字元替換當前字元
t 字元 游標移動至字元前
u 取消上次操作
w 游標移至下一字首
x 刪除當前字元
yw 將當前字存入無名緩衝區,前面可加x,表示存入名字為x的有名
緩衝區(x為a-z),也可加數字表示存入的字數,以後可用P或p命
令取出
yy 將當前行存入無名緩衝區,用法參看yw
{ 游標移動至前一段開頭
| 游標移至行首,若前面加數字,則移到數字指定行的行首
} 游標移至下一段開頭
在:提示符下,常用命令如下:
:w 當前檔案存檔
:w! 強制存檔
:w 檔案 將內容寫入指定檔案
:w! 檔案 強制寫入指定檔案
:x,y w 檔案 將 x至 y 行寫入指定檔案中
:r 檔案 將檔案讀到游標位置
:r ! 命令 將系統命令的輸出讀到游標位置
:q 退出編輯
:q! 強制退出
:x 與命令ZZ相同
:e 檔案名稱 編輯另一檔案
:e ! 重新編輯檔案,放棄任何改變
:sh 執行sh,結束後回到編輯
:! 命令 執行命令後回到編輯
:n 編輯下一檔案
:n 檔案表 重新定義待編輯檔案表
:set 設定 vi 的選項,例如 set nu 表示每行前顯示行號,在選項前
加no則表示清除該選項,例如 set nonu 表示每行前不顯示行
號,下面是一些常用的選項:
ai 自動縮排
aw 編輯下一檔案前自動存檔
ic 尋找字串時不區分大小寫
nu 每行前顯示行號
sm 輸入)及}時顯示與之配對的( 或 {
slow 插入時延遲螢幕重新整理
ws 使尋找能繞過檔案尾從頭進行
wa 寫檔案之前不作對檔案的檢查

=================================================================

vi(Visual)是以視覺為導向的全螢幕編輯器、共分為三種方式(mode):
command方式:
任何輸入都會作為編輯命令,而不會出現在螢幕上,若輸入錯誤則有“岬”的聲音;任何輸入


都引起立即反映
insert方式:
任何輸入的資料都置於編輯寄存器。在command方式下輸入(I,a,A等),可進入insert方式,  insert方式下按ESC,可跳回command方式。
escape方式:
以“:”或者“/”為前置的指令,出現在螢幕的最下一行,任何輸入都被當成特別指令。
進入vi(在系統提示符下面輸入以下指令):
vi           進入vi而不讀入任何檔案
vi filename      進入vi並讀入指定名稱的檔案(新、舊檔案均可)。
vi +n filename    進入vi並且由檔案的第幾行開始。
vi +filename      進入vi並且由檔案的最後一行開始。
vi + /word filename  進入vi並且由檔案的word這個字開始。
vi filename(s)     進入vi並且將各指定檔案列入名單內,第一個檔案先讀入。
vedit         進入vi並且在輸入方式時會在狀態行顯示“INSERT MODE"。
編輯數個檔案(利用vi filename(s))進入vi後)
:args         顯示編輯名單中的各個檔案名稱
:n          讀入編輯名單中的下一個檔案
:rew         讀入編輯名單中的第一個檔案
:e#          讀入編輯名單內的前一個檔案
:e file        讀入另一個檔案進vi(此檔案可不在編輯名單內),若原檔案經修改還沒有存檔,則           應先以: w 存檔。
:e! file       強迫讀入另一個檔案進入vi,原檔案不作存檔動作。
儲存及退出vi
:w filename      存入指定檔案,但未退出vi(若未指定檔案名稱則為當前工作的檔案名稱)。
:wq 或者 :x或者zz   存檔案,並且退出vi.
:q          不作任何修改並退出vi。
:q!          放棄任何修改並退出vi。
:!command       暫時退出vi並執行shell指令,執行完畢後再回到vi。
:sh          暫時退出vi到系統下,結束時按Ctrl + d則回到vi。
加資料指令
i           在關標位置開始插入字元,結束時候按ESC鍵。
I           在游標所在行的最前面開始加字,結束時按ESC鍵。
a           在游標位置後開始加字,結束時按ESC鍵。
A           在游標所在行的最後面開始加字,結束時按ESC鍵。
o           在游標下加一空白行並開始加字,結束時按ESC鍵。
O           在游標上加一空白行並開始加字,結束時按ESC鍵。
!command       執行shell指令,並把結果加在游標所在行的下一行。
刪除指令
nx          刪除由游標位置起始的n個字元(含游標位置,按一個x表示刪除游標所在的字元)
nX           刪除由游標位置起始的n個字元(不含游標位置)。
ndw          刪除游標位置其實的n個字元組(word)。
d0           將行的開始到游標位置的字元全部刪除。
d$ 或D         將游標位置起始到行尾的字元全部刪除。
ndd          將游標位置起始的n行(整行)刪除(dd表示刪除游標所在行)。
:start,endd      刪除檔案的第start到end行。
關標移動
0           移到一行的開始
$           移到一行的最後
[           移到檔案開始位置
]           移到檔案結束位置
nh          往左移n位
nl或者spacebar     往右移n位
nk          向上移n行
n+          向上移n行,游標在該行的起始
ni           向下移n行
n-          向下移n行,游標在該行的起始
H           移到螢幕的左上方
M           移到螢幕的中間行開頭
L           移到螢幕的最後一行
G           移到檔案的最後一行
nG或者:n       移到檔案的第n行
nw          右移n個字組,標點符號屬於字組
nW          右移n個字組,標點符號不屬於字組
nb          左移n個字組,標點符號屬於字組
nB          左移n個字組,標點符號不屬於字組
Ctrl + u       螢幕上卷半個菜單
Ctrl + d        螢幕下卷半個菜單
Ctrl + b        螢幕上卷一個菜單
Ctrl + F        螢幕下卷一個菜單
修改指令
r           修改游標檔案的字元
R           從游標位置開始修改,結束時按ESC鍵
new          更改n組字元,結束時按ESC鍵
ncc          從游標所在位置開始更改n行,結束時按ESC鍵
重排各行長度
i           並按Enter將該行由游標所在處斷開,並進入insert方式
J           把下一行的資料連線到本行之後
尋找指令
/text         從游標位置往下找字串text
?text         從游標位置往上找字串text
n           繼續找下一個字串(在輸入上面的尋找指令之後使用)
尋找並且取代指令
:getxt1/s/ /text2/options   將各行的text1替換為text2
option=g表示檔案中所有的text1均被取代,若未輸入任何option,則只有               各行中的第一個出現的text1被取代
option=go 在螢幕顯示各取代的行
option=gc 在每個字串取代之前要求確認 
Start,endgtext1/s/ / text2/options  同上,只尋找並取代第start~end行。
或:Start,ends/text1/text2/options
複製及移動檔案
:first,last co dest      將first 到last行的資料複製到目標行(dest)下面
:Start,end m dest      將start 到 end行的資料移動到目標行(dest)下。   
:r filename          將指定檔案的內容讀入游標所在行下。
nY               將游標所在位置開始的n行資料暫存
p               複製暫存資料在游標的下一行
P               複製暫存資料在游標的上一行
其他命令
.               重複前一指令
u               取消前一指令
Ctrl + l           重新整理螢幕顯示
:set number          顯示檔案的行號,但不會存檔案
:set nonumber         解除行號顯示
:set ai            設定每行起始位置(以游標當前位置為起始)
:set noai           取消行起始位置設定
:f 或<Ctrl> + g        告訴使用者有關現行編輯檔案的資料。=================================================================

Last line mode:
/exp Go forward to exp
?exp Go backward to exp


:w Write buffer to disk
:w newfile Write buffer to newfile
:w! file Write Absolutely
:q Quit editor
:q! Quit,discarding buffer
:wq Write buffer and quit
Write if needed & quit
:f Edit & file status
:r Read file into buffer
:r file Read named file in
:e (Re)edit file
:e! (Re)edit,discard file in
:e file Edit nameed file
:3,8d Delete lines 3-8
:4,9m 12 Move lines 4-9 to 12
:2,5t 13 Copy lines 2-5 to 13
:5,9w file Write lines 5-9 to file
:s/old/new/ Current line,sub first "old" w/ "new"
:s/old/new/g Current line,sub each "old" w/ "new"
:3,9s/old/new Lines 3-9,sub first "old" w/ "new"
:%s/old/new All lines,sub first "old" w/ "new"
:%s/old/new/g All lines,sub each "old" w/ "new"
:s/pat./new A . matches any charcter
:s/pat*/new A * matches 0 or more "t"s
:s/pa[0-9aeioA-Z]/new selection set or range
:s/pa[^aeiou]/new match any non-vowel
:s/^pat/new anchor "par" to beginning of line
:s/pats/new anchor "par" to end of line
:s/old/& and new/ restoe matched pattern on sub
:%s/./ &/ indenta whoie file
:set nu Display line numbers
:set nonu Turn off option
:set all Show all settings
:set list Try to display invisible chars
:set wm=5 Wrap lines 5 sp from R margin

Command mode:
<- | ->
hljk Cursor movement
G Goto last file line
3G Goto line 3
0 Goto line start
$ Goto line end
% Goto matching brace/paren
H Goto screen top
M Goto screen middle
L Goto screen bottom
w Go forward 1 word
3w Go forward 3 word
b Go back 1 word
3b Go back 3 word
n Repeat previous search
N Reverse previous search
x Delete one character
dw Delete one word
dd Delete one line
D Delete to end of line
d0 Delete to beginning of line
dG Delete to end of file
4dd Delete 4 lines
u Undo last change
. Do last chang
Y Yank a copy of a line
5Y Yank a copy of 5 lines
P Put below cursor
p Put above cursor
J Join next line to current
4J Join 4 lines to current
>> Shift a line right
3>> Shift 3 lines right
^d 1/2 scroll forward
^u 1/2 scroll backwards
^f Scroll forward
^b Scroll backwards
n Repeat previous search
N Reverse previous search
ZZ Write if needed & quit vi

Insert mode:
a Append after cursor
A Append at line end
cw Change a word
3cw Change 3 words
C Change line
i Insert before cursor
5i Insert at 5 times
I Insert at beginning of line
o Open a linebelow cursor
O Open a line above cursor
r Replace one character
R Replace/type-cver a line
s Substitute a character
S Substitue a line

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.