vim操作技巧

不知不覺使用vim已經有一些時間了,也算得上真正掌握使用技巧了吧。想不起來當初爲什麼去學習這個編輯器,也不記得怎麼學會使用編輯文件,只記得當初按完所有的鍵盤按鍵都沒有退出vim。一顆種子要經過多少風雨才能長成參天大樹,一條小溪要經過多少高山河流才能匯入大海。我們平常學習一樣東西,要經過多少困難,多少挫折,只有自己最清楚。

vim模式

普通編輯器都可以直接打開文件進行編輯、保存、使用快捷鍵等等,vim也具備這些功能,但是有些功能要在特定模式下才能使用。也是因爲這些模式,讓vim學習路線變得特別比較陡峭。vim具有多種模式,每種模式都有特定功能,有時你需要某些功能時,特意切換到指定模式下操作。使用鍵盤就可以隨意切換模式,讓vim不依賴鼠標操作,使用最小化組合鍵的操作,編輯效率大大提高。

普通模式


使用vim打開文件,進入普通模式,也是vim默認模式。在這個模式下,可以移動光標,複製、剪切、粘貼、刪除文件,在這個模式下輸入按鍵全部都是命令快捷鍵。比如你想進行復制操作,yy 複製當前行,p 粘貼光標下面,dw 刪除一個單詞。使用a 切換到插入模式,還有其他的快捷鍵也能做到,: 切換到命令模式Ctrl + v 進入選擇模式

插入模式


左下角顯示-- insert --,表明vim正處於插入模式。這個模式會讀取鍵盤輸入,顯示在屏幕內,大部分編輯器打開就處於插入模式。使用Esc 可以重新進入普通模式,但是輸入字符不會保存到文件中。

可視模式

這個模式主要功能,可以使用移動命令,擴大高亮的文本區域。輸入命令將直接作用於選中文本區域。這就相當於你用鼠標選中一段文本區域,可以使用可以使用命令進行,複製、剪切、修改操作,但是vim並不需要鼠標。

選擇模式

這個模式要在可視模式下才能進入,可以直接使用退格鍵或者空格鍵刪除選中文本區域,或者直接輸入新的文本,替換選中高亮區域進入插入模式。

命令模式


在普通模式下輸入: ,被解析成命令模式,:後面接命令,回車直接執行命令。例如上圖,:q回車直接退出vim編輯器。一般退出vim,需要在命令模式下輸入:wq,保持退出。

Ex模式


在普通模式使用Q 命令進入ex模式,這和命令行模式比較相似,在使用":visual"命令離開Ex模式前,可以一次執行多條命令。這個命令自己使用得很少,只是從google上知道這些。

平常在使用vim主要是在普通模式、插入模式、可視模式、命令模式進行操作,掌握這裏基本就可以熟悉使用vim了。

vim命令快捷鍵

全局移動
  • h 向左移動 ←
  • j 向下移動 ↓
  • k 向上移動 ↑
  • l 向右移動 →

掌握這些快捷鍵,移動光標得時候,手機基本不會離開核心鍵盤區,有沒有像w,a,s,d移動角色的感覺🙂。

  • gg 快速移動到開頭
  • G 快速移動文本結尾
  • Ctrl - f 向下翻頁 即 PageDown 翻頁
  • Ctrl - b 向上翻頁 即 PageUp 翻頁
  • 命令模式:n 移動指定行數n
行內移動
  • w 或者 W 移動到下一個單詞(word)
  • b 或者 B 移動到上一個單詞
  • e 移動下一個單詞結尾
  • ^ 移動到當前行第一個非空字符
  • 0 移動到行首
  • $ 移動到行尾
  • f{char} 在行內正向查找char字符,光標會移動到目標char上
  • F{char} 在行內反向查找char字符,光標會移動到目標char上
  • ; 在行內正向重複搜索char字符,同上
  • , 在行內搜索上個一個char字符,反向搜索,同上
進入插入模式

要想編寫文本內容,還必須在插入模式下進行操作,以下命令由普通模式進入到插入模式

  • i 進入插入模式,在當前光標下輸入
  • o 在當前光標下面新建空白行插入字符
  • a 在光標後臺插入字符(append)
  • A 在行尾插入,a$ => A
  • I 在行首插入, i^ => I
  • O 在光標上面新建空白行插入
  • s 刪除當前光標字符,進入插入模式
刪除

