成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

當(dāng)我談vim映射時,我談些什么

GHOST_349178 / 3149人閱讀

摘要:注意不僅能映射單個鍵,還能映射一組鍵,比如臉滾鍵盤。通過命令可以顯示當(dāng)前鍵映射的情況。表示不允許映射的結(jié)果參與其他的映射規(guī)則的匹配。當(dāng)然也有用武之地,比如當(dāng)你需要映射的結(jié)果來觸發(fā)另一個映射時,就用得上了。

映射功能是當(dāng)下各大編輯器的標(biāo)配,如果你想要熟悉所用的編輯器,必然不能缺少對它的映射機制的學(xué)習(xí)。對于vim亦是如此。

這里說到的映射功能,指的是編輯器會捕獲用戶的輸入,并且按照事先的設(shè)置來執(zhí)行某些動作。

基礎(chǔ)

在vim里面自定義一個映射,格式如下:

maptype key action

如:

inoremap jk  " 在insert模式下映射jk為Ctrl+[,也即進(jìn)入normal模式

maptype表示映射的類型,分為兩大類,帶nore的和不帶nore的(具體意義稍后再談)……每一類中,根據(jù)映射的可用范圍再分成若干類,具體類型通過:help map-overview可以查到。這里列舉下重要的幾類:

map: 在所有模式下可用的映射

vmap:在visual和select模式下可用的映射

nmap:在normal模式下可用的映射

imap:在insert模式下可用的映射

omap:用于motion的一部分的映射。比如vw就是visual模式下選中一個詞,可以用omap定義類似于w這樣的動作操作符。

cmap:用于在命令行下(輸入:/之類后)可用的映射

key表示映射的鍵。什么樣的鍵可以被映射呢?基本上你在鍵盤上能看到的鍵都能被映射(實際情況并不如此理想,等會解釋)。如果你想映射特殊的鍵,比如,可不能就直接打個上去,而要使用來表示。各種特殊符號具體的表示方式見:help key-notation。注意不僅能映射單個鍵,還能映射一組鍵,比如noremap afhaso; 臉滾鍵盤。

action就是映射出來的動作??梢允且淮址?,或者調(diào)用一個函數(shù),還可以是調(diào)用一個vim命令。這個就要看大家的想象力了。

進(jìn)階

從這里開始就要舉出更多映射的例子啦。

  

Notice! 不要說“為什么要這樣映射,XX鍵本來有YY功能,這樣做不對”之類的話,畢竟這個是關(guān)乎personal taste的事情。這里提醒下,在映射一組鍵之前,先看下這個鍵是不是已經(jīng)有默認(rèn)的功能了,然后看下這組鍵是否被映射了,再來決定要不要映射它。否則等到已經(jīng)習(xí)慣后,一旦想要改,也沒那么方便了。

  

通過:help命令查看某組鍵是否有系統(tǒng)默認(rèn)功能。
通過:map命令可以顯示當(dāng)前鍵映射的情況。

noremap VS map

noremap表示不允許映射的結(jié)果參與其他的映射規(guī)則的匹配。而map會使得映射的結(jié)果可以繼續(xù)匹配其他的映射規(guī)則。

舉個例子:

nnoremap ; :
nnoremap : ;

這里把;和:兩個符號互換了,因為在normal模式下,:用到的頻率比;高。假如這里用到的是nmap呢?那會導(dǎo)致vim卡上一段時間,直到你按下Ctrl+c或者拋出個錯誤。所以基本上都是用noremap作為映射。

當(dāng)然map也有用武之地,比如當(dāng)你需要映射的結(jié)果來觸發(fā)另一個映射時,就用得上map了。

cnoremap Or command

cnoremap會在命令行里起作用。
試一下輸入::cnoremap w!! w !sudo tee >/dev/null %
然后敲:進(jìn)入命令行,快速地敲出w!!,你會發(fā)現(xiàn)它展開成為w !sudo tee >/dev/null %。這就是cnoremap的效果了。

用cnoremap可以大大縮短常用命令的輸入時間。舉個例子,你可以使用cnoremap UE UltiSnipsEdit來代替敲入整個命令(或者多次敲打tab鍵)。不過前提是你的手速要足夠快……

