vim高爾夫解說之逗號問題

個人博客

vim 是 vi 編輯器的升級版,是 Linux 世界最為著名的一款文本編輯器,國外有個叫 vimgolf 的網(wǎng)站,將 vim 操作比作打高爾夫球芍瑞,里面設(shè)計了很多挑戰(zhàn)答捕,你可以在那里測試持际、提高自己的 vim 水平呜叫。

那么傲诵,如何衡量你的vim水平?

最簡單粗暴的方式就是計算擊鍵數(shù)镇防,修改同樣一段文本缕溉,擊鍵次數(shù)越少泉褐,水平越高,一鍵對應(yīng)一分狂丝,即分?jǐn)?shù)越少易猫,水平越高怜跑。

下面這個挑戰(zhàn)叫:逗號問題


初始文本

,0,1,2,3,4,5,6,7,89
,1,2,3,4,5,6,7,8,90
,2,3,4,5,6,7,8,9,01
,3,4,5,6,7,8,9,0,12
,4,5,6,7,8,9,0,1,23
56,7,8,9,0,1,2,3,4,
67,8,9,0,1,2,3,4,5,
78,9,0,1,2,3,4,5,6,
89,0,1,2,3,4,5,6,7,
90,1,2,3,4,5,6,7,8,

目標(biāo)文本

0,1,2,3,4,5,6,7,8,9
1,2,3,4,5,6,7,8,9,0
2,3,4,5,6,7,8,9,0,1
3,4,5,6,7,8,9,0,1,2
4,5,6,7,8,9,0,1,2,3
5,6,7,8,9,0,1,2,3,4
6,7,8,9,0,1,2,3,4,5
7,8,9,0,1,2,3,4,5,6
8,9,0,1,2,3,4,5,6,7
9,0,1,2,3,4,5,6,7,8

觀察初始文本與目標(biāo)文本差異可知狮暑,作者的目標(biāo)是褐奴,除了第一列前和最后一列后無逗號,其余每一位數(shù)字均由,隔開踊兜,原始文本需要改的地方是:

  • 前五行
    • 第一列逗號刪掉
    • 最后一列兩位數(shù)字用,分隔開
  • 后五行
    • 第一列兩位數(shù)字用,分隔開
    • 最后一列逗號刪掉

知道了不同筷频,現(xiàn)在就讓我們瞄準(zhǔn)目標(biāo)蓬网,開始打vim高爾夫吧!ready go皮官!

第一局:29分

第一局摄乒,我的得分是29分梨水,也就是擊了29鍵逼龟。既然是批量操作之斯,我首先想到的是命令模式扁眯,該模式也被稱為冒號模式壮莹,因為以冒號開頭。

image
:1,5norm x$P<CR>
  • 首先輸入:進(jìn)入命令模式姻檀,要操作前五行命满,需輸入1,5,這里1也可以換成.绣版,因為進(jìn)入文件時胶台,光標(biāo)在第一行狭莱,命令模式.代表光標(biāo)所在行
  • normnormal的縮寫(可以省兩鍵),即普通模式概作,兩個模式各有千秋腋妙,普通模式擅長近程攻擊,操作范圍窄讯榕;命令模式適合遠(yuǎn)程攻擊骤素,操作范圍廣,二者優(yōu)勢互補(bǔ)愚屁,珠聯(lián)璧合济竹。
  • norm后空一格以輸入普通模式命令,刪(x)第一個字符(,)霎槐,跳到行位($普通模式中是指作用到行尾)送浊,在最后一個字符前粘貼(P)之前刪掉的字符(,),按<CR>(Enter)鍵執(zhí)行操作
  • 至此丘跌,首輪操作完畢袭景,光標(biāo)跳到第5行倒數(shù)最后一個逗號上
