比如,有乙個函式:
int foo(char *s, int len)
你可以:
將游標放在第乙個len上,按*
鍵高亮選擇所有的len單詞,並跳到下乙個len上
按n
鍵返回到第乙個len上,按ciwn
將第乙個len改成n
按n
調到第二個len上,按.
按n
調到第三個len上,按.
norm命令可以讓你在ex命令列上執行normal模式的命令,比如在編輯markdown時想在每一行前面都加上*
來讓普通文字行變成無序列表,可以先用v選中這些行,然後按:norm i*
並回車即可
vim的命令豐富,組合使用可以使文字編輯更加高效,配合巨集這種自動化的工具,可以實現更強大的功能
舉乙個小栗子,假如有很多巨集定義的常量
#define const_a 1
#define const_b 2
#define const_c 3
#define const_d 4
#define const_e 5
現在想替換成const的形式
const int const_a = 1;
const int const_b = 2;
const int const_c = 3;
const int const_d = 4;
const int const_e = 5;
我需要錄製這樣的乙個巨集:
按qa
鍵開始錄製巨集,將巨集存到a暫存器裡
按0
鍵將游標移到行首,按ce
刪除#define並進入插入模式,輸入const int
並按esc回到normal模式
按ee
來到變數名的最後乙個字母,按a
進入模式,輸入=
,按esc回到normal模式
按a
將游標移動到最後並進入插入模式,輸入;
並按esc回到normal模式
按j
將游標移到下一行,按q
結束巨集錄製
錄完這個巨集之後,就可以按@a
執行了,這樣沒執行一次巨集就會把當前行替換成const的形式並自動將游標移到下一行,我需要按四次@a
(或者@@
,@@
是指執行上一次執行的巨集)來完成這個編輯任務
不過按四次還是很麻煩的,於是體現vim靈活的特性出現了,你可以通過按4@a
一次替換完所有要編輯的行
假如你要替換的不止是5行,而是100行,你可以在第一行錄完巨集之後,在第二行只需按一次99@a
,100行就全部替換完成了,爽不爽?六不六?有一種快感有木有!!
:s是vim執行正規表示式替換的命令
還是剛才那個例子,我按v4j
選中這5行,然後執行:s/#define\(.*\)\(\d\+\)$/const int\1= \2
便可完成相同的動作
理論上講,用:s命令完成是比用巨集快的,但是思考構造正規表示式也是需要一定的時間的,有時候需要根據具體情況選擇使用那種方式
vim中很多東西都是通過暫存器來傳遞的,比如你複製剪下一段文字、訪問系統的剪貼簿,就連剛才錄製的巨集也是將你的按鍵序列儲存在暫存器裡的,使用:reg a
命令可以檢視我們剛才錄製的巨集
:reg a
--- 暫存器 ---
"a 0deiconst int^[wwi= ^[j
其中^[
是esc鍵產生的按鍵序列
常用的特殊暫存器還有
使用:reg
命令檢視所有的暫存器的內容
在插入模式下或者ex命令模式下,使用鍵+暫存器名 可以輸入暫存器裡的內容
舉乙個例子,如果想使用:s命令替換乙個很長的單詞而又不想手動輸入它,可以先在normal模式下將他複製下來,他會存到"
暫存器裡,然後使用"
就可以輸入了
vim提供的功能還是很強大的,不過vim的指令碼真的是像坨屎一樣臭,導致除了像我這麼懶的人之外沒大有人願意去研究它
不過vim的正則還是很強大的,雖然它和現有的任何標準都不太一樣,不過正則這東西,你學會了一種再去學其他的就會觸類旁通,簡單多了
期待neovim的lua runtime,拯救像我一樣還在屎裡掙扎的人~~~~
如何提高自身生產力
先了解一下 專注 什麼是專注 簡而言之,專注是分散的對立面。不專注地工作一整天很容易。簡訊 email 外界干擾都會讓我們分神而不能專注於自己要做的事情。讓我們花點時間回憶一下什麼是專注?回憶你上次遇到問題辛苦去解決的場景。或許你在除錯bug,或許你在找出為什麼你的 不工作的原因。當你把注意力放在單...
Gruntjs提高生產力(四)
思考 1.grunt以工程為單位安裝外掛程式?如果有新工程就要重新安裝外掛程式或者把安裝好的外掛程式拷貝過去。這樣很麻煩,解決方案是需要用grunt的專案統一放在grunt專案中。2.每次需要針對專案編寫gruntfile.js?a.我們可以把資料夾,路徑用變數代替。傳入xx.json或者用命令列傳...
node大幅提高生產力的方法
1 nodet除錯大量邏輯多用vscode debugger 少用console.log 2 安裝nodemon 使用檔案熱過載 npm install s e dev nodemon nodemon delay10 main.js 這個就類似於js函式中的函式節流,只在最後一次更改的檔案往後延遲重...