標籤:vim linux 重複 宏
- Vim技巧之重複
- Vim重複的類型
- 文本改變重複
- 行內尋找重複
- 全文尋找重複
- 文本重複替換
- 宏錄製重複
Vim技巧之重複
當我們用vim
編輯文本的時候,不免會進行一些重複的操作,當我們想要重複上次的操作,難道還要重複一遍相同的操作嗎?這樣不免會浪費時間。於是vim
就將你上次進行的一些操作記錄在vim
的寄存器裡,當你想要重複上次進行的操作的時候,直接點擊快速鍵就可以了。
Vim重複的類型
vim中有五種基本的重複類型,分別是:
重複類型 |
重複操作符 |
後援動作符 |
文本改變重複 |
. |
u |
行內尋找重複 |
; |
, |
全文尋找重複 |
n |
N |
文本替換重複 |
& |
u |
宏重複 |
@[寄存器] |
u |
下面我們來見詳細介紹這幾種重複操作
文本改變重複
通過 : h .
來查看vim的協助手冊:
.
Repeat last change, with count replaced with [count]. Also repeat a yank command, when the ‘y’ flag is included in ‘cpoptions’. Does not repeat a command-line command.
可見.
操作就是用來重複上一次更改的
舉幾個栗子:
example1:
用x
操作來刪除一個字元,接著用.
重複刪除字元
example2:
用dd
刪除一行資料,然後用.
重複刪除一行資料
example3:
用yy
複製一行資料,p
進行粘貼,點擊.
來重複粘貼操作
行內尋找重複
有時候我們想要在當前行內尋找一個字元,我們可以通過f{char}/t{char}
來從當前位置開始到行尾進行尋找,也可以通過F{char}/T{char}
從當前位置開始到行首進行尋找。簡單的說就是小寫向後找,大寫向前找。
通過 : h ;
來查看vim的協助手冊:
;
Repeat latest f, t, F or T [count] times. See cpo-;
,
Repeat latest f, t, F or T in opposite direction [count] times. See also cpo-;
可見我們可以用;
來重複vim尋找的操作,,
重複反向找的操作
舉幾個栗子:
example1:
在檔案main.cc
的31行裡面首先用f:
來尋找:
字元,之後用;
來重複尋找操作
example2:
我們將前文講到的更改操作重複和行內尋找操作重複結合在一起,在檔案main.cc
的31行裡面首先用f+:
來尋找:
字元,然後cl
將:
字元替換為+
字元,之後重複的鍵入;.
來將剩下的:
替換為+
全文尋找重複
通過:h /
來查看vim
的協助手冊:
/{pattern}[/]<CR>
Search forward for the [count]’th occurrence of {pattern} exclusive.
?{pattern}[?]<CR>
Search backward for the [count]’th previous occurrence of {pattern} exclusive.
在vim
裡面通過/pattern<CR>
來從當前位置開始在全文中向下尋找匹配項,或者?pattern<CR>
來從當前位置開始在全文中向上尋找匹配項
通過:h n
來查看vim
的協助手冊:
n
Repeat the latest “/” or “?” [count] times. last-pattern {Vi: no count}
N
Repeat the latest “/” or “?” [count] times in opposite direction. last-pattern {Vi: no count}
在尋找完畢以後,我們可以用n
跳轉到下一個匹配項,N
跳轉到上一個匹配項
舉個栗子:
在main.cc
裡面尋找suite
,並用gUaw
將單詞轉為大寫,之後重複n.
操作將全部轉為大寫
文本重複替換
通過:h &
來查看vim
的協助手冊:
&
Synonym for :s (repeat last substitute). Note that the flags are not remembered, thus it might actually work differently. You can use :&& to keep the flags.
一般來說,我們可以採用這樣的形式:s/target/replacement/g
來將行內出現的字串target
替換為另外一個字串replacement
,要是我們想在其他行執行相同的替換工作,可以用&
來重複替換操作
舉個栗子:
將main.cc
檔案31行內的::
字串採用下面的形式替換為+-+
:s/::/+-+/g
,之後用重複j&
操作替換下面的兩行
宏錄製重複
通過:h @
來查看vim
的協助手冊:
@{0-9a-z".=*+}
Execute the contents of register {0-9a-z”.=*+} [count] times. Note that register ‘%’ (name of the current file) and ‘#’ (name of the alternate file) cannot be used.
vim
裡面宏錄製是一個非常NB的功能,你可以錄製一系列的操作到寄存器裡面,之後直接@{寄存器}
就可以重複之前錄製的一系列操作
vim
裡面可以用q{寄存器}
開始進行錄製,之後用q
來結束錄製,寄存器的名字a-z
中的任意一個,比如qa
就是將動作記錄到寄存器a
中,之後如果想要使用該宏,使用@a
就可以重複錄製的操作
舉幾個栗子:
example1:將當前行的::
替換為+-+
,然後刪除行尾的;
號,並將文本向右縮排一行
example2:在內容為this is number1
進行複製,然後粘貼到下一行,並將數字1
增加為2
,內容變為this is number2
,以此重複十次,所以最後一行的內容應為this is number12
這裡用到了vim
裡面的一個冷知識,那就是Ctrl+a
,該操作會從游標開始,向後尋找離游標最近的數字,如果找到就將數位值加1,同理Ctrl+x
就是將數字減1,於是我們錄製了這樣的一個宏操作qa
,yy
,p
,ctrl+a
,q
,然後[email protected]
將這個宏重複十次就成了上面的效果啦
Vim技巧之重複