VIM - 宏 - 簡單使用


  1. 概述

    1. VIM 宏的基本操作
  2. 背景

    1. 之前退出, 查歷史記錄的時候, 偶然按錯
    2. 某些動作, 不是單純依靠 替換操作, 就做得出來的...
  3. 環境

    1. OS
      1. win10
    2. shell
      1. mintty-2.9.4

1. 宏

  1. 概述

    1. 什么是宏
    1. 百度百科

      宏就是一些命令組織在一起,作為一個單獨命令完成一個特定任務
      
    2. 我的感覺

      1. 操作有序集合
        1. 一個宏通常含有多個 順序關聯的操作
      2. 小規模
        1. 操作的數量很小
      3. 使用場景通常受限
        1. office 宏
        2. wow 技能宏

2. 一些操作

  1. 概述
    1. 簡單聊聊基本操作

1. 宏的查看

  1. 概述
    1. 查看當前宏的情況

1. 列表查看

  1. 操作

    # 查看
    :reg
    # 退出查看
    鍵盤上任意鍵即可
    
  2. reg

    1. 寄存器

      1. 可以理解位 vim 的剪貼板
      2. 但實際上, 它的功能還挺強大...
      3. 這個我后面再說吧
      1. 名稱

        1. "a 開始, "z 結束都是宏
          1. 后文簡稱 宏a 到 宏z
            1. 這里不區分 大小寫
            2. 最多只能有 26 個宏
        2. 其他的內容, 以后再講
      2. 存在

        1. 已經錄制的宏, 是可以在列表里查看到的
        2. 沒有錄制的宏, 是不會顯示的
        3. 同一個用戶下, 不同的 vim 窗口, 宏是可以共享的
          1. 存在 ~/.viminfo 里
          2. 不建議直接修改這個文件

2. 單獨查看

  1. 命令

    : reg a
    
  2. 結果

    1. 如果存在, 則只顯示 宏a
    2. 如果不存在, 則宏內容顯示位空

2. 宏的錄制

  1. 概述

    1. 宏的錄制
      1. 當然最開始是沒有宏的
      2. 所以查看不到的話, 自己錄制一個就行了
  2. 准備

    1. 文本

      1
      2
      3
      4
      5
      
    2. 思路

      1. 給每一行的數值 +1
      2. 我想把這個宏, 錄制到 宏a 里
    3. 操作

      1. 定位到 第一行 行首
      2. 使用 ctrl + a, 給數值 +1
      3. 將光標移到第二行行首
    4. 其他

      1. vim 處於 標准模式
  3. 錄制步驟

    1. 定位到 第一行 行首

    2. 鍵盤依次輸入

      # 成功后, 左下角會有狀態變化
      # 顯示 記錄中/Recoding @a
      q
      a
      
    3. 使用 ctrl + a, 給數值 +1

    4. 將光標移到第二行行首

    5. 鍵盤輸入

      # 右下角提示消逝, 錄制結束
      q
      
  4. 查看

    1. 命令

      1. 用 :reg 查看
    2. 結果

      1. 能找到如下記錄

        "a   ^Aj
        
  5. 疑問

    1. 問題1: 進入后, 按 q 退出, 那我要是需要按 q 了, 怎么辦呢?

      1. 解答
        1. 標准模式下, q 只有 開始/結束 錄制的功能
        2. 插入模式里, 輸入 q 不會導致 錄制退出
    2. 問題2: 26 個宏如果用完了, 還想再加怎么辦

      1. 解答
        1. 26 個宏, 通常是夠用的
        2. 如果還需要加, 只有覆蓋之前用過的位置了
        3. 所以, 錄制之前一定要先確定好, 不要讓之前辛苦錄制的宏, 被莫名其妙的覆蓋了...
    3. 問題3: 這個錄制能暫停嗎?

      1. 我不知道...
    4. 問題4: 錄制宏的時候, 可以使用別的宏嗎?

      1. 解答
        1. 我試了試, 目前來看 VIM 並沒有禁止這種 疑似套娃 的行為
          1. 或者說, 宏是可以相互調用的吧...
            1. 沒試過自制死循環...
          2. 甚至可以專門定義一個宏, 來按順序執行一個 或者 多個 其他宏

3. 宏的使用 - 簡單

  1. 概述

    1. 宏的簡單使用
  2. 目的

    1. 讓第二行的數字, 也加上個1
      1. 當然是用宏操作, 而不是再來一次
  3. 確認

    1. reg 里宏, 就是我們想要的內容
  4. 操作

    1. 定位到 第二行 行首

    2. 依次輸入

      @
      a
      
  5. 結果

    1. 第二行數字變成了 3
    2. 光標移動到了 第三行
  6. 疑問

    1. 問題1: 后面還有三個數, 我一個一下一下 @a 也不輕松啊
      1. 解答
        1. @@ 可以重復執行之前執行過的宏
        2. 可以有辦法一次多行執行多次