image
:6,$norm $x0p<CR>ZZ
  • 同樣是在命令模式中調(diào)用普通模式,操作范圍是第6行到最后一行闭树,$命令模式中代表最后一行耸棒。
  • $x代表挑戰(zhàn)到行尾,然后刪掉最后一個字符(,)报辱,因為操作范圍是最后五行与殃,所以最后一列的逗號都會被刪掉
  • 0代表絕對行首,也可以叫它硬行首碍现,軟行首是^,光標(biāo)跳轉(zhuǎn)到行首后幅疼,執(zhí)行p,就會粘貼剛才刪掉的逗號昼接,刪掉的字符會保存在寄存器中爽篷,大寫的p在光標(biāo)前粘貼寄存器中的字符,小寫的p在光標(biāo)后粘貼寄存器中的字符辩棒。按<CR>(Enter)鍵執(zhí)行操作
  • 至此全部修改完成狼忱,但是別忘了膨疏,我們還要保存退出的一睁,這里用的是ZZ,還可以用:wq:x佃却,不過命令模式執(zhí)行需要按<CR>(Enter)鍵者吁,這樣一來,:wq需要按四個鍵饲帅,:x需要按三個鍵复凳,而ZZ只需要按兩個鍵便可

第二局:26分

使用命令模式雖然簡單易懂瘤泪,但是局限也很明顯,那就是無法再降低擊鍵數(shù)了育八,這次我們換一個模式:可視模式对途,所謂可視模式其實還是在普通模式中,只不過可以像鼠標(biāo)一樣選中字符髓棋、行实檀、塊。

image
<C-V>4jx$<C-V>4jI,<Esc>6G<C-V>4jA,<Esc>$<C-V>4jdZZ
  • <C-V>(ctrl+v)進(jìn)入塊選擇模式按声,我們想操作前五行的第一列膳犹,就向下選中4行(執(zhí)行4j),刪除(x)第一列逗號;
  • $<C-V>4jI,<Esc>签则,意思是跳到行尾须床,進(jìn)入可視化模式,選中前五行最后一列渐裂,在選中列開頭插入逗號豺旬,然后按ESC退出插入模式
  • 6G<C-V>4jA,<Esc>,意思是跳到第6行(普通模式中跳轉(zhuǎn)到第n行柒凉,命令是nG)哈垢,進(jìn)入可視化模式,選中后五行第一列扛拨,在選中列末尾插入逗號耘分,然后按ESC退出插入模式
  • $<C-V>4jdZZ,意思是跳到行尾绑警,進(jìn)入可視化模式求泰,選中后五行最后一列,然后刪除該列计盒,最后按ZZ保存退出

第三局:19分

第二次嘗試雖然比第一次降低3次按鍵渴频,但是還有很大的優(yōu)化空間,我們先把他放在一邊北启,這次我們換一種方式卜朗,利用 vim 的錄制宏來操作。

image
qa<C-V>4jx6G$q@a0p{$PZZ
  • qa輸完就代表開始錄制了咕村,接下來的操作<C-V>4jx6G$场钉,先是刪除前五行第一列第一個字符,
  • 然后6G跳轉(zhuǎn)到第6行,$跳轉(zhuǎn)到該行尾部懈涛,q@a代表結(jié)束錄制逛万,然后重復(fù)一次剛才的操作,后五行最后一個字符便被刪掉了
  • 0p回到第六行行首批钠,并在第一列后粘貼剛才刪掉的,
  • {跳轉(zhuǎn)到段首宇植,這里便是第一行第一個字符得封,$P跳到行尾并在前一個字符前粘貼寄存器里內(nèi)容,即,
  • ZZ保存退出

第四局:14分

image
<C-V>Mx$P}<C-V>4kx0pZZ

還記得第二局吧指郁,現(xiàn)在我們來優(yōu)化下

  • <C-V>Mx進(jìn)入可視化模式忙上,選中前五行第一個字符并刪掉,M代表屏幕中間行
  • P}<C-V>4kx闲坎,P這里直接粘貼,晨横,不用像之前那樣還選中再粘貼,}跳到段尾箫柳,進(jìn)入可視化模式手形,4k像上移動4行,即選中最后五行的最后一列悯恍,然后刪掉(x)
  • 0pZZ跳到行首库糠,直接p粘貼寄存器里的,,然后保存退出涮毫,一共才用14鍵

這是我能想出來的最少鍵數(shù)了瞬欧,不過還有更變態(tài)的

終極操作:12分

image
qaxpeq98@aZZ

只有你的擊鍵數(shù)足夠少才能看到比你更少的,我玩到第四局才看到世界排名第一的操作罢防,他是用錄制宏的方式解決的

  • qa開始錄制宏艘虎,xp刪掉第一個字符(,),并將其粘貼到后面咒吐,e跳到詞尾野建,即跳到剛才粘貼的那個逗號上,然后停止錄制恬叹,重復(fù)98次上述操作
  • 有個更變態(tài)的候生,其實只需要重復(fù)94次就可以了
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市绽昼,隨后出現(xiàn)的幾起案子唯鸭,更是在濱河造成了極大的恐慌,老刑警劉巖硅确,帶你破解...
    沈念sama閱讀 211,817評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件目溉,死亡現(xiàn)場離奇詭異,居然都是意外死亡菱农,警方通過查閱死者的電腦和手機(jī)缭付,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來大莫,“玉大人蛉腌,你說我怎么就攤上這事≈焕澹” “怎么了烙丛?”我有些...
    開封第一講書人閱讀 157,354評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長羔味。 經(jīng)常有香客問我河咽,道長,這世上最難降的妖魔是什么赋元? 我笑而不...
    開封第一講書人閱讀 56,498評論 1 284
  • 正文 為了忘掉前任忘蟹,我火速辦了婚禮,結(jié)果婚禮上搁凸,老公的妹妹穿的比我還像新娘媚值。我一直安慰自己,他們只是感情好护糖,可當(dāng)我...
    茶點故事閱讀 65,600評論 6 386
  • 文/花漫 我一把揭開白布褥芒。 她就那樣靜靜地躺著,像睡著了一般嫡良。 火紅的嫁衣襯著肌膚如雪锰扶。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,829評論 1 290
  • 那天寝受,我揣著相機(jī)與錄音坷牛,去河邊找鬼。 笑死很澄,一個胖子當(dāng)著我的面吹牛京闰,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播甩苛,決...
    沈念sama閱讀 38,979評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼忙干,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了浪藻?” 一聲冷哼從身側(cè)響起捐迫,我...
    開封第一講書人閱讀 37,722評論 0 266
  • 序言:老撾萬榮一對情侶失蹤爱葵,失蹤者是張志新(化名)和其女友劉穎施戴,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體萌丈,經(jīng)...
    沈念sama閱讀 44,189評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡赞哗,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,519評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了辆雾。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片肪笋。...
    茶點故事閱讀 38,654評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出藤乙,到底是詐尸還是另有隱情猜揪,我是刑警寧澤,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布坛梁,位于F島的核電站而姐,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏划咐。R本人自食惡果不足惜拴念,卻給世界環(huán)境...
    茶點故事閱讀 39,940評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望褐缠。 院中可真熱鬧政鼠,春花似錦、人聲如沸队魏。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽器躏。三九已至俐载,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間登失,已是汗流浹背遏佣。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留揽浙,地道東北人状婶。 一個月前我還...
    沈念sama閱讀 46,382評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像馅巷,于是被迫代替她去往敵國和親膛虫。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,543評論 2 349

推薦閱讀更多精彩內(nèi)容

  • 光標(biāo)移動 h 光標(biāo)左移钓猬,同 <Left> 鍵j ...
    guanguans閱讀 1,838評論 0 16
  • 命令歷史 以:和/開頭的命令都有歷史紀(jì)錄稍刀,可以首先鍵入:或/然后按上下箭頭來選擇某個歷史命令。 啟動vim 在命令...
    im螞蟻閱讀 30,734評論 3 48
  • #########################################################...
    路峰閱讀 1,042評論 0 0
  • 一敞曹、Python簡介和環(huán)境搭建以及pip的安裝 4課時實驗課主要內(nèi)容 【Python簡介】: Python 是一個...
    _小老虎_閱讀 5,725評論 0 10
  • 去都柏林前账月,窩頭突然發(fā)現(xiàn)我們乘坐的航班是螺旋槳飛機(jī)。哈澳迫,從來沒有坐過局齿,倒是讓我興致盎然的。來看看是什么樣子的吧橄登。 ...
    藹陽閱讀 609評論 1 4