1. 程式人生 > >Vim 常用命令整理(鳥哥linux學習筆記)

Vim 常用命令整理(鳥哥linux學習筆記)

cit 基本上 aci http 有意思 上下 重做 學習筆記 esp

VIM練習(鳥哥linux筆記)


vim的學習曲線相當大,所以,如果你一開始看到的是一大堆VIM的命令分類,必須經過長時間的練習,
才能掌握。學會vim並且使它會成為你最後一個文本編輯器。
技術分享圖片


vim的使用

基本上vim分為三種模式,分別是『一般指令模式』、『編輯模式』與『指令列命令模式』。
這三種模式的作用分別是:

  • 一般指令模式

    以vim打開一個文檔就直接進入一般指令模式了(這是預設的模式,也簡稱一般模式)。
    在這個模式中,你可以使用『上下左右』按鍵來移動遊標,你可以使用『刪除字節』
    和『刪除整列』來處理檔案內容,也可以使用『復制、粘帖』來處理你的文件資料。

  • 編輯模式

    在一般指令模式中可以進行、復制、粘帖等等動作,但是卻無法編輯文件的內容。要等
    你按下『i,I,o,O,a,A,r,R』等任何一個字母之後才會進入編輯模式。而要返回
    一般指令模式,則必須要按下『ESC』按鍵才可以退出編輯模式。

  • 指令命令模式

    在一般模式中,輸入『:/?』三個中的任何一個按鈕,就可以將遊標移動到最低下
    那一列。在這個模式當中,可以提供你『搜尋資料』的動作,而讀取、存檔、大量取代
    字元、離開vim、顯示行號等等動作則是在此模式中達成的!

技術分享圖片


vim按鍵說明

一般指令模式可用的按鈕說明,遊標移動、復制粘帖、搜尋取代等
遊標移動
按鍵 作用
h或向左的方向鍵 向左移動遊標一個字節
j或向下的方向鍵 向下移動遊標一個字節
k或向上的方向鍵 向上移動遊標一個字節
l或向上的方向鍵 向上移動遊標一個字節

註:如果你將右手放在鍵盤上,你會發現hjkl是排列在一起的,因此可以使用這四個按
鍵來移動遊標。如果你想要進行多次移動的話,例如向下移動30列,可以使用"30j"的組合鍵,
亦即加上你想要進行的次數,按下動作即可。

