VIM 巨集 簡單使用

2022-01-11 13:10:19 字數 4437 閱讀 2884

概述

vim 巨集的基本操作

背景之前退出, 查歷史記錄的時候, 偶然按錯

某些動作, 不是單純依靠 替換操作, 就做得出來的...

環境os

win10

shell

mintty-2.9.4

概述什麼是巨集

巨集

巨集就是一些命令組織在一起,作為乙個單獨命令完成乙個特定任務

我的感覺

操作有序集合

乙個巨集通常含有多個 順序關聯的操作

小規模操作的數量很小

使用場景通常受限

office 巨集

wow 技能巨集

概述簡單聊聊基本操作

概述檢視當前巨集的情況

操作

# 檢視

:reg

# 退出檢視

鍵盤上任意鍵即可

reg暫存器

可以理解位 vim 的剪貼簿

但實際上, 它的功能還挺強大...

這個我後面再說吧巨集名稱

"a 開始, "z 結束都是巨集

後文簡稱 巨集a 到 巨集z

這裡不區分 大小寫

最多只能有 26 個巨集

其他的內容, 以後再講

存在已經錄製的巨集, 是可以在列表裡檢視到的

沒有錄製的巨集, 是不會顯示的

同乙個使用者下, 不同的 vim 視窗, 巨集是可以共享的

存在 ~/.viminfo 裡

不建議直接修改這個檔案

命令

: reg a

結果如果存在, 則只顯示 巨集a

如果不存在, 則巨集內容顯示位空

概述巨集的錄製

當然最開始是沒有巨集的

所以檢視不到的話, 自己錄製乙個就行了

準備文字

123

45

思路給每一行的數值 +1

我想把這個巨集, 錄製到 巨集a 裡

操作定位到 第一行 行首

使用 ctrl + a, 給數值 +1

將游標移到第二行行首

其他vim 處於 標準模式

錄製步驟

定位到 第一行 行首

鍵盤依次輸入

# 成功後, 左下角會有狀態變化

# 顯示 記錄中/recoding @a

qa

使用 ctrl + a, 給數值 +1

將游標移到第二行行首

鍵盤輸入

# 右下角提示消逝, 錄製結束

q

檢視命令

用 :reg 檢視

結果能找到如下記錄

"a   ^aj

疑問問題1: 進入後, 按 q 退出, 那我要是需要按 q 了, 怎麼辦呢?

解答標準模式下, q 只有 開始/結束 錄製的功能

插入模式裡, 輸入 q 不會導致 錄製退出

問題2: 26 個巨集如果用完了, 還想再加怎麼辦

解答26 個巨集, 通常是夠用的

如果還需要加, 只有覆蓋之前用過的位置了

所以, 錄製之前一定要先確定好, 不要讓之前辛苦錄製的巨集, 被莫名其妙的覆蓋了...

問題3: 這個錄製能暫停嗎?

我不知道...

問題4: 錄製巨集的時候, 可以使用別的巨集嗎?

解答我試了試, 目前來看 vim 並沒有禁止這種 疑似套娃 的行為

或者說, 巨集是可以相互呼叫的吧...

沒試過自製死迴圈...

甚至可以專門定義乙個巨集, 來按順序執行乙個 或者 多個 其他巨集

概述巨集的簡單使用

目的讓第二行的數字, 也加上個1

當然是用巨集操作, 而不是再來一次

確認reg 裡巨集, 就是我們想要的內容

操作定位到 第二行 行首

依次輸入

@

a

結果第二行數字變成了 3

游標移動到了 第三行

疑問問題1: 後面還有三個數, 我乙個一下一下 @a 也不輕鬆啊

解答@@ 可以重複執行之前執行過的巨集

可以有辦法一次多行執行多次

概述巨集的一些 高階用法

其實這些高階, 也沒進多少, 先湊合用吧

概述嘗試多次執行同乙個巨集

目的將 3 到 5 行的數字都加一

操作游標定位到 第三行

依次輸入內容

# 用 @@ 也是可以的3@

a

結果巨集執行了 3 次

後面的三行, 都加了1

問題問題1: 這種手操, 感覺也是有侷限性的

解答我也是這麼覺得

但是 vim 肯定不會讓你失望的

概述ex 命令列執行操作的示例

操作1: 指定單行

