天天看點

Vim使用簡介

Vim真的很酷:D

正常模式:在檔案中四處移動光标進行修改

插入模式:插入文本

替換模式:替換文本

可視化(一般,行,塊)模式:選中文本塊

指令模式:用于執行指令

在不同的操作模式下,鍵盤敲擊的含義也不同。比如,<code>x</code> 在插入模式會插入字母<code>x</code>,但是在正常模式 會删除目前光标所在的字母,在可視模式下則會删除選中文塊。

在預設設定下,Vim會在左下角顯示目前的模式。 Vim啟動時的預設模式是正常模式。通常你會把大部分 時間花在正常模式和插入模式。

你可以按下 <code>&lt;ESC&gt;</code> (退出鍵) 從任何其他模式傳回正常模式。 在正常模式,鍵入 <code>i</code> 進入插入 模式, <code>R</code> 進入替換模式, <code>v</code> 進入可視(一般)模式, <code>V</code> 進入可視(行)模式, <code>&lt;C-v&gt;</code> (Ctrl-V, 有時也寫作 <code>^V</code>)進入可視(塊)模式, <code>:</code> 進入指令模式。

因為你會在使用 Vim 時大量使用 <code>&lt;ESC&gt;</code> 鍵,是以可以考慮把大小寫鎖定鍵重定義成 <code>&lt;ESC&gt;</code> 鍵

插入文本

在正常模式,鍵入 <code>i</code> 進入插入模式。現在 Vim 跟很多其他的編輯器一樣,直到你鍵入<code>&lt;ESC&gt;</code> 傳回正常模式。 你隻需要掌握這一點和上面介紹的所有基礎知識就可以使用 Vim 來編輯檔案了 (雖然如果你一直停留在插入模式内不一定高效)。

<code>:q</code> 退出(關閉視窗)

<code>:w</code> 儲存(寫)

<code>:wq</code> 儲存然後退出

<code>:e {檔案名}</code> 打開要編輯的檔案

<code>:ls</code> 顯示打開的緩存

打開幫助文檔

<code>:help :w</code> 打開 <code>:w</code> 指令的幫助文檔

<code>:help w</code> 打開 <code>w</code> 移動的幫助文檔

多數時候你會在正常模式下,使用移動指令在緩存中導航。在 Vim 裡面移動也被稱為 “名詞”, 因為它們指向文字塊。

基本移動: <code>hjkl</code> (左, 下, 上, 右)

詞: <code>w</code> (下一個詞), <code>b</code> (詞初), <code>e</code> (詞尾)

行: <code>0</code> (行初), <code>^</code> (第一個非空格字元), <code>$</code> (行尾)

螢幕: <code>H</code> (螢幕首行), <code>M</code> (螢幕中間), <code>L</code> (螢幕底部)

翻頁: <code>Ctrl-u</code> (上翻), <code>Ctrl-d</code> (下翻)

檔案: <code>gg</code> (檔案頭), <code>G</code> (檔案尾)

行數: <code>:{行數}&lt;CR&gt;</code> 或者 <code>{行數}G</code> ({行數}為行數)

雜項: <code>%</code> (找到配對,比如括号或者 /* */ 之類的注釋對)

查找:

查找/到 向前/向後 在本行的{字元}

<code>,</code> / <code>;</code> 用于導航比對

搜尋: <code>/{正規表達式}</code>, <code>n</code> / <code>N</code> 用于導航比對

可視化模式:

可視化:<code>v</code>

可視化行: <code>V</code>

可視化塊:<code>Ctrl+v</code>

可以用移動指令來選中。

你可以用一個計數來結合“名詞”和“動詞”,這會執行指定操作若幹次。

<code>3w</code> 向前移動三個詞

<code>5j</code> 向下移動5行

<code>7dw</code> 删除7個詞

你可以用修飾語改變“名詞”的意義。修飾語有 <code>i</code>,表示“内部”或者“在内“,和 <code>a</code>, 表示”周圍“。

<code>ci(</code> 改變目前括号内的内容

<code>ci[</code> 改變目前方括号内的内容

<code>da'</code> 删除一個單引号字元串, 包括周圍的單引号

<code>:s</code> (替換)指令(文檔)。

在整個檔案中将 foo 全局替換成 bar

将有命名的 Markdown 連結替換成簡單 URLs

用 <code>:sp</code> / <code>:vsp</code> 來分割視窗

同一個緩存可以在多個視窗中顯示。

<code>q{字元}</code> 來開始在寄存器<code>{字元}</code>中錄制宏

<code>q</code>停止錄制

<code>@{字元}</code> 重放宏

宏的執行遇錯誤會停止

<code>{計數}@{字元}</code>執行一個宏{計數}次

宏可以遞歸

首先用<code>q{字元}q</code>清除宏

錄制該宏,用 <code>@{字元}</code> 來遞歸調用該宏 (在錄制完成之前不會有任何操作)

例子:将 xml 轉成 json (file)

一個有 “name” / “email” 鍵對象的數組

用一個 Python 程式?

用 sed / 正規表達式

<code>g/people/d</code>

<code>%s/&lt;person&gt;/{/g</code>

<code>%s/&lt;name&gt;\(.*\)&lt;\/name&gt;/"name": "\1",/g</code>

Vim 指令 / 宏

<code>Gdd</code>, <code>ggdd</code> 删除第一行和最後一行

格式化最後一個元素的宏 (寄存器<code>e</code>)

跳轉到有 <code>&lt;name&gt;</code> 的行

<code>qe^r"f&gt;s": "&lt;ESC&gt;f&lt;C"&lt;ESC&gt;q</code>

格式化一個

的宏

跳轉到有 <code>&lt;person&gt;</code> 的行

<code>qpS{&lt;ESC&gt;j@eA,&lt;ESC&gt;j@ejS},&lt;ESC&gt;q</code>

标簽然後轉到另外一個的宏

<code>qq@pjq</code>

執行宏到檔案尾

<code>999@q</code>

手動移除最後的 <code>,</code> 然後加上 <code>[</code> 和 <code>]</code> 分隔符

繼續閱讀