我們已經學了一種不會讓我們發狂的鍵盤映射方法,但是你可以注意到另外一個問題。
每次我們像`:nnoremap <space> dd`這樣映射一個按鍵都會覆蓋掉`<space>`的原有功能。 如果哪天我們想用`<space>`了,怎么辦?
有些按鍵你平常使用并不需要用到。你幾乎永遠不會用到`-`、?`H`、`L`、`<space>`、`<cr>`?和`<bs>`這些按鍵的功能(當然,是在normal模式下)。依據你的工作方式,可能還有其他你 不會用到的按鍵。
這些按鍵都可以隨意映射,但是只有這6個按鍵貌似不夠吧。難道為Vim稱道的可定制傳說 有問題?
## 映射按鍵序列
不像Emacs,Vim可以映射多個按鍵。運行下面命令:
~~~
:nnoremap -d dd
:nnoremap -c ddO
~~~
norma模式下快讀敲入?`-d`或`-c`查看效果。第一個映射作用是刪除一行,第二個是 刪除一行并進入insert模式。
這就意味著你可以用一個你不常用的按鍵(如`-`)作為“前綴”,后接其它字符作為一個整體 進行映射。你需要多敲一個按鍵以執行這些映射,多一個按鍵而已,很容易就記住了。
如果你也認為這是個好方法,我可以告訴你,Vim已經支持這種機制。
## Leader
我們稱這個“前綴”為“leader”。你可以按你的喜好設置你的leader鍵。運行命令:
~~~
:let mapleader = "-"
~~~
你可以替換`-`為你喜歡的按鍵。盡管會屏蔽一個有用的功能,但我個人使用的是`,`,因為這個鍵比較 比較容易按到。
當你創建新的映射時,你可以使用`<leader>`表示“我設置的leader按鍵”。運行命令:
~~~
:nnoremap <leader>d dd
~~~
現在試試按下你的leader按鍵和`d`。Vim會刪除當前行。
然而為何每次都要繁瑣的設置`<leader>`?為什么創建映射時不直接敲入你的“前綴”按鍵? 原因主要有三個。
首先,你某天可能會想要更換你的“leader”。在一個地方定義它使得更方便更換它。
第二,其他人看你的`~/.vimrc`文件時,一旦看到`<leader>`就能夠立即知道你的用意。如果他們 喜歡你的`~/.vimrc`配置,即使他們使用不同的leader也可以簡單的復制你的映射配置。
最后,許多Vim插件都會創建以`<leader>`開頭的映射。如果你已經設置了leader,你會更容易上手 使用那些插件。
## Local Leader
Vim有另外一個“leader”成為“local leader“。這個leader用于那些只對某類文件 (如Python文件、HTML文件)而設置的映射。
本書將在后續章節講述如何為特定類型的文件創建映射,但你可以現在創建一個“localleader”:
~~~
:let maplocalleader = "\\"
~~~
注意我們使用`\\`而不是`\`,因為`\`在Vimscript中是轉義字符。我們將在后續章節 講到這個。
現在你就可以在映射中使用`<localleader>`了,使用方法和`<leader>`一樣(當然, 你要使用另外一個前綴)。
如果你不喜歡反斜線,請隨意更改它。
## 練習
閱讀`:help mapleader`。
閱讀`:help maplocalleader`。
在你的`~/.vimrc`文件中設置`mapleader`和`maplocalleader`。
增加`<leader>`前綴到之前章節中你添加到`~/.vimrc`文件中的映射命令, 防止那些映射覆蓋了默認的按鍵作用。
- 前言
- 鳴謝
- 預備知識
- 打印信息
- 設置選項
- 基本映射
- 模式映射
- 精確映射
- Leaders
- 編輯你的Vimrc文件
- Abbreviations
- 更多的Mappings
- 鍛煉你的手指
- 本地緩沖區的選項設置和映射
- 自動命令
- 本地緩沖區縮寫
- 自動命令組
- Operator-Pending映射
- 更多Operator-Pending映射
- 狀態條
- 負責任的編碼
- 變量
- 變量作用域
- 條件語句
- 比較
- 函數
- 函數參數
- 數字
- 字符串
- 字符串函數
- Execute命令
- Normal命令
- 執行normal!
- 基本的正則表達式
- 實例研究:Grep 運算符(Operator),第一部分
- 實例研究:Grep運算符(Operator),第二部分
- 實例研究:Grep運算符(Operator),第三部分
- 列表
- 循環
- 字典
- 切換
- 函數式編程
- 路徑
- 創建一個完整的插件
- 舊社會下的插件配置方式
- 新希望:用Pathogen配置插件
- 檢測文件類型
- 基本語法高亮
- 高級語法高亮
- 更高級的語法高亮
- 基本折疊
- 高級折疊
- 段移動原理
- Potion段移動
- 外部命令
- 自動加載
- 文檔
- 發布
- 還剩下什么?