[隨筆] Linux下vi命令
Linux下vi命令
本文整理源於網路
進入vi的命令 | |
---|---|
vi filename | 開啟或新建檔案,並將游標置於第一行首 |
vi +n filename | 開啟檔案,並將游標置於第n行首 |
vi + filename | 開啟檔案,並將游標置於最後一行首 |
vi +/pattern filename | 開啟檔案,並將游標置於第一個與pattern匹配的串處 |
vi -r filename | 在上次正用vi編輯時發生系統崩潰,恢復filename |
vi filename….filename | 開啟多個檔案,依次進行編輯 |
移動游標類命令 | |
---|---|
h | 游標左移一個字元 |
l | 游標右移一個字元 |
space | 游標右移一個字元 |
Backspace | 游標左移一個字元 |
k或Ctrl+p | 游標上移一行 |
j或Ctrl+n | 游標下移一行 |
Enter | 游標下移一行 |
w或W | 游標右移一個字至字首 |
b或B | 游標左移一個字至字首 |
e或E | 游標右移一個字至字尾 |
) | 游標移至句尾 |
( | 游標移至句首 |
} | 游標移至段落開頭 |
{ | 游標移至段落結尾 |
nG | 游標移至第n行首 |
n+ | 游標下移n行 |
n- | 游標上移n行 |
n$ | 游標移至第n行尾 |
H | 游標移至螢幕頂行 |
M | 游標移至螢幕中間行 |
L | 游標移至螢幕最後行 |
0 | (注意是數字零)游標移至當前行首 |
$ | 游標移至當前行尾 |
螢幕翻滾類命令 | |
---|---|
Ctrl+u | 向檔案首翻半屏 |
Ctrl+d | 向檔案尾翻半屏 |
Ctrl+f | 向檔案尾翻一屏 |
Ctrl+b | 向檔案首翻一屏 |
nz | 將第n行滾至螢幕頂部,不指定n時將當前行滾至螢幕頂部 |
插入文字類命令 | |
---|---|
i | 在游標前 |
I | 在當前行首 |
a | 游標後 |
A | 在當前行尾 |
o | 在當前行之下新開一行 |
O | 在當前行之上新開一行 |
r | 替換當前字元 |
R | 替換當前字元及其後的字元,直至按ESC鍵 |
s | 從當前游標位置處開始,以輸入的文字替代指定數目的字元 |
S | 刪除指定數目的行,並以所輸入文字代替之 |
ncw或nCW | 修改指定數目的字 |
nCC | 修改指定數目的行 |
刪除命令 | |
---|---|
ndw或ndW | 刪除游標處開始及其後的n-1個字 |
do | 刪至行首 |
d$ | 刪至行尾 |
ndd | 刪除當前行及其後n-1行 |
x或X | 刪除一個字元,x刪除游標後的,而X刪除游標前的 |
Ctrl+u | 刪除輸入方式下所輸入的文字 |
搜尋及替換命令 | |
---|---|
/pattern | 從游標開始處向檔案尾搜尋pattern |
?pattern | 從游標開始處向檔案首搜尋pattern |
n | 在同一方向重複上一次搜尋命令 |
N | 在反方向上重複上一次搜尋命令 |
:s/p1/p2/g | 將當前行中所有p1均用p2替代 |
:n1,n2s/p1/p2/g | 將第n1至n2行中所有p1均用p2替代 |
g/p1/s//p2/g | 將檔案中所有p1均用p2替換 |
選項設定 | |
---|---|
all | 列出所有選項設定情況 |
term | 設定終端型別 |
ignorance | 在搜尋中忽略大小寫 |
list | 顯示製表位(Ctrl+I)和行尾標誌($) |
number | 顯示行號 |
report | 顯示由面向行的命令修改過的數目 |
terse | 顯示簡短的警告資訊 |
warn | 在轉到別的檔案時若沒儲存當前檔案則顯示NO write資訊 |
nomagic | 允許在搜尋模式中,使用前面不帶“\”的特殊字元 |
nowrapscan | 禁止vi在搜尋到達檔案兩端時,又從另一端開始 |
mesg | 允許vi顯示其他使用者用write寫到自己終端上的資訊 |
最後行方式命令 | |
---|---|
:n1,n2 co n3 | 將n1行到n2行之間的內容拷貝到第n3行下 |
:n1,n2 m n3 | 將n1行到n2行之間的內容移至到第n3行下 |
:n1,n2 d | 將n1行到n2行之間的內容刪除 |
:w | 儲存當前檔案 |
:e filename | 開啟檔案filename進行編輯 |
:x | 儲存當前檔案並退出 |
:q | 退出vi |
:q! | 不儲存檔案並退出vi |
:!command | 執行shell命令command |
:n1,n2 w!command | 將檔案中n1行至n2行的內容作為command的輸入並執行之,若不指定n1,n2,則表示將整個檔案內容作為command的輸入 |
:r!command | 將命令command的輸出結果放到當前行 |
暫存器操作 | |
---|---|
“?nyy | 將當前行及其下n行的內容儲存到暫存器?中,其中?為一個字母,n為一個數字 |
“?nyw | 將當前行及其下n個字儲存到暫存器?中,其中?為一個字母,n為一個數字 |
“?nyl | 將當前行及其下n個字元儲存到暫存器?中,其中?為一個字母,n為一個數字 |
“?p | 取出暫存器?中的內容並將其放到游標位置處。這裡?可以是一個字母,也可以是一個數字 |
ndd | 將當前行及其下共n行文字刪除,並將所刪內容放到1號刪除暫存器中 |
*定位到指定行n:
輸入”nG”.
或輸入”ngg”.
或輸入”:n”
這裡,n就是指定的行的行號.注意,有時候G=gg.
*跳到螢幕頂部:
輸入“H”.
這裡,停在第一個非空字元上。加一個數字N,是指距視窗頂部的行數(如’NH’正數第N行)
*跳到螢幕底部:
輸入“L”.
這裡,停在第一個非空字元上。加一個數字,是指距視窗底部的行數(如’NL’倒數第N行)
*跳到螢幕中間:
輸入“M”.
這裡,停在第一個非空字元上。
*跳到檔案首:
輸入”gg”.
*跳到檔案尾:
輸入“G”.
*游標移至句尾:
輸入”)”.
*游標移至句首:
輸入”(“.
*游標移至段落開頭:
輸入”}”.
*游標移至段落結尾:
輸入”{“.
*跳到行末尾:
輸入“$”.
*跳到行首:
輸入“^”.
或輸入“0”.
這裡輸入’^’是移動到首的第一個非空白字元。
*向後跳到整檔案最近距離的單詞末尾:
輸入“e”.
*向前跳到整檔案最近距離的單詞首部:
輸入“b”.
*跳到整檔案下個單詞首部:
輸入“w”.
**行內移動
以下均可可以加上數字N字首表示移動N次(如’3fc’表示執行’fc’3次。)
*移動到游標右面第一個字元c的後面:
輸入”fc”.
*移動到游標右面第一個字元c的前面:
輸入”tc”.
*移動到游標左面第一個字元c的前面:
輸入”Fc”.
*移動到游標左面第一個字元c的後面:
輸入”Tc”.
*重複前一次輸入的f, t, F, T命令:
輸入”;”.
例如剛才是’fc’,輸入’;’相當於還是’fc’。
*會反方向重複前一次輸入的f, t, F, T命令:
輸入”,”.
例如剛才是’fc’,輸入’,’相當’Fc’。
**
**在較長行內的移動:
這裡做一個小小的約定:較長的一行如果佔據了螢幕的多行,那麼這一行我們把它叫“長行”,螢幕上的一行叫做“螢幕行”。所以對於一個’長行’需要有多個’螢幕行’來顯示。
*在“長行”中移動到下一個“螢幕行”:
輸入”gj”.
*在“長行”中移動到上一個“螢幕行”:
輸入”gk”.
*在”長行”中移動到當前”螢幕行”首:
輸入”g^”.
*在”長行”中移動到當前”螢幕行”尾:
輸入”g
**
*按百分比來跳轉,跳轉到檔案50%處:
輸入”50%”.
這裡利用%實現按百分比來跳轉,如果想跳到75%處,輸入“75%”。
**翻頁
可以跟數字字首N表示執行的倍數,翻頁可以用[PageUP]/[PageDown].
*向下翻頁:
輸入“[Ctrl]f”.
*向上翻頁:
輸入“[Ctrl]b”.
*向下翻半頁:
輸入“[Ctrl]d”.
*向上翻半頁:
輸入“[Ctrl]u”.
**
**相對於游標的翻頁
效果是行向相應的方向滾動了,游標仍然在原來的行,好像是將這個文字拖動了一樣.
*游標所在行移動視窗的頂端:
輸入”zt”.
*游標所在行移動視窗的中間:
輸入”zz”.
*游標所在行移動視窗的底端:
輸入”zb”.
*將第n行滾至螢幕頂部:
輸入“nzt”。
*將第n行滾至螢幕底部:
輸入“nzb”。
*將第n行滾至螢幕中部:
輸入“nzz”。
**
*設定書籤:
輸入“ma”.
這樣,會在當前游標的位置標記一個書籤,名字為 a。書籤名只能是小寫字母。你看不見書籤的存在,但它確實已經在那裡了。只能記錄當前檔案裡的書籤,退出vim後再次進入將不會保留這些書籤, 書籤只是當前檔案中的一個位置,但是我實踐一下發現,設定完了書籤之後,儲存檔案,這樣也把書籤儲存了。
*到書籤a處:
輸入”`a”.
注意,這個不是單引號,它一般位於大部分鍵盤的 1 的左邊。
*到書籤a所在的行:
輸入“‘a”.
這裡用的是單引號,將跳到書籤所在的行。
*到上次編輯檔案的地方:
輸入”.".
,精確到點。
這個命令很有用,而且你不用自己去標記它,注意這裡輸入的是反引號
*到上次編輯檔案所在行:
輸入“’.”
注意這裡是精確到行,輸入的是引號‘。
*回到最後一次插入狀態返回的位置:
輸入”’^”.
或輸入”^".
.精確到點(行+列)。
這裡'.精確到行,
*檢視當前所有書籤的列表:
輸入”:marks”.
**搜尋相關:
*搜尋一個字串:
輸入“/string”。
這裡”string”就是將要被搜尋的字串,會自動跳到游標後面第一個”string”處。
*在上次搜尋的基礎上向前搜尋:
輸入“N”。
*在上次搜尋的基礎上向後搜尋:
輸入“n”.
*逆向搜尋一個字串:
輸入“?string”。
這裡”string”就是將要被搜尋的字串,會自動跳到游標前面第一個”string”處。之後使用的“:n”和“:N”命令方向也會相反了。
*列出查詢的歷史記錄:
輸入”q/”.
或輸入”q?”.
這會在vim視窗最下面開啟一個新的視窗,列出你的查詢歷史記錄可以選擇。
*向下完全匹配當前游標下單詞:
輸入“*”。
之後也可以按’n’繼續向下查詢。
*向上完全匹配當前游標下單詞:
輸入“#”。
之後也可以按’N’繼續向上查詢。
*向下匹配包含當前游標單詞的字串:
輸入“g*”。
*向上匹配包含當前游標單詞的字串:
輸入“g#”。
**
*跳到匹配的另一半括號:
輸入“%”。
這樣可以查詢配對的括號,即: )、]、}。
*開啟當前游標單詞下的檔案:
輸入“gf”。
這裡,假設當前的游標在相應的檔名上面,例如“main.c”等等。
*切換到上次開啟檔案:
輸入“[Ctrl]^”。
這裡,例如我們輸入了gf進入某個檔案,可以輸入[Ctrl]^來回到剛才的檔案,這個命令只能在當前和上一個檔案之間切換,不能後退多步。
*後退到某個曾經瀏覽過的位置:
輸入”[Ctrl]o”.
流行的文字編輯器通常都有前進和後退的功能,可以在檔案中曾經瀏覽過的位置之間來回移動。在vim中多次輸入”[Ctrl]o”可以執行後退。
*前進到某個曾經瀏覽過的位置:
輸入”[Ctrl]i”.
或輸入”[Tab]”.
這樣,如果執行過後退,在vim中多次輸入”[Ctrl]o”可以執行前進。
itxiebo
20160617