TA

TA

學習 Vim


第 1 章,vi 文本編輯器#

  1. 簡要歷史觀

  2. 開啟和關閉檔案

    • vi filename,並編輯
    • ZZ,保存檔案
    • :w,保存
    • :w new-filename,另存為
    • :w!,強制寫入
    • :e!,恢復
    • :q!,強制退出
    • :!rm junk-file
    • :!df
  3. 學習 vi 的唯一方法是練習。


第 2 章,簡單編輯#

  1. 移動光標

    • 單一移動:hjkl,它們很糟糕!我有 neo 鍵盤佈局
    • 數字參數:1,2,...
    • 行內移動:
      • 0,移動到行首
      • $,移動到行尾
      • ^,移動到第一個非空字符
    • 按文本區塊移動
      • w,b,按單詞移動,前進,後退,分別。
      • W,B,按大單詞移動,前進,後退,分別。 "-" 連接的單詞視為一個
      • 8G,移動到第 8 行
      • G,移動到檔案結尾
      • gg,像 1G
    • 移動到前一行 / 下一行的第一個字符:-+
  2. 簡單編輯

    • a,附加;(不必要,我會將這些鍵自定義為其他用途)
    • i,插入;
    • c,更改;
      • cw, cb,分別更改單詞,前進,後退
      • c2w,前進更改 2 個單詞
      • c^,到第一個非空字符
      • c0, c$,到行的開始,結束,或者你可以使用 c[Home]c[End]
    • d,刪除;
      • dw,按單詞
      • db,按單詞,向後
      • dd,刪除行
      • d$d[End]D,刪除到行尾
      • dtodTx,刪除到(不包括)"x",前進 / 後退
      • d/th,刪除到第一次匹配 "th"
      • diw,刪除當前單詞
      • di(,刪除當前括號內的內容
    • s,替換
      • s(一個或多個字符),S(整行)。
    • x, X,刪除一個字符,前進或後退,分別(不必要)
      • xP, XP,刪除並粘貼回來
      • xp, Xp,交換兩個字符
    • y,複製;
    • p,粘貼;
      • $p,粘貼到行尾
      • 0P^P,粘貼到行首
  3. vi 命令的一般形式

    • cc, dd, yy
    • (command)(text object)
    • (command)(number)(text object)
    • (number)(command)(text object)
    • cc,更改整行
    • C,像 c$
    • ~,改變大小寫
  4. 雜項

    • 重複你的最後一個命令
      • .
    • 撤銷,重做
      • uC-rU,在惡魔模式下似乎工作不同
    • 插入命令的數字參數:例如 4i<space><Esc>
  5. 注意

    • ccddyy,適用於行
    • CDS 從當前位置到結尾,而 Y,整行
    • C === c$D === d$,但 Y === yy,而不是 y$
  6. 總體

    +------------------------------+------------------------------+------------------------------+------------------------------+
    |         文本對象            |            更改              |            刪除              |             複製             |
    +------------------------------+------------------------------+------------------------------+------------------------------+
    |           一個單詞          |              cw              |              dw              |              yw              |
    +------------------------------+------------------------------+------------------------------+------------------------------+
    |   兩個單詞,不計算標點     |          2cW 或 c2W          |          2dW 或 d2W          |          2yW 或 y2W          |
    |         標點                |                              |                              |                              |
    +------------------------------+------------------------------+------------------------------+------------------------------+
    |       三個單詞向後         |          3cb 或 c3b          |          3db 或 d3b          |          3yb 或 y3b          |
    +------------------------------+------------------------------+------------------------------+------------------------------+
    |           一行              |              cc              |              dd              |           yy 或 Y            |
    +------------------------------+------------------------------+------------------------------+------------------------------+
    |        到行尾               |           c$ 或 C            |           d$ 或 D            |              y$              |
    +------------------------------+------------------------------+------------------------------+------------------------------+
    |     到行首                  |              c0              |              d0              |              y0              |
    +------------------------------+------------------------------+------------------------------+------------------------------+
    |       單一字符             |              r               |            x 或 X            |           yl 或 yh           |
    +------------------------------+------------------------------+------------------------------+------------------------------+
    |       五個字符             |              5s              |              5x              |             5yl              |
    +------------------------------+------------------------------+------------------------------+------------------------------+
    
  7. 例子

    • rddPcwx
    使用編輯器你可以滾動頁面,          使用屏幕編輯器你可以滾動頁面,
    移動光標,刪除行,插入            移動光標,刪除行,插入
    字符,還有更多,當你進行            字符,還有更多,當你進行
    編輯時看到你的結果。               編輯時看到你的結果。
    由於它們允許你在閱讀文件時進行更改,  屏幕編輯器非常受歡迎。
    就像你編輯打印的副本,               由於它們允許你在閱讀文件時進行更改
    屏幕編輯器非常受歡迎。             就像你編輯打印的副本。
    
    • Pp.
    使用屏幕編輯器你可以                     使用屏幕編輯器你可以
    滾動頁面。                                 滾動頁面。
    移動光標。                                 使用屏幕編輯器你可以
    刪除行。                                    移動光標。
                                                     使用屏幕編輯器你可以
                                                     刪除行。
    
    • J
    使用一個                                           使用屏幕編輯器你可以滾動頁面,移動光標
    屏幕編輯器
    你可以
    滾動頁面,移動光標
    

第 3 章,快速移動#

  1. 按屏幕移動

    • 滾動屏幕:
      • C-bC-f
      • C-u(在 emacs 惡魔模式下無效),C-d
      • C-yC-e
      • z<Enter>z.z-,移動到頂部 / 中心 / 底部並滾動到它(不如 emacs 的 recenter-top-center 好,我會在我的惡魔模式中放棄這個)
  2. 重新繪製屏幕:C-l(在我的惡魔模式中無效,我們有 recenter-top-center

  3. 在屏幕內移動

    • HML:到屏幕的頂部 / 中間 / 底部
    • 2H2L:距離頂部 / 底部的第二行
  4. 按行移動

    • +<Enter>-,移動到下一行 / 前一行的第一個字符。
    • 當前行的移動:20|,移動到第 20 列,^,移動到第一個非空字符。
  5. 按文本區塊移動

    • eE,單詞結尾,(忽略標點符號)
    • (),當前 / 下一句的開頭
    • {},當前 / 下一段的開頭
    • [[]],當前 / 下一部分的開頭
  6. 按搜索移動

    • /pattern?pattern,向前 / 向後搜索
    • n,下一個匹配
    • N,下一個匹配,反方向
    • :set nowrapscan,不進行循環搜索
    • d/pattern
  7. 當前行搜索

    • fxFx,移動到前一個 / 下一個 'x'
    • txTx,移動到字符 'x' 之前,前一個 / 下一個
    • ;,,重複相同方向,反方向
    • 7fx,移動到第 7 次匹配
    • dfx,例如 dfi,從這裡刪除到 'i' 的第一次出現,然後 d;,刪除到 'i' 的第二次出現
  8. 按行號移動

    • 20G,移動到第 20 行
    • ``, 返回(舊位置)
    • '',返回,但在行首
    使用屏幕編輯器你可以滾動頁面,
    move1 move2 move4 move5 move6 move7 光標,刪除行,插入
    字符,還有更多,當你看到
    字符,和
    你的編輯結果時。
    

第 4 章,超越基礎#

  1. 更多命令組合

    +------------+------------+-----------+------------------------------+
    |更改        |刪除        |複製       |從光標到...                   |
    +------------+------------+-----------+------------------------------+
    |cH          |dH          |yH         |屏幕頂部                     |
    +------------+------------+-----------+------------------------------+
    |cL          |dL          |yL         |屏幕底部                     |
    +------------+------------+-----------+------------------------------+
    |c+          |d+          |y+         |下一行                       |
    +------------+------------+-----------+------------------------------+
    |c5|         |d5|         |y5|        |當前行的第 5 列              |
    +------------+------------+-----------+------------------------------+
    |2c)         |2d)         |2y)        |第二個句子                   |
    +------------+------------+-----------+------------------------------+
    |c{          |d{          |y{         |前一段                       |
    +------------+------------+-----------+------------------------------+
    |c/pattern   |d/pattern   |y/pattern  |模式                         |
    +------------+------------+-----------+------------------------------+
    |cn          |dn          |yn         |下一個模式                   |
    +------------+------------+-----------+------------------------------+
    |cG          |dG          |yG         |檔案結尾                     |
    +------------+------------+-----------+------------------------------+
    |c13G        |d13G        |y13G       |第 13 行                     |
    +------------+------------+------------+------------------------------+
    
  2. 啟動 vi 時的選項

    • vi +3 filename,在第 3 行打開檔案
    • vi + filename,在最後一行打開檔案
    • vi +/pattern filename,在模式的第一次出現打開檔案
    • vi +R filename,以只讀模式讀取檔案
    • vi -r filenameex -r filename,恢復緩衝區
  3. 複製到命名緩衝區

    • "dyy,複製到緩衝區 "d"
    • "ayw,複製到緩衝區 "a"
    • "ap"dp`,放置緩衝區"a"/"d"
  4. 標記你的位置

    • mx,標記當前位置為 x
    • 'x x `,移動到標記 x。(第一個字符,或確切位置)
    • ''``, 移動到最後的位置

第 5 章,介紹 ex 編輯器#

  __              _       _                                 _ _
 / _| ___  _ __  | | __ _| |_ ___ _ __   _ __ ___  __ _  __| (_)_ __   __ _
| |_ / _ \| '__| | |/ _` | __/ _ \ '__| | '__/ _ \/ _` |/ _` | | '_ \ / _` |
|  _| (_) | |    | | (_| | ||  __/ |    | | |  __/ (_| | (_| | | | | | (_| |
|_|  \___/|_|    |_|\__,_|\__\___|_|    |_|  \___|\__,_|\__,_|_|_| |_|\__, |
                                                                      |___/

第 6 章,全球替換#

  1. 替換

    • :s/old/new,替換第一次出現的 old
    • :s/old/new/g,多次出現
    • :50,100s/old/new/g:50,100s/old/new 適用於 50~100 行
    • :1,$s/old/new,適用於整個檔案
  2. c,確認

    • y 表示是
    • n 表示否
    • Enter,退出
  3. 內容敏感的替換

    • :%s/old/new/g,不確認,整個檔案
    • :g/pattern/s/old/new/g
    • :1,200g/pattern/s/old/new/g
    • :g/pattern/s/old/new/g,同 :g/pattern/s//new/g
  4. 模式匹配規則

    • .,單個字符,除了換行符
    • *,匹配零或多次出現的前一字符
      • 例如 a* 可以匹配 aaaaaa,等等
      • 例如 .* 可以匹配任何字符組合
    • ^,$,當它是正則表達式的第一個 / 最後一個字符時,視為行的開始 / 結束,否則視為其本身。
      • 例如 ^Line 匹配任何以 "Line" 開頭的行
      • 例如 something^*,可以匹配 "something","something^","something^^",等等
    • [],例如 [aoei] 匹配 aoei;和 [a-z];:[a-z0-9] 符合預期。
    • :%s/\(That\) or \(this\)/\2 or \1/
    • ~,匹配最後的搜索歷史。就像你用 /the 搜索 "the",然後你可以用 /~n 搜索 "then"
    • \,例如 \. 匹配 "."
    • \<m\>tion,匹配以 'm' 開頭的單詞,以 "tion" 結尾的單詞
  5. POSIX 括號表達式

    • [:alnum:] 字母數字字符
    • [:alpha:] 字母字符
    • [:blank:] 空格和制表符字符
    • [:cntrl:] 控制字符
    • [:digit:] 數字字符
    • [:graph:] 可打印和可見(非空格)字符
    • [:lower:] 小寫字符
    • [:print:] 可打印字符(包括空白)
    • [:punct:] 標點字符
    • [:space:] 空白字符
    • [:upper:] 大寫字符
    • [:xdigit:] 十六進制數字
  6. 新的 s/old/NEW/g 模式

    • \n,n 是 1..9,匹配 (THIS)
    • &,匹配的部分
    • ~s/thier/their/,然後 s/her/~/ 就像 s/her/their
    • \u,\l,大寫 / 小寫字符。:s/\(That\) or \(this\)/\u\2 or \l\1/
    • \U,\L,\e,\E,大寫區域,或整個匹配
    • :set ic,忽略大小寫
  7. 更多替換技巧

    • :s//~/,重複最後一次替換
    • :%&g,在所有地方重複最後一次替換
    • :%s;/user1/tim;/home/tim;g
  8. 練習

    • /four<Enter>cwfiven(重複搜索),n(跳過一次匹配),.(應用最後的 cwfive
  9. 例子

    • 例子 - 1
    <p>something</p>                                                             <p>somethingelse</p>
    <a>something</a>   ===> `:%300,400g/<p>/s/something/somethingelse/g` ===>    <a>something</a>
    <a>something</a>                                                             <a>something</a>
    <p>something</p>                                                             <p>somethingelse</p>
    
    • 例子 - 2
    one                                                  (one)
    two                                                  (two)
    three       ===> `:348,352s/.*/(&)/` ===>            (three)
    four                                                 (four)
    five                                                 (five)
    
    • 例子 - 3
    That or this   ===>  `:%s/\(That\) or \(this\)/\2 or \1/` ===>  this or That
    
  __              _       _                                 _ _
 / _| ___  _ __  | | __ _| |_ ___ _ __   _ __ ___  __ _  __| (_)_ __   __ _
| |_ / _ \| '__| | |/ _` | __/ _ \ '__| | '__/ _ \/ _` |/ _` | | '_ \ / _` |
|  _| (_) | |    | | (_| | ||  __/ |    | | |  __/ (_| | (_| | | | | | (_| |
|_|  \___/|_|    |_|\__,_|\__\___|_|    |_|  \___|\__,_|\__,_|_|_| |_|\__, |
                                                                      |___/

第 7 章,高級編輯#

  1. 自定義 vi

    • 命令
      • :set option,或 :set nooption
    • .exrc 文件
  2. 執行 Unix 命令

    • :!cmd
    • :r !date,輸出到檔案,Thu May 1 12:59:55 CST 2014
    • :. !date,與 :r 相同,但覆蓋當前行
    • :r Learning-Vim.md,這是 .... 好的。
  3. 通過命令過濾文本

    • :%!sort,你試試你死...
    • !)cmd,將這些句子傳遞給 cmd
    • !!,當前行
    • !2!2!!,兩行
  4. 保存命令

    • 單詞縮寫
      • :ab abbr phrase
      • :unab abbr

第 8 章,vi 克隆的介紹#


技巧#

  1. diwdi"di{}
  2. :!xxd,十六進制編輯器
    :!xxd -r
  3. de,然後 . 隨你想要
  4. ddp,交換當前行和下一行
  5. byeyiw
  6. '.,最後編輯的行
  7. `., 最後編輯的字符
  8. :changes,列出更改
  9. /rgba/y A
    10.gv,重新選擇最後的視覺選擇
  10. g~~gUUguu
  11. >><<,縮進
  12. #*,搜索光標下的單詞
載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。