命令

# 假設我們想讓 當前行 執行這個巨集

: normal @a

# 假設我們想讓 第4行 執行這個巨集

:4 normal @a

# 結果我就略了

解釋normal

在 ex 命令列關鍵字

normal 後面的內容, 會被翻譯為 標準模式 下的 指令

操作2: 多行執行

命令

# 我想讓 1 到 4 行執行這個巨集

: 1,4 normal @a

# 結果我就略了

操作3: 匹配執行

命令

# 假設想要匹配某個 4 執行巨集

# ex 的全域性匹配, 本來應該先講的, 以後補上

# 匹配到後, 游標會自動停在 4 的前面

# 感覺這個是乙個很實用的操作了

: g/4/ normal @a

概述v 模式下的 ex 命令

操作1: v 模式下執行

操作進入 v 模式

選定多行

進入 ex 命令列

命令

# '<,'> 是 v 模式下自帶的, 沒有問題

'<,'> normal @a

# 結果我就略了

問題1: 巨集可以編輯嗎

解答可以的

概述巨集的追加

命令

# 對 巨集a 追加

q + a

# 沒錯, 是 大寫的a

# 輸入追加操作

# q 退出

問題問題1: 這種編輯, 感覺還是有侷限性

解答確實, 只能通過 標準模式 下的操作, 來執行

如果中間或者前面出現了問題, 又得重來

辦法還是有的

概述巨集的 匯入 和 匯出

準備建議把游標移動到檔案的最低端

新建乙個空行

游標停留在空行, 並切回 標準模式

概述本質是 剪貼簿 的操作

推薦這種

匯出

# 匯出 巨集a

"ap

匯入

# 游標放在行首

"ay$

概述使用 ex 命令列

匯出

# 匯出 巨集a

# 注意留意游標位置, 會額外生成乙個 空行

put a

匯入

# 有個坑, 就是 ctrl 直接複製過去, 會變成 ^, 無法生效

# 手動按會生效, 但是感覺這沒啥意義...

let @a="《巨集內容》"

# 但是如果這條路走通了, 就可以利用 vimrc 了

ex 命令裡的 reg

這玩意我之前沒用過...

通過 vimrc 可以將我們常用的巨集, 匯入到 vim 中

一上來就能直接用了...

當然那個 ctrl 的轉義, 我至今沒搞明白

想想就帶感, 但是我覺得自己還得努力找找...

refvim中的暫存器簡介

reg 的簡介, 有空看看

vim 錄製巨集,自動迴圈執行組合操作

vim 教程網

乙個 vim 的教程網

我從知乎上找進去的

好像是個妹子獨立維護

vimtutor

不愧是北航的學生, 學渣給跪了...

vim暫存器與巨集常用命令彙總

講得不錯

原文不在了, 只有貼**了...

後續:reg

乙個強大的剪貼簿

:normal

這麼看來的話, ex 命令列應該是可以做 vim 裡幾乎所有的很多操作了

這麼說的話, 指令碼化這個東西, 應該會帶來很大的便利

map/nmap

這是什麼玩意

vim巨集的使用

原文 普通人的編輯利器 vim 按qa q表示開始錄製巨集,巨集的名字為a 中間的操作 再q 表示巨集錄製結束,vim會提示記錄完成 這樣巨集錄完了,可以用了。再 a,巨集執行了一次。按下6 a 就執行了6次!任務c 錯落有致 操作 這次演示一下巨集的用法,請嚴格按本教程操作。先做一下確認 輸入法沒...

vim簡單使用教程

vim的學習曲線相當的大 參看各種文字編輯器的學習曲線 所以,如果你一開始看到的是一大堆vim的命令分類,你一定會對這個編輯器失去興趣的。下面的文章翻譯自 learn vim progressively 我覺得這是給新手最好的vim的公升級教程了,沒有列舉所有的命令,只是列舉了那些最有用的命令。非常...

vim簡單使用教程

vim的學習曲線相當的大 參看各種文字編輯器的學習曲線 所以,如果你一開始看到的是一大堆vim的命令分類,你一定會對這個編輯器失去興趣的。下面的文章翻譯自 learn vim progressively 我覺得這是給新手最好的vim的公升級教程了,沒有列舉所有的命令,只是列舉了那些最有用的命令。非常...