其實為什么不用command呢(現(xiàn)在:help command看看)。你可以用command命令給某個命令做別名,這樣就不用依賴足夠快的手速了。

can map and can"t map

前面說過,實際上不是所有的鍵可以作為vim映射的鍵。這是因為要想觸發(fā)vim映射,你要讓vim捕獲到某一組鍵才行。但是有些鍵不會被傳遞給vim,可能半途就被其他程序偷吃掉了。這種情況在終端vim下特別明顯。因為終端會占用一些快捷鍵,而且有些特殊的鍵值,比如shift+tab,即使終端它自己不用,也不給vim使用(好過分喔)。所以到底某個鍵能不能拿來做映射,還是得試了才知道。

腦洞大開

在這一部分,我來分享些自己覺得有用的映射,但求拋磚引玉。

" 切換鼠標(biāo)模式和無鼠標(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)容
nnoremap sc :Ag! 
" 在新的tab里編輯當(dāng)前目錄下的其他文件
nnoremap  :tabedit =expand("%:p:h")/
" 快速開始一個全局替換
nnoremap s :%s///gc 
" 編輯shell文件時,調(diào)用man命令查看文檔
au FileType sh nnoremap m  :!man 

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/24800.html

相關(guān)文章

  • 當(dāng)我談Proxy與Adpater模式,我談什么

    摘要:適配器模式屬于兩種適應(yīng)設(shè)計模式中的其中一種,另外一種是迭代器模式,下次有機會再仔細(xì)聊聊它。設(shè)計模式的書很喜歡以電源適配器插頭作為適配器模式的范例范例,那么我們也從這個例子開始吧。 當(dāng)我談Proxy與Adpater模式時,我談些什么 前言 今天跟同事談起了一道面試題:Proxy模式跟Adpater模式的區(qū)別,這兩個設(shè)計模式都是很相似的模式,很多有點經(jīng)驗的程序員都可能會聊的頭頭是道,但是恐...

    incredible 評論0 收藏0
  • 當(dāng)我談緩存的候,我談什么

    摘要:對,當(dāng)談到緩存的時候,就是指那些設(shè)備,如瀏覽器,代理緩存服務(wù)器等。保持副本的新鮮服務(wù)器上的文本內(nèi)容隨時可能發(fā)生變化,如淘寶首頁的一個文件中需要增加記錄用戶點擊日志的功能,所以需要修改某個文件,以增加對應(yīng)的功能。 TL;DR 前面大段的內(nèi)容都是基本概念的介紹,建議沒時間的同學(xué)直接拖到最下面看。 Web 緩存是可以自動保存常見文檔副本的 HTTP 設(shè)備。對,當(dāng)談到緩存的時候,就是指那...

    Lsnsh 評論0 收藏0
  • 當(dāng)談?wù)摰?em>時,我談什么?

    摘要:示例代碼如下此示例中可以看出,當(dāng)?shù)鹘K止時,通過拋出異常告知迭代器已耗盡。但如果迭代器所指向的數(shù)據(jù)結(jié)構(gòu)在其存在時發(fā)生了插入或刪除操作,則迭代器將可能失效。與的情形類似,對進(jìn)行任何插入操作也將損壞迭代器。 花下貓語:之前說過,我對于編程語言跟其它學(xué)科的融合非常感興趣,但我還說漏了一點,就是我對于 Python 跟其它編程語言的對比學(xué)習(xí),也很感興趣。所以,我一直希望能聚集一些有其它語言基...

    王軍 評論0 收藏0
  • lodash源碼分析之自減的兩種形式

    摘要:作用與用法是的內(nèi)部函數(shù),之前在源碼分析之緩存介紹過一種這樣的數(shù)據(jù)結(jié)構(gòu)這是一個二維數(shù)組,每項中的第一項作為緩存對象的,第二項為緩存的值。 這個世界需要一個特定的惡人,可以供人們指名道姓,千夫所指:全都怪你?!迳洗簶洹懂?dāng)我談跑步時我談些什么》 本文為讀 lodash 源碼的第六篇,后續(xù)文章會更新到這個倉庫中,歡迎 star:pocket-lodash gitbook也會同步倉庫的更新...

    Keven 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<