迄今為止我們已經說了很多mappings的內容,但現在我們要再次實踐一下。mappings是 使得Vim編輯更為高效的方便快捷途徑之一,有必要多加用心。
有個概念在多個例子中出現過,但是我們都沒有明確解釋,那就是多字符mappings的連續性。
運行如下命令:
~~~
:nnoremap jk dd
~~~
確保你出于normal模式,快速輸入`jk`。Vim會刪除當前行。
現在試試先輸入`j`,停頓一下。如果你輸入`j`后沒有快速輸入`k`,Vim就會判定你不想 生效那個映射,而是將`j`按默認操作運行(下移一行)。
這個映射會給光標移動操作帶來麻煩,我們先刪除它。運行下面的命令:
~~~
:nunmap jk
~~~
現在normal模式下快速輸入`jk`會像往常一樣下移一行然后又上移一行。
## 一個更為復雜的Mapping
你已經見過很多簡單的mappings了,是時候看看一些復雜的了。運行下面的命令:
~~~
:nnoremap <leader>" viw<esc>a"<esc>hbi"<esc>lel
~~~
那是一個有趣的mappings!你自己可以先試試。進入normal模式,移動光標至一個單詞, 輸入`<leader>"`。Vim將那個單詞用雙引號包圍!
它是如何工作的呢?我們拆分這個映射并逐個解釋:
~~~
viw<esc>a"<esc>hbi"<esc>lel
~~~
* `viw`: 高亮選中單詞
* `<esc>`: 退出visual模式,此時光標會在單詞的最后一個字符上
* `a`: 移動光標至當前位置之?_后_?并進入insert模式
* `"`: 插入一個`"`
* `<esc>`: 返回到normal模式
* `h`: 左移一個字符
* `b`: 移動光標至單詞頭部
* `i`: 移動光標至當前位置之?_前_?并進入insert模式
* `"`: 插入一個`"`
* `<esc>`: 返回到normal模式
* `l`: 右移一個字符,光標置于單詞的頭部
* `e`: 移動光標至單詞尾部
* `l`: 右移一個字符,置光標位置在第一個添加的引號上
記住:因為我們使用的是`nnoremap`而不是`nmap`,所以盡管你映射了字符序列中的字符 也不會有影響。Vim會將其中的字符按默認功能執行。
希望你能看出Vim mappings的潛能及隨之引發的閱讀困難。
## Exercises
像剛才一樣創建一個mapping,用單引號而不是雙引號。
試試用`vnoremap`添加一個mapping,使其能夠用引號將你?_高亮選中_?的文本包裹。 你可能會需要```<``和```>``命令,所以先執行``:help `<``看看幫助文檔。
將normal模式下的`H`映射為移動到當前行的首部。`h`是左移,所以你可以認為`H`是 “加強版”的`h`、
將normal模式下的`L`映射為移動到當前行的尾部。`l`是右移,所以你可以認為`L`是 “加強版”的`l`、
讀取幫助文檔`:help H`和`:help L`看看你覆蓋了哪些命令。考慮考慮這會不會影響你。
將這些mappings添加到你的`~/.vimrc`文件中,確保用你的“編輯`~/.vimrc`”和“重讀`~/.vimrc`” 映射操作~
- 前言
- 鳴謝
- 預備知識
- 打印信息
- 設置選項
- 基本映射
- 模式映射
- 精確映射
- Leaders
- 編輯你的Vimrc文件
- Abbreviations
- 更多的Mappings
- 鍛煉你的手指
- 本地緩沖區的選項設置和映射
- 自動命令
- 本地緩沖區縮寫
- 自動命令組
- Operator-Pending映射
- 更多Operator-Pending映射
- 狀態條
- 負責任的編碼
- 變量
- 變量作用域
- 條件語句
- 比較
- 函數
- 函數參數
- 數字
- 字符串
- 字符串函數
- Execute命令
- Normal命令
- 執行normal!
- 基本的正則表達式
- 實例研究:Grep 運算符(Operator),第一部分
- 實例研究:Grep運算符(Operator),第二部分
- 實例研究:Grep運算符(Operator),第三部分
- 列表
- 循環
- 字典
- 切換
- 函數式編程
- 路徑
- 創建一個完整的插件
- 舊社會下的插件配置方式
- 新希望:用Pathogen配置插件
- 檢測文件類型
- 基本語法高亮
- 高級語法高亮
- 更高級的語法高亮
- 基本折疊
- 高級折疊
- 段移動原理
- Potion段移動
- 外部命令
- 自動加載
- 文檔
- 發布
- 還剩下什么?