4. 宏的使用 - 進階

  1. 概述
    1. 宏的一些 進階用法
      1. 其實這些進階, 也沒進多少, 先湊合用吧

1. 多次執行

  1. 概述

    1. 嘗試多次執行同一個宏
  2. 目的

    1. 將 3 到 5 行的數字都加一
  3. 操作

    1. 光標定位到 第三行

    2. 依次輸入內容

      # 用 @@ 也是可以的
      3
      @
      a
      
  4. 結果

    1. 宏執行了 3 次
    2. 后面的三行, 都加了1
  5. 問題

    1. 問題1: 這種手操, 感覺也是有局限性的
      1. 解答
        1. 我也是這么覺得
        2. 但是 VIM 肯定不會讓你失望的

2. EX 命令行: normal

  1. 概述

    1. EX 命令行執行操作的示例
  2. 操作1: 指定單行

    1. 命令

      # 假設我們想讓 當前行 執行這個宏
      : normal @a
      # 假設我們想讓 第4行 執行這個宏
      :4 normal @a
      # 結果我就略了
      
    2. 解釋

      1. normal
        1. 在 EX 命令行關鍵字
        2. normal 后面的內容, 會被翻譯為 標准模式 下的 指令
  3. 操作2: 多行執行

    1. 命令

      # 我想讓 1 到 4 行執行這個宏
      : 1,4 normal @a
      # 結果我就略了
      
  4. 操作3: 匹配執行

    1. 命令

      # 假設想要匹配某個 4 執行宏
      # ex 的全局匹配, 本來應該先講的, 以后補上
      # 匹配到后, 光標會自動停在 4 的前面
      # 感覺這個是一個很實用的操作了
      : g/4/ normal @a
      

3. v 模式 與 EX 命令

  1. 概述

    1. v 模式下的 EX 命令
  2. 操作1: v 模式下執行

    1. 操作
      1. 進入 v 模式

      2. 選定多行

      3. 進入 EX 命令行

      4. 命令

        # '<,'> 是 v 模式下自帶的, 沒有問題
        '<,'> normal @a
        # 結果我就略了
        

4. 問題

  1. 問題1: 宏可以編輯嗎
    1. 解答
      1. 可以的

5. 宏的追加

  1. 概述

    1. 宏的追加
  2. 命令

    # 對 宏a 追加
    q + A
    # 沒錯, 是 大寫的A
    # 輸入追加操作
    # q 退出
    
  3. 問題

    1. 問題1: 這種編輯, 感覺還是有局限性
      1. 解答
        1. 確實, 只能通過 標准模式 下的操作, 來執行
        2. 如果中間或者前面出現了問題, 又得重來
        3. 辦法還是有的

6. 宏的導入導出

  1. 概述

    1. 宏的 導入 和 導出
  2. 准備

    1. 建議把光標移動到文件的最低端
    2. 新建一個空行
    3. 光標停留在空行, 並切回 標准模式

1. reg

  1. 概述

    1. 本質是 剪貼板 的操作
    2. 推薦這種
  2. 導出

    # 導出 宏a
    "ap
    
  3. 導入

    # 光標放在行首
    "ay$
    

2. EX 命令

  1. 概述

    1. 使用 ex 命令行
  2. 導出

    # 導出 宏a
    # 注意留意光標位置, 會額外生成一個 空行
    put a
    
  3. 導入

    # 有個坑, 就是 ctrl 直接復制過去, 會變成 ^, 無法生效
    # 手動按會生效, 但是感覺這沒啥意義...
    let @a="<宏內容>"
    # 但是如果這條路走通了, 就可以利用 vimrc 了
    # 路已經走通了, 下一篇文章就說
    

3. 后續

  1. EX 命令里的 reg

    1. 這玩意我之前沒用過...
  2. 通過 vimrc 可以將我們常用的宏, 導入到 vim 中

    1. 一上來就能直接用了...
      1. 當然那個 Ctrl 的轉義, 我至今沒搞明白
    2. 想想就帶感, 但是我覺得自己還得努力找找...

ps

  1. ref

    1. 百度百科 - 宏
    2. VIM中的寄存器簡介
      1. reg 的簡介, 有空看看
    3. vim 錄制宏,自動循環執行組合操作
    4. vim 教程網
      1. 一個 vim 的教程網
        1. 我從知乎上找進去的
        2. 好像是個妹子獨立維護
          1. vimtutor
          2. 不愧是北航的學生, 學渣給跪了...
    5. Vim寄存器與宏常用命令匯總
      1. 講得不錯
      2. 原文不在了, 只有貼轉載了...
  2. 后續

    1. :reg

      1. 一個強大的剪貼板
    2. :normal

      1. 這么看來的話, EX 命令行應該是可以做 vim 里幾乎所有的很多操作了
        1. 這么說的話, 腳本化這個東西, 應該會帶來很大的便利
    3. map/nmap

      1. 這是什么玩意


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM