從零開始配置 vim(6)——縮寫

關(guān)于vim能快速編輯文本的能力鹏往,我們見識(shí)到了 operator + motion ,見識(shí)到了. 范式和宏蔚携。甚至可以使用命令來加快文本編輯傻粘。在后面我們又介紹了快捷鍵綁定來快速執(zhí)行我們想要的操作。今天我們再來介紹一個(gè)新的能加快我們編輯文本速度的東西——Abbreviations

縮寫簡介

Abbreviations 翻譯成中文的意思大概是縮寫抬纸。但是僅僅以縮寫來描述這個(gè)特性咙俩,似乎是不夠的,但是也找不到準(zhǔn)確的中文來描述,暫時(shí)就采用這個(gè)名稱吧湿故。它的這個(gè)特性允許我們將輸入的一段內(nèi)容自動(dòng)更新為新的內(nèi)容

我們先來體驗(yàn)一下它的基本用法阿趁。

在命令中輸入 :iabbrev mian main

我們輸入 mian( 后它會(huì)自動(dòng)將內(nèi)容替換為 main(。這樣即使我們手誤將 main 寫成了 mian 坛猪,vim能自動(dòng)幫我們更新脖阵。再也不用怕編輯器報(bào)找不到 main 函數(shù)了

1.gif

我們發(fā)現(xiàn)了它的第一個(gè)用途——糾正筆誤。但是基于這一特性砚哆,我們還可以使用幾個(gè)簡單的字符來快速展開成常用的長文本独撇。例如
:iabbrev pcr Copyright 2022 Masimaro, all rights reserved 通過輸入 pcr(program copy right) 來快速產(chǎn)生一條程序的版權(quán)信息。

2.gif

又或者在 python 使用 nmain 展開成 if name== "__main__":躁锁。快速寫下測試語句卵史。

3.gif

我們發(fā)現(xiàn) iabbrevi+ abbrev 合成的一條命令战转。看到這相信各位小伙伴應(yīng)該明白了以躯。這個(gè)命令是作用于插入模式下槐秧。該特性還可以作用于 命令模式和替換模式。但是這里就不對它做深入的介紹了忧设。有興趣的小伙伴可以查看vim手冊來了解刁标。

對比鍵盤映射

我們可以使用快捷鍵映射來達(dá)到同樣的效果,例如我們可以定義 :inoremap mian <esc>viwdimain 同樣可以達(dá)到更正 mianmain 的效果

4.gif

但是我們發(fā)現(xiàn)這有幾個(gè)弊端址晕,第一因?yàn)槲覀兌x了一個(gè) mian 的關(guān)鍵字膀懈,這就需要手速要夠快了,在短時(shí)間內(nèi)輸入完成 mian 谨垃。第二我們針對只輸入mian 確實(shí)能達(dá)到更正的效果启搂,但是如果我連著其他的語句一起輸入就不一定有這個(gè)效果了硼控,例如我們想輸入 miantest 但是它會(huì)給我們替換成 maintest 這就有點(diǎn)得不償失了。在這種情況下胳赌,abbreviations 可以正常工作牢撼。而且我們發(fā)現(xiàn)相比于使用映射,abbreviations 顯的更為簡潔疑苫,也更加符合邏輯熏版。

keywords characters

我們發(fā)現(xiàn)在使用 abbreviations 這一特性的時(shí)候,只有在輸入空格或者回車的時(shí)候它才會(huì)啟用自動(dòng)更新捍掺,但是輸入字母的時(shí)候卻不會(huì)纳决。如何定義輸入何種字符的時(shí)候它才會(huì)啟用自動(dòng)更新呢?

abbreviations 這一特性是在我們輸入 non-keyword character 的時(shí)候會(huì)檢查上一個(gè) non-keyword character 到這個(gè)之間的單詞是否符合之前定義的替換規(guī)則乡小,如果符合將會(huì)發(fā)生替換行為阔加,否則不會(huì)發(fā)生。只要定義了 non-keyword character 就可以定義它發(fā)生更新的時(shí)機(jī)满钟。那么我們該如何定義 non-keyword character 字符呢胜榔?

只要不在 iskeyword 中的字符都算是 non-keyword character。我們執(zhí)行 set iskeyword? 可以看到 iskeyword 的定義如下:

@,48-57,_,192-255

看起來很復(fù)雜是不是湃番?首先 @ 代表字母字符夭织,48-57是字符0到字符9的ascii 編碼,_ 單純的代表下劃線吠撮,192-255代表ascii碼中一些特殊字符尊惰。你只需要記住它包含一切字母,數(shù)字泥兰,_ 以及一些特殊字符弄屡。或者更簡單的說鞋诗,格式控制字符(像空格膀捷、制表符、回車)都會(huì)觸發(fā)這一行為削彬。如果你想修改 keyword 全庸。可以在vim手冊中詳細(xì)閱讀關(guān)于 iskeyword 部分的說明融痛。這里就不再過多介紹壶笼,我認(rèn)為當(dāng)前定義更符合編碼時(shí)的直覺。

本地緩沖縮寫

結(jié)合上一章學(xué)習(xí)的本地設(shè)置雁刷,我們也可以設(shè)置本地緩沖的縮寫覆劈,例如

:iabbre <buffer> mian main

我們發(fā)現(xiàn)它只在當(dāng)前緩沖區(qū)中啟用了。


5.gif

到現(xiàn)在我們似乎可以結(jié)合縮寫的這個(gè)特性完成代碼片段的功能呢。但是別著急墩崩,要得到這個(gè)功能氓英,還得接著往下學(xué)習(xí)。

如何形成記憶

跟快捷鍵類似鹦筹,我們一時(shí)興起铝阐,根據(jù)自己的習(xí)慣定義了一堆縮寫,例如 定義 fncfunction铐拐,定義 retreturn 結(jié)果自己之前養(yǎng)成了把這些關(guān)鍵字都輸全的習(xí)慣徘键。后面怎么也改不過來,這些都白定義了遍蟋,該如何解決這個(gè)問題呢吹害?

與我們當(dāng)初禁用快捷鍵類似,我們也可以禁用某些內(nèi)容虚青,只是iabbrev 并沒有提供類似 <nop> 的指令已達(dá)到禁用的目的它呀,但是我們我們可以將對應(yīng)的字符串映射成為某些無效的字符。例如我們使用如下兩個(gè)命令

:iabbrev return <space>
:iabbrev ret return
6.gif

為了養(yǎng)成習(xí)慣我們將 return 映射為空格棒厘,一旦我們習(xí)慣輸入 return 就會(huì)意識(shí)到我們已經(jīng)用簡寫 ret 代替了纵穿。當(dāng)我們養(yǎng)成肌肉記憶之后這條映射的作用也就顯得可有可無了。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末奢人,一起剝皮案震驚了整個(gè)濱河市谓媒,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌何乎,老刑警劉巖句惯,帶你破解...
    沈念sama閱讀 212,542評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異支救,居然都是意外死亡抢野,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評論 3 385
  • 文/潘曉璐 我一進(jìn)店門搂妻,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蒙保,“玉大人,你說我怎么就攤上這事欲主。” “怎么了逝嚎?”我有些...
    開封第一講書人閱讀 158,021評論 0 348
  • 文/不壞的土叔 我叫張陵扁瓢,是天一觀的道長。 經(jīng)常有香客問我补君,道長引几,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,682評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮伟桅,結(jié)果婚禮上敞掘,老公的妹妹穿的比我還像新娘。我一直安慰自己楣铁,他們只是感情好玖雁,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,792評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著盖腕,像睡著了一般赫冬。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上溃列,一...
    開封第一講書人閱讀 49,985評論 1 291
  • 那天劲厌,我揣著相機(jī)與錄音,去河邊找鬼听隐。 笑死补鼻,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的雅任。 我是一名探鬼主播风范,決...
    沈念sama閱讀 39,107評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼椿访!你這毒婦竟也來了乌企?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,845評論 0 268
  • 序言:老撾萬榮一對情侶失蹤成玫,失蹤者是張志新(化名)和其女友劉穎加酵,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體哭当,經(jīng)...
    沈念sama閱讀 44,299評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡猪腕,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,612評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了钦勘。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片陋葡。...
    茶點(diǎn)故事閱讀 38,747評論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖彻采,靈堂內(nèi)的尸體忽然破棺而出腐缤,到底是詐尸還是另有隱情,我是刑警寧澤肛响,帶...
    沈念sama閱讀 34,441評論 4 333
  • 正文 年R本政府宣布岭粤,位于F島的核電站,受9級(jí)特大地震影響特笋,放射性物質(zhì)發(fā)生泄漏剃浇。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,072評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望虎囚。 院中可真熱鬧角塑,春花似錦、人聲如沸淘讥。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,828評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽适揉。三九已至留攒,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間嫉嘀,已是汗流浹背炼邀。 一陣腳步聲響...
    開封第一講書人閱讀 32,069評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留剪侮,地道東北人拭宁。 一個(gè)月前我還...
    沈念sama閱讀 46,545評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像瓣俯,于是被迫代替她去往敵國和親杰标。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,658評論 2 350

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