vi的基本操作 如果只鍵入vi,沒有文件名,也能進入vi,退出命令時輸入文件名才能 被存入磁碟。 進入vi後,游標處於特定某行上,如果去掉“+”號後面數字,游標處於文件最末行 模式識別匹配,在命令中指定一個字元串,進入vi後,游標處於文件中第一個與指定模式串相匹配那行,所有匹配的字元串被高亮。 末行 ...
vi的基本操作
-
如果只鍵入vi,沒有文件名,也能進入vi,退出命令時輸入文件名才能 被存入磁碟。
-
vi +行號 文件名
進入vi後,游標處於特定某行上,如果去掉“+”號後面數字,游標處於文件最末行 -
vi +/模式字元串 文件名
模式識別匹配,在命令中指定一個字元串,進入vi後,游標處於文件中第一個與指定模式串相匹配那行,所有匹配的字元串被高亮。 -
:set nohlsearch
末行模式下,取消高亮顯示 -
vi 需要打開文件的通配符
可以編輯多個文件,在vi命令中寫入要操作的文件即可。例如:vi *.c
打開當前目錄下所有C文件。- 文件之間切換
Ctrl + 6
下一個文件:bn
下一個文件:bp
上一個文件
- 文件之間切換
-
vi +/main *.h *.c
打開程式的所有源文件,並且將顯示位置定位在main函數 -
文本插入操作:
-
插入文本命令
i
將文本插入游標前I
將文本插入當前行的行首
-
追加文本命令
a
將新文本追加到游標當前所在位置之後A
將新文本追加到所在行行尾
-
空行插入命令
-
o
在游標所在行下一行插入一個空行,游標置於該行行首 -
O
在游標所在行上一行插入一個空行,游標置於該行行首
-
-
-
文本刪除操作(命令模式下):
x
刪除游標處的字元。在x之前加上一個數字n,則刪除從游標所在位置開始向右的n 個字元X
刪除游標前面的字元。在x之前加上一個數字n,則刪除從游標前面那個字元開始向 左的n個字元dd
刪除游標所在整行。在dd前加入一個數字n,刪除當前行及其後n-1行的內容D或d$
刪除從游標所在處開始到行尾的內容d0
刪除從游標前一個字元開始到行首的內容dw
刪除一個單詞。若游標在某詞中間,從游標所在位置開始刪至詞尾。dw之前加上n,表示刪除n個指定的單詞d(
刪除到上一句開始的所有字元d)
刪除到下一句開始的所有字元d{
刪除到上一段開始的所有字元d}
刪除到下一段開始的所有字元d<CR>
刪除包括當前行在內的兩行字元
-
文本複製操作:
yy
複製游標所在的整行。在yy前加一個數字n,可複製當前行及其後n-1行內容。Y或y$
複製從游標所在處到行尾的內容yw
複製一個單詞。若游標在某單詞中間,則從游標所在位置開始複製到詞尾。在yw前加一個數字n,表示覆制n個指定的單詞。y)
複製到下一句開始的所有字元y}
複製到下一段開始的所有字元y<CR>
複製包括當前行在內的兩行內容
-
文本粘貼命令:
p
粘貼當前緩衝區的內容
-
文本選擇命令:
v
命令行下進行文本選擇。起始處按v進入塊選擇模式,然後移動到塊尾,之間部分被高亮顯示V
文本第一行按V,然後移動游標到塊的最後一行。之間所有行被高亮顯示
-
撤銷命令:
u
撤銷上一次所做的操作。多次使用u命令會一步一步依次撤銷先前做過的操作U
一次性撤銷自上次移動到當前行所做過的所有操作,再使用一次U則撤銷先前U命令所做的操作,恢復被撤銷的內容
-
重覆命令:
.
文本編輯時碰到機械地重覆一些操作,可以讓用戶方便地再執行一次前面剛完成的某個複雜命令
-
推出vi操作:
:q
-
:q!
無論文件是否改變都會強行推出vi編輯器:w 新文件名
vi保存當前編輯文件,但並不退出,而是繼續等待用戶輸入命令。使用命令時,可以再給當前編輯文件起一個新的文件名,相當於該文件另存為一個新的文件
-
:w!新文件名
命令與上面相同,不同的是,即使指定的新文件存在,編輯器也會用當前文件對其進行替換:wq
vi將先保存文件,然後退出vi返回shell
-
:x
若當前文件曾被修改過,則vi會保存該文件。否則vi直接退出,不保存該文件
vi增強操作
-
替換命令:
r
將當前游標所指的字元替換為提供的字元,可以在該命令前加上數字n,表示從當前字元開始的n個字元替換為提供的字元R
讓vim進入replace模式,此模式下,每個鍵入的字元都會替換當前游標字元,鍵入結束該模式
-
游標移動:
- 基本游標移動命令
h
向左移動一個字元l
向右移動一個字元j
向下移一行k
向上移一行
- 按行移動游標
H
將游標移至當前屏幕的第一行,而不是整個文件的第一行。H命令之前加上數字n,則將游標移至第n行行首M
該命令將游標移至屏幕顯示文件的中間的行首。若屏幕已經充滿,則移動到屏幕的中間行L
游標移至屏幕顯示文件的最底行的行首。L命令之前加上數字n,游標移至從屏幕底部算起第n行的行首G
全文範圍內移動游標,此時游標移動範圍不再受屏幕的限制
- 按字移動游標
w和W
w
將游標右移至下一個字的字首。W
指兩個空格之間的任何內容e和E
e
如果游標起始位置處於字內,則游標移至本字字尾,如果游標在字尾,則移動到下一個字的字尾。E
所指的字是指兩個空格之間的內容b和B
b
如果游標處於字內,則將游標移至本字字首,如果處於字首,則將游標移至上一個字字首。
- 按句移動游標
(
將游標移至上一個句子的開頭)
將游標移至下一個句子的開頭
- 按段移動游標(段是被定義以一個空白行開始和結束的片段)
{
將游標向前移至上一個段的開頭}
將游標向後移至下一個段的開頭
- 文本行的移動
>
將指定的正文行向右移動,通常是右移8個空格。指定的數字是需要移動的行數目,並不是要右移的空格數。通常將代碼整體右移,例>3 回車
<
效果與上述相同,方向相反>>
將游標所在行右移8個空格。如果在>>
命令之前給出數字n,則表示游標當前行及其下麵的n-1行都右移8個空格<<
效果與上述相同,方向相反
- 文本的異行行動(末行模式)
m
允許用戶將某一行的文本內容移動到指定位置,使用方法imj
,把第i行移至第j行下方
- 屏幕滾動
Ctrl+u
將屏幕向前(文件頭方向)翻滾半屏Ctal+d
將屏幕向後(文件尾方向)翻滾半屏Ctrl+f
將屏幕向文件尾方向翻滾一整屏Ctrl+b
將屏幕向文件首方向翻滾一整屏- 可以在命令之前加上一個數字n,表示屏幕向前或者向後翻滾n行,或者屏幕向前或者向後翻滾n頁。
- 查找命令(末行模式)
/string
/命令從游標處開始向後尋找字元串string?string
?命令從游標處開始向後尋找字元串stringn
重覆上一條命令,繼續向下檢索N
重覆上一條檢索命令,但檢索方向和上一次相反g/string
使游標停止在第一個檢索到string串的首行
- 替換命令
:[range]/s/s1/s2/[option]
[range]
表示檢索範圍,省略時表示當前行“1,10”
表示第1行到第10行“%”
表示整個文件“.,$”
從當前行到文件尾
s
為替換命令。s1
是要被替換的串,s2
為替換的串[option]
/g
表示在全局文件中進行替換,/c
表示在每次替換之前需要用戶進行確認,省略時僅對每行第一個匹配串進行替換\<word
替換以word開始的單詞的word部分- 例如,
%s/\<int/char
表示以int開始的單詞的int部分換成char
- 例如,
- 視窗的切分
:split 文件名
split也可以簡寫為sp。這時視窗切分為上下兩半,下部分對應原來文件,上半部分對應新打開文件。Ctal+w,然後j
移動游標到下一個視窗Ctral+w,然後k
移動游標到上一個視窗Ctral+w,然後q
關閉當前視窗Ctral+w,然後w
移動游標到另一個視窗
- 設置環境
:set nu (nonu)
顯示行號(或者不顯示行號):set hlsearch (nohlsearch)
設定搜尋字元串反白顯示(或者不反白顯示):set autoindent
顯示程式語法自動縮進:set backup (nobackup)
自動存儲備份文件(或者不自動備份文件):set all
顯示所有的選項:syntax on (off)
實現程式語法高亮顯示(或者不高亮顯示):set ignorecase (noignorecase)
忽略大小寫(或者區分大小寫)
- 基本游標移動命令