d 刪除字符(delete),d本身沒有任何涵義,但是它可以跟其他命令組合,完成一些快速操作。

  • x 刪除當前字符
  • dd 刪除當前行
  • dw 從光標開始刪除整個單詞(delete word)
  • db 從光標往前刪除到一個字符,反向移動刪除,如果
  • dbx 反向刪除整個單詞
  • d$ 從當前位置刪除到行結尾
  • d^ 反向刪除到行開頭
  • ndd n 表示刪除行數,2dd 刪除兩行
  • ddn 同上
瞭解vim操作

Vim的強大很大程
度上源自操作符與動作命令相結合。在本節,我們將看到它是如何工作的,並考慮其寓義 --vim實用技巧第2版

<font size=5>操作符 + 動作命令 = 操作</font>

d<span style="color:red;">{motion}</span> 命令可以對一個字符dl、一個完整單詞daw
一整個段落dap進行操作,它作用的範圍由動作命令決
定。c<span style="color:red;">{motion}</span>、y<span style="color:red;">{motion}</span> 以及其他一些命令也類似,它們被統稱爲操作符(operator)。

<center>Vim的操作符命令</center>

命令 用途
c 修改(change)
d 刪除(delete)
y 複製到寄存器
g~ 反轉大小寫
gu 反轉小寫
gU 反轉大寫
> 增加縮進
< 減小縮進
= 自動縮進

看着上面刪除操作,是不是很容易理解操作符 + 動作命令 的模式,比如我們已經知道daw刪除整個單詞,gU反轉大寫,我們就可以使用gUaw反轉整個單詞,gUap 反轉整個段落大寫

學會舉一反三
  • ea 在單詞後面插入
  • cw 修改整個單詞
  • c$ 修改從光標到行尾的內容
  • c^ 修改從光標到行首的內容
  • yw 複製從光標開始到詞尾的字符
  • y^ 複製從光標到行首的內容
  • y$ 複製從光標到行尾的內容
  • nyy 複製n行

vim複製剪切操作

由於vim中copy快捷鍵已經被change修改佔用了,只能使用y代表複製(yank),粘貼(put)使用pd其實是將內容剪切到寄存器中,剪切實現刪除操作。ddp 看起來是將兩行位置互換,其實先剪切當前行到寄存器中,p粘貼到光標下的位置。主要記住使用命令y + 動作指令 或者 d + 動作指令,都是將文本暫存到寄存器中,使用p 或者P 進行粘貼。進行一個小demo練習,將變量field替換下面的函數參數foo。

let field = method();
fun(foo)

思路: 先使用yw複製field字段,下移動foo中,dw刪除foo,P粘貼。但是你會發現粘貼結構居然還是foo。這是因爲dw將刪除文本放入寄存器中,覆蓋了上面copy的變量。我們平常複製,剪切的文本都會暫存再無名寄存器中。

認識無名寄存器

在vim不使用單一寄存器進行復制、剪切、粘貼,而是爲這些操作提供多組寄存器。當使用刪除、複製與粘貼命令時,可以明確指定它們中的某一個進行操作。

在vim中的刪除、複製、粘貼都是使用寄存器,可以使用"{registerName}方式命名寄存器。平時我們使用dd,yy命令,不指名寄存器名稱默認使用無名寄存器。倘若沒有指定要使用的寄存器,Vim將缺省使用無名寄存器,它可以用雙引號表示(參見 :h quote_quote )。無名寄存器可以使用""表示,比如""yy 相當於yy""p 相當於p

數字寄存器

"[0-9]表示數字寄存器,數字越小表示最早在寄存器內容。例如"0表示第一個進入寄存器文本,"1表示第二個進入寄存器內容,類似值棧結構,先進後出排列。可以使用:reg 查看寄存器中內容。


比如上面的例子我們可以使用"0P 粘貼field 變量,就不害怕被覆蓋的情況。

系統寄存器

在win系統中,可以在任意地方Ctrl c複製文本,vim是否可以粘貼非vim中複製內容?當然是可以的。"+表示系統寄存器,可以讀取系統vim之外的系統粘貼板中的內容,可以粘貼內容,複製到系統粘貼板中去。ubuntu上需要安裝vim-gnome,纔可以正常使用系統寄存器。

粘貼

  • p 將寄存器中的文本粘貼到光標之後
  • P 將寄存器中的文本粘貼到光標之前

使用粘貼命令前面+寄存器名稱,就可以直接使用專用寄存器中的內容了,例如"+p直接粘貼系統剪貼板中的內容。

在插入模式使用<Ctrl r> + 寄存器名稱粘貼字符文本。例如可以使用<Ctrl r>"粘貼無名寄存器中內容。

本文章有部分內容參考 《vim實用技巧第2版》,有興趣的同學可以買一個本來看看,真的很不錯哦!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章