Vimscript Leaders

2018-02-24 16:02 更新

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

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

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

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

映射按鍵序列

不像Emacs,Vim可以映射多個按鍵。運行下面命令:

:nnoremap -d dd
:nnoremap -c ddO

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

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

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

Leader

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

:let mapleader = "-"

你可以替換-為你喜歡的按鍵。盡管會屏蔽一個有用的功能,但我個人使用的是,,因為這個鍵比較 比較容易按到。

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

:nnoremap <leader>d dd

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

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

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

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

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

Local Leader

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

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

:let maplocalleader = "\\"

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

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

如果你不喜歡反斜線,請隨意更改它。

練習(xí)

閱讀:help mapleader

閱讀:help maplocalleader。

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

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

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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號