摘要:注意不僅能映射單個(gè)鍵,還能映射一組鍵,比如臉滾鍵盤(pán)。通過(guò)命令可以顯示當(dāng)前鍵映射的情況。表示不允許映射的結(jié)果參與其他的映射規(guī)則的匹配。當(dāng)然也有用武之地,比如當(dāng)你需要映射的結(jié)果來(lái)觸發(fā)另一個(gè)映射時(shí),就用得上了。
映射功能是當(dāng)下各大編輯器的標(biāo)配,如果你想要熟悉所用的編輯器,必然不能缺少對(duì)它的映射機(jī)制的學(xué)習(xí)。對(duì)于vim亦是如此。
這里說(shuō)到的映射功能,指的是編輯器會(huì)捕獲用戶的輸入,并且按照事先的設(shè)置來(lái)執(zhí)行某些動(dòng)作。
基礎(chǔ)在vim里面自定義一個(gè)映射,格式如下:
maptype key action
如:
inoremap jk" 在insert模式下映射jk為Ctrl+[,也即進(jìn)入normal模式
maptype表示映射的類型,分為兩大類,帶nore的和不帶nore的(具體意義稍后再談)……每一類中,根據(jù)映射的可用范圍再分成若干類,具體類型通過(guò):help map-overview可以查到。這里列舉下重要的幾類:
map: 在所有模式下可用的映射
vmap:在visual和select模式下可用的映射
nmap:在normal模式下可用的映射
imap:在insert模式下可用的映射
omap:用于motion的一部分的映射。比如vw就是visual模式下選中一個(gè)詞,可以用omap定義類似于w這樣的動(dòng)作操作符。
cmap:用于在命令行下(輸入:或/之類后)可用的映射
key表示映射的鍵。什么樣的鍵可以被映射呢?基本上你在鍵盤(pán)上能看到的鍵都能被映射(實(shí)際情況并不如此理想,等會(huì)解釋)。如果你想映射特殊的鍵,比如,可不能就直接打個(gè)上去,而要使用
action就是映射出來(lái)的動(dòng)作。可以是一串字符串,或者調(diào)用一個(gè)函數(shù),還可以是調(diào)用一個(gè)vim命令。這個(gè)就要看大家的想象力了。
進(jìn)階從這里開(kāi)始就要舉出更多映射的例子啦。
Notice! 不要說(shuō)“為什么要這樣映射,XX鍵本來(lái)有YY功能,這樣做不對(duì)”之類的話,畢竟這個(gè)是關(guān)乎personal taste的事情。這里提醒下,在映射一組鍵之前,先看下這個(gè)鍵是不是已經(jīng)有默認(rèn)的功能了,然后看下這組鍵是否被映射了,再來(lái)決定要不要映射它。否則等到已經(jīng)習(xí)慣后,一旦想要改,也沒(méi)那么方便了。
noremap VS map通過(guò):help命令查看某組鍵是否有系統(tǒng)默認(rèn)功能。
通過(guò):map命令可以顯示當(dāng)前鍵映射的情況。
noremap表示不允許映射的結(jié)果參與其他的映射規(guī)則的匹配。而map會(huì)使得映射的結(jié)果可以繼續(xù)匹配其他的映射規(guī)則。
舉個(gè)例子:
nnoremap ; : nnoremap : ;
這里把;和:兩個(gè)符號(hào)互換了,因?yàn)樵趎ormal模式下,:用到的頻率比;高。假如這里用到的是nmap呢?那會(huì)導(dǎo)致vim卡上一段時(shí)間,直到你按下Ctrl+c或者拋出個(gè)錯(cuò)誤。所以基本上都是用noremap作為映射。
當(dāng)然map也有用武之地,比如當(dāng)你需要映射的結(jié)果來(lái)觸發(fā)另一個(gè)映射時(shí),就用得上map了。
cnoremap Or commandcnoremap會(huì)在命令行里起作用。
試一下輸入::cnoremap w!! w !sudo tee >/dev/null %
然后敲:進(jìn)入命令行,快速地敲出w!!,你會(huì)發(fā)現(xiàn)它展開(kāi)成為w !sudo tee >/dev/null %。這就是cnoremap的效果了。
用cnoremap可以大大縮短常用命令的輸入時(shí)間。舉個(gè)例子,你可以使用cnoremap UE UltiSnipsEdit來(lái)代替敲入整個(gè)命令(或者多次敲打tab鍵)。不過(guò)前提是你的手速要足夠快……
其實(shí)為什么不用command呢(現(xiàn)在:help command看看)。你可以用command命令給某個(gè)命令做別名,這樣就不用依賴足夠快的手速了。
can map and can"t map前面說(shuō)過(guò),實(shí)際上不是所有的鍵可以作為vim映射的鍵。這是因?yàn)橐胗|發(fā)vim映射,你要讓vim捕獲到某一組鍵才行。但是有些鍵不會(huì)被傳遞給vim,可能半途就被其他程序偷吃掉了。這種情況在終端vim下特別明顯。因?yàn)榻K端會(huì)占用一些快捷鍵,而且有些特殊的鍵值,比如shift+tab,即使終端它自己不用,也不給vim使用(好過(guò)分喔)。所以到底某個(gè)鍵能不能拿來(lái)做映射,還是得試了才知道。
腦洞大開(kāi)在這一部分,我來(lái)分享些自己覺(jué)得有用的映射,但求拋磚引玉。
" 切換鼠標(biāo)模式和無(wú)鼠標(biāo)模式。方便復(fù)制 function! ToggleMouse() if &mouse ==# "a" set mouse= set norelativenumber set nonumber echo "no mouse mode" else set mouse=a set number set relativenumber echo "mouse mode" endif endfunction noremap:call ToggleMouse()
" 在安裝了ag.vim插件后,查詢光標(biāo)下的內(nèi)容 nnoremapsc :Ag!
" 在新的tab里編輯當(dāng)前目錄下的其他文件 nnoremap:tabedit =expand("%:p:h") /
" 快速開(kāi)始一個(gè)全局替換 nnoremaps :%s///gc
" 編輯shell文件時(shí),調(diào)用man命令查看文檔 au FileType sh nnoremapm :!man
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/24800.html
摘要:適配器模式屬于兩種適應(yīng)設(shè)計(jì)模式中的其中一種,另外一種是迭代器模式,下次有機(jī)會(huì)再仔細(xì)聊聊它。設(shè)計(jì)模式的書(shū)很喜歡以電源適配器插頭作為適配器模式的范例范例,那么我們也從這個(gè)例子開(kāi)始吧。 當(dāng)我談Proxy與Adpater模式時(shí),我談些什么 前言 今天跟同事談起了一道面試題:Proxy模式跟Adpater模式的區(qū)別,這兩個(gè)設(shè)計(jì)模式都是很相似的模式,很多有點(diǎn)經(jīng)驗(yàn)的程序員都可能會(huì)聊的頭頭是道,但是恐...
摘要:對(duì),當(dāng)談到緩存的時(shí)候,就是指那些設(shè)備,如瀏覽器,代理緩存服務(wù)器等。保持副本的新鮮服務(wù)器上的文本內(nèi)容隨時(shí)可能發(fā)生變化,如淘寶首頁(yè)的一個(gè)文件中需要增加記錄用戶點(diǎn)擊日志的功能,所以需要修改某個(gè)文件,以增加對(duì)應(yīng)的功能。 TL;DR 前面大段的內(nèi)容都是基本概念的介紹,建議沒(méi)時(shí)間的同學(xué)直接拖到最下面看。 Web 緩存是可以自動(dòng)保存常見(jiàn)文檔副本的 HTTP 設(shè)備。對(duì),當(dāng)談到緩存的時(shí)候,就是指那...
摘要:示例代碼如下此示例中可以看出,當(dāng)?shù)鹘K止時(shí),通過(guò)拋出異常告知迭代器已耗盡。但如果迭代器所指向的數(shù)據(jù)結(jié)構(gòu)在其存在時(shí)發(fā)生了插入或刪除操作,則迭代器將可能失效。與的情形類似,對(duì)進(jìn)行任何插入操作也將損壞迭代器。 花下貓語(yǔ):之前說(shuō)過(guò),我對(duì)于編程語(yǔ)言跟其它學(xué)科的融合非常感興趣,但我還說(shuō)漏了一點(diǎn),就是我對(duì)于 Python 跟其它編程語(yǔ)言的對(duì)比學(xué)習(xí),也很感興趣。所以,我一直希望能聚集一些有其它語(yǔ)言基...
摘要:作用與用法是的內(nèi)部函數(shù),之前在源碼分析之緩存介紹過(guò)一種這樣的數(shù)據(jù)結(jié)構(gòu)這是一個(gè)二維數(shù)組,每項(xiàng)中的第一項(xiàng)作為緩存對(duì)象的,第二項(xiàng)為緩存的值。 這個(gè)世界需要一個(gè)特定的惡人,可以供人們指名道姓,千夫所指:全都怪你。——村上春樹(shù)《當(dāng)我談跑步時(shí)我談些什么》 本文為讀 lodash 源碼的第六篇,后續(xù)文章會(huì)更新到這個(gè)倉(cāng)庫(kù)中,歡迎 star:pocket-lodash gitbook也會(huì)同步倉(cāng)庫(kù)的更新...
閱讀 1802·2023-04-26 00:47
閱讀 1553·2021-11-11 16:55
閱讀 2623·2021-09-27 14:04
閱讀 3560·2021-09-22 15:58
閱讀 3561·2021-07-26 23:38
閱讀 2137·2019-08-30 13:47
閱讀 1988·2019-08-30 13:15
閱讀 1152·2019-08-29 17:09