標籤: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技巧之重複