Vimscript Leaders

2018-02-24 16:02 更新

我們已經(jīng)學(xué)了一種不會(huì)讓我們發(fā)狂的鍵盤映射方法,但是你可以注意到另外一個(gè)問題。

每次我們像:nnoremap <space> dd這樣映射一個(gè)按鍵都會(huì)覆蓋掉<space>的原有功能。 如果哪天我們想用<space>了,怎么辦?

有些按鍵你平常使用并不需要用到。你幾乎永遠(yuǎn)不會(huì)用到-、?HL、<space>、<cr>?和<bs>這些按鍵的功能(當(dāng)然,是在normal模式下)。依據(jù)你的工作方式,可能還有其他你 不會(huì)用到的按鍵。

這些按鍵都可以隨意映射,但是只有這6個(gè)按鍵貌似不夠吧。難道為Vim稱道的可定制傳說 有問題?

映射按鍵序列

不像Emacs,Vim可以映射多個(gè)按鍵。運(yùn)行下面命令:

:nnoremap -d dd
:nnoremap -c ddO

norma模式下快讀敲入?-d-c查看效果。第一個(gè)映射作用是刪除一行,第二個(gè)是 刪除一行并進(jìn)入insert模式。

這就意味著你可以用一個(gè)你不常用的按鍵(如-)作為“前綴”,后接其它字符作為一個(gè)整體 進(jìn)行映射。你需要多敲一個(gè)按鍵以執(zhí)行這些映射,多一個(gè)按鍵而已,很容易就記住了。

如果你也認(rèn)為這是個(gè)好方法,我可以告訴你,Vim已經(jīng)支持這種機(jī)制。

Leader

我們稱這個(gè)“前綴”為“l(fā)eader”。你可以按你的喜好設(shè)置你的leader鍵。運(yùn)行命令:

:let mapleader = "-"

你可以替換-為你喜歡的按鍵。盡管會(huì)屏蔽一個(gè)有用的功能,但我個(gè)人使用的是,,因?yàn)檫@個(gè)鍵比較 比較容易按到。

當(dāng)你創(chuàng)建新的映射時(shí),你可以使用<leader>表示“我設(shè)置的leader按鍵”。運(yùn)行命令:

:nnoremap <leader>d dd

現(xiàn)在試試按下你的leader按鍵和d。Vim會(huì)刪除當(dāng)前行。

然而為何每次都要繁瑣的設(shè)置<leader>?為什么創(chuàng)建映射時(shí)不直接敲入你的“前綴”按鍵? 原因主要有三個(gè)。

首先,你某天可能會(huì)想要更換你的“l(fā)eader”。在一個(gè)地方定義它使得更方便更換它。

第二,其他人看你的~/.vimrc文件時(shí),一旦看到<leader>就能夠立即知道你的用意。如果他們 喜歡你的~/.vimrc配置,即使他們使用不同的leader也可以簡(jiǎn)單的復(fù)制你的映射配置。

最后,許多Vim插件都會(huì)創(chuàng)建以<leader>開頭的映射。如果你已經(jīng)設(shè)置了leader,你會(huì)更容易上手 使用那些插件。

Local Leader

Vim有另外一個(gè)“l(fā)eader”成為“l(fā)ocal leader“。這個(gè)leader用于那些只對(duì)某類文件 (如Python文件、HTML文件)而設(shè)置的映射。

本書將在后續(xù)章節(jié)講述如何為特定類型的文件創(chuàng)建映射,但你可以現(xiàn)在創(chuàng)建一個(gè)“l(fā)ocalleader”:

:let maplocalleader = "\\"

注意我們使用\\而不是\,因?yàn)?code>\在Vimscript中是轉(zhuǎn)義字符。我們將在后續(xù)章節(jié) 講到這個(gè)。

現(xiàn)在你就可以在映射中使用<localleader>了,使用方法和<leader>一樣(當(dāng)然, 你要使用另外一個(gè)前綴)。

如果你不喜歡反斜線,請(qǐng)隨意更改它。

練習(xí)

閱讀:help mapleader。

閱讀:help maplocalleader。

在你的~/.vimrc文件中設(shè)置mapleadermaplocalleader。

增加<leader>前綴到之前章節(jié)中你添加到~/.vimrc文件中的映射命令, 防止那些映射覆蓋了默認(rèn)的按鍵作用。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)