按鍵 作用
Ctrl+f 屏幕向下移動一頁
Ctrl+b 屏幕向上移動一頁
Ctrl+d 屏幕向下移動半頁
Ctrl+u 屏幕向上移動半頁
+ 移動遊標到非空白字節的下一列
- 移動遊標到非空白字節的上一列
n<space> n表示數字,遊標會向右移動這一行的n個字節。
0或功能鍵Home 數字0,移動到行首。
$或功能鍵End 移動到行尾
H 遊標移動到屏幕最上方那一行的第一個字節
M 遊標移動到屏幕中央那一行的第一個字節
L 遊標移動到屏幕最下方那一列的第一個字節
G 遊標移動到文件的最後一行
nG n為數字,遊標移動到這個文件的第n行。
gg 遊標移動到這個文件的第一行,相當於1G
n<Enter> n為數字,遊標向下移動n行
搜索與取代
按鍵 作用
/word 向遊標之下尋找一個名稱為word的字符串。
?word 向遊標之上尋找一個名稱為word的字符串
n n為英文按鍵。代表『重復之前一個搜尋的動作』
N N為英文按鍵。代表『反向重復之前一個搜尋的動作』
:n1,n2/word1/word2/g n1與n2為數字,在第n1與n2行之間按尋找word1這個字符串,並將該字符串取代為word2.
:1,\(s/word1/word2/g |從第一行到最後一行尋找word1字符串,並將字符串替換為word2 :1,\)s/word1/word2/gc 從第一行到最後一行尋找word1字符串,並將該字符串取代為word2(且在替換前顯示提示字符給使用者
刪除、復制與粘帖
按鍵 作用
x,X 在一行當中,x為向後刪除一個字節,X為向前刪除一個字節。
nx n為數字,連續向後刪除n個字節
dd 刪除遊標所在行
ndd n為數字,刪除遊標所在行向下的n行
d1G 刪除遊標所在到第一行的所有內容
dG 刪除遊標所在到最後一行的所有內容
d$ 刪除遊標所在到本行最後一個字節
d0 刪除遊標所在到本行第一個字節
yy 復制遊標所在的那一行
nyy n為數字,復制遊標所在的向下n行
y1G 復制遊標所在到第一行的所有內容
yG 復制遊標所在到最後一行的所有內容
y0 復制遊標所在到本行行首的內容
y$ 復制遊標所在到本行行尾的內容
p,P p為將已復制的內容在遊標下一列粘帖,P則是在遊標上一列粘帖
J 將遊標所在行與下一行合並
c 重復刪除多個資料, 例如向下刪除10行,[10cj]
u 復原前一個動作
Ctrl+ r 重做上一個動作
. 重復前一個動作

註:u與Ctrl+r 是很常用的指令。一個是復原,另一個則是重做一次!

一般指令模式切換到編輯模式的可用按鍵說明
按鍵 作用
i,I 進入插入模式,i為『從目前遊標所在處插入』。I為『在目前所在行的第一個非空白字節處開始插入』
a,A 進入插入模式,a為『從目前遊標所在處的下一個字節插入』。A為『從遊標所在行的最後一個字節處開始插入』
o,O 進入插入模式,o為『從目前遊標所在處的下一行插入新的一行』。O為『在目前所在處的上一行插入一行新行』
r,R 進入替換模式,r只會替換遊標所在處的那一個字節,R會一直開啟替換模式,直到按下ESC為止。
[ESC] 退出編輯模式,回到一般指令模式
一般指令模式切換到指令模式的可用按鍵說明
按鍵 作用
:w 將編輯的內容寫入硬件中
:w! 若文件屬性為只讀時,強制寫入該文件。不過,到底能不能寫入,還是跟你對該文件的權限有關。
:q 離開vim 不保存
:q! 強制離開vim且不保存修改
:wq 保存後離開vim
ZZ 若文件修改過,則保存離開,否則不保存離開。
:w [filename] 將編輯的文件儲存成另一個文件
:r [filename] 在編輯的文件中,讀入另一個文件的內容。
:n1,n2 w [filename] 將n1到n2的內容儲存成一個filename文件
:!command 暫時離開vim到指令模式下執行shell中command的結果

vim區塊選擇

區塊選擇的按鍵 作用說明
v 字節選擇,會將遊標經過的地方反白選擇
V 行選擇,會將遊標經過的行反白選擇
Ctrl + v 區塊選擇,可以用長方形的方式選擇內容
y 將反白的內容復制起來
d 將反白的內容刪除掉
p 將剛剛復制的區塊,在遊標所在處粘帖上

多文件編輯

同時開啟xxx1、xxxx2和xxxx3三個文件。

  vim xxx1 xxxx2 xxxx3
多文件編輯的按鍵說明
按鍵 說明
:n 編輯下一個文件
:N 編輯上一個文件
:files 列出目前這個vim開啟的所有文檔
分屏功能

分屏模式下的按鍵功能說明
按鍵|功能說明
:-:|:-:
:sp[filename]|開啟一個新視窗,如果有filename,表示在新視窗開啟一個新文件,否則表示兩個視窗為同一個文件內容。
Ctrl+w+j|遊標移動到下面的窗口
Ctrl+w+k|遊標移動到上面的窗口
Ctrl+w+q|關閉窗口

vim常用指令圖

技術分享圖片


vim練習

  1. 各種插入模式

    a -在光標後插入
    o -在當前行後插入一個新行
    O -在當前行前插入一個新行
    cw -替換從光標所在位置後到一個單詞結尾的字符

  2. 簡單的移動光標

    0 -數字零,到行頭
    ^ -到本行第一個不是blank字符的位置。
    $ -到本行行尾
    g_-到本行最後一個不是blank字符的位置。
    /pattern -搜索pattern的字符串

  3. 拷貝/粘帖

    p -在當前位置之後粘帖
    P -在當前位置之前粘帖
    yy -拷貝當前行相當於dd+p

  4. Undo

    u -取消上一步的操作>
    <C-S-r> 重做上一步操作

  5. 打開/保存/退出/改變文件

    :e


更好

下面,讓我們看看vim是怎麽重復自己的:

  1. . (小數點)可以重復上一次的命令
  2. N

更強

你要讓你的光標移動更有效率,你一定要了解下面的這些命令,千萬別跳過

  1. NG/:N 到第N行
  2. gg 到第一行
  3. G 到最後一行
  4. 按單詞移動:

    1. w 到下一個單詞的開頭。
    2. e 到下一個單詞的結尾。
    3. E 到下一個由blank字符分隔符結尾的單詞的結尾。
    4. W 到下一個由blank字符分隔符開頭的單詞的開頭。
      ![e/w下面,讓我們來看看更迅速的光標移動:
  • % 匹配括號移動,支持包括(,{,[,需要你先把光標移動括號上
  • *和# 匹配光標當前所在的單詞,移動光標到下一個或上一個匹配單詞(*是下一個#是上一個)

更快

你一定要記住光標的移動,因為很多命令都可以和這些移動光標的命令連動。很多命令
都可以像下面這麽做:

<start position><command><end position>

例如:0y$ 命令意味著:

  • 0 先把光標跳到行首
  • y 從這裏開始拷貝
  • $ 拷貝到本行的最後一個字符
    你也可以輸入,ye,從當前位置拷貝到本單詞的最後一個字符。
    你也可以輸入,y2/foo,來拷貝2個"foo"之間的字符串。

還有很多時候,你並不一定要按y才會拷貝,下面的命令也會拷貝:

  • d 刪除
  • v 可視化的選擇
  • gU 變大寫
  • gu 變小寫
  • 等等

可視化選擇是一個很有意思的命令,你可以先按v,然後移動光標,你就會看到文本被選擇
,然後你可以d,也可以y,也可以gU gu等等。


技術分享圖片

在當前行上移動光標 0 ^ $ f F t T , ;
  • 0 到行首
  • ^ 到本行第一個非blank字符
  • $ 到行尾
  • g__ 到本行最後一個不是blank字符的位置
  • fa 到下一個為a的字符處,你也可以fs到下一個為s的字符處
  • t, 到逗號前的第一個字符,逗號可以變成其他字符
  • 3fa 在當前行查找第三個出現的a
  • F和T 同f和t一樣,方向相反。

技術分享圖片

還有很有用的命令是dt" 刪除" "內的所有內容,直到遇到雙引號”

區域選擇 <aciton>a<object>或 <action>i<object>

在visual模式下,這些命令很強大,其命令格式為:

<action>a<object>和<action>i<object>

  • action可以是任何的命令,如d(刪除),y(拷貝),v(可視化模式選擇)。
  • object可能是:w 一個單詞,W 一個以空格為分隔符的單詞,s 一個句子,p 一個段落
    也可能是一個特別的字符:"、`、)、}、]。

假設你有一個字符串(map(+)("foo")) 而光標在第一個o的位置。

  • vi" 會選擇foo
  • va" 會選擇"foo"
  • vi) 會選擇"foo"
  • va) 會選擇("foo")
  • v2i) 會選擇map(+)("foo")
  • v2a) 會選擇(map(+)("foo"))

技術分享圖片

塊操作<C-S-v>

塊操作,典型的塊操作:0 <C-V> <C-d> I-- [ESC]

  • ^ 到行首
  • <C-v> 開始塊操作
  • <C-d> 向下移動(你也可 以用hjkl來移動)
  • I-- [ESC] I是插入,插入"--",按ESC鍵來為每一行生效。

自動提示:<C-n> 和 <C-p>

在Insert模式下,你可以輸入一個單詞的開頭,然後按<C-p>或是<C-n>,
自動補齊功能就出現了……


宏錄制:qa 操作序列 q,@a, @@

  • qa 把你的操作記錄在寄存器a
  • @a 會replay被記錄的宏
  • @@ 是一個快捷鍵用來replay最新錄制的宏

示例

在一個只有一行且這一行只有"1"的文本中,鍵入如下命令:

  • qayp<C-a>q

    • qa 開始錄制
    • yp 復制行
    • <C-a> 增加1
    • q 停止錄制
  • @a 在1下面寫下2
  • @@ 在2下面寫下3
  • 現在做100@@會創建新的100行,並把數據增加到103


可視化選擇 v,V,<C-v>

前面,我們看到了<C-v>的示例,我們可以用V和v,一但選好了,你可以做下面
的事:

  • J 把所有的行連接起來,變成一行
  • <或> 左右縮進
  • = 自動給縮進

在所有被選擇的行後面加上點東西:

  • <C-v&g;
  • 選中相關的行(可使用j或是<C-d>或是/pattern或是%等……)
  • $ 到行尾
  • A 輸入字符串,按ESC

分屏: :split和vsplit

下面是主要的命令,你可以使用VIM的幫助,:help split 你可以參考網上的分屏文章。

  • :split
  • <C-w><dir> :dir就是方向,可以是hjk或是方向鍵中的一個,啟用來
    切換分屏
  • <C-w>_(或是<C-w>|): 最大化
  • <C-w>+ (或是<C-w>-):增加尺寸

END

Vim 常用命令整理(鳥哥linux學習筆記)