如果說Vimscript有一個特性使得你能夠按照你的意愿定制Vim,那就非鍵盤映射莫屬。 你可以通過鍵盤映射告訴Vim:
> 當我按下這個鍵時,我需要你放棄默認操作,按我的想法做。
我們先從normal模式的鍵盤映射開始。我們將在下一章節討論insert模式和其他模式下的 鍵盤映射。
隨意在文本中敲寫幾行文字,然后運行命令:
~~~
:map - x
~~~
將光標置于文本中的某處,按下`-`。注意Vim刪除了當前光標下的字符,就好像你按了`x`一樣。
我們本來就有個按鍵用于 "刪除當前光標下的字符" ,所以我們將`-`重新映射到稍微有用的 功能。執行命令:
~~~
:map - dd
~~~
現在移動光標到任意一行,再按下`-`,這次Vim刪除了整行的文本,因為`dd`的功能就是刪除整行。
## 特殊字符
你可以使用`<keyname>`告訴Vim一個特殊的按鍵。嘗試如下命令:
~~~
:map <space> viw
~~~
移動光標到一個單詞上,按下空格鍵。Vim將高亮選中整個單詞。
你也可以映射修飾鍵入Ctrl和Alt。執行:
~~~
:map <c-d> dd
~~~
現在在鍵盤上按下`Ctrl+d`將執行`dd`命令。
## 注釋
還記得我們在第一章討論的注釋么?鍵盤映射就無法使用注釋。嘗試如下命令:
~~~
:map <space> viw " Select word
~~~
現在你再按下空格鍵,一些恐怖的事情就會發生。想一想為什么會這樣呢?
當你按下空格鍵時,Vim認為你是想執行命令`viw<space>"<space>Select<space>word`。 很明顯,這不是你的本意。
如果你仔細查看了這個映射的結果,可能你會發現一些奇怪的事。利用幾分鐘時間, 弄明白使用這個映射時到底發生了什么,以及?_為什么_?會是那樣的結果。
暫時搞不明白也不要擔心,我們很快就會再次談論這個問題。
## 練習
映射按鍵`-`為 "刪除當前行,然后將其粘貼到下一行" 。然后你就可以一次按鍵就將一行 文本移動到下一行。
將那個映射命令添加到你的`~/.vimrc`文件中,以后每次啟動Vim你都可以使用那個映射了。
試試如何映射按鍵`_`,使其將當前行上移一行。
將這個映射也加到你的的`~/.vimrc`文件中。
想想如果你想取消一個映射或重置一個按鍵為默認功能時該怎么操作。
- 前言
- 鳴謝
- 預備知識
- 打印信息
- 設置選項
- 基本映射
- 模式映射
- 精確映射
- Leaders
- 編輯你的Vimrc文件
- Abbreviations
- 更多的Mappings
- 鍛煉你的手指
- 本地緩沖區的選項設置和映射
- 自動命令
- 本地緩沖區縮寫
- 自動命令組
- Operator-Pending映射
- 更多Operator-Pending映射
- 狀態條
- 負責任的編碼
- 變量
- 變量作用域
- 條件語句
- 比較
- 函數
- 函數參數
- 數字
- 字符串
- 字符串函數
- Execute命令
- Normal命令
- 執行normal!
- 基本的正則表達式
- 實例研究:Grep 運算符(Operator),第一部分
- 實例研究:Grep運算符(Operator),第二部分
- 實例研究:Grep運算符(Operator),第三部分
- 列表
- 循環
- 字典
- 切換
- 函數式編程
- 路徑
- 創建一個完整的插件
- 舊社會下的插件配置方式
- 新希望:用Pathogen配置插件
- 檢測文件類型
- 基本語法高亮
- 高級語法高亮
- 更高級的語法高亮
- 基本折疊
- 高級折疊
- 段移動原理
- Potion段移動
- 外部命令
- 自動加載
- 文檔
- 發布
- 還剩下什么?