現在我們先花點時間復習一下我們已經談論過的三個東西:映射(mappings),縮寫(abbreviations)和選項設置(options),這個過程中會講到一些新的東西。我們將在一個單一的緩沖區中同時設置它們。
這一章所講到的東西會在下一章中真正的顯示它們的作用,目前我們只需先打下基礎。
在這一章中你需要在Vim中打開兩個文件,兩個文件是分開的。我先將它們命名為`foo`和`bar`,你可以隨便對它們命名。然后為每個文件輸入一些文字。
## 映射
選擇文件`foo`,然后執行下面的命令:
~~~
:nnoremap <leader>d dd
:nnoremap <buffer> <leader>x dd
~~~
現在保持在文件`foo`下面,確保當前處于常用模式下,然后敲擊`<leader>d`。Vim會刪除一行。這個之前講到過,沒什么新鮮的。
仍然保持在文件`foo`下面,敲擊`<leader>x`。Vim也會刪除一行。這很正常,因為我們也將`<leader>x`映射到`dd`了。
現在切換到文件`bar`。在常用模式下敲擊`<leader>d`。同樣的,Vim會刪除當前行,也沒有什么新鮮的。
ok,現在來點新鮮的:在文件`bar`下敲擊`<leader>x`。
Vim只刪除了一個字符,而不是刪除整個行! 為什么會這樣?
第二個`nnoremap`命令中的`<buffer>`告訴Vim這個映射只在定義它的那個緩沖區中有效:
當你在`bar`文件下敲擊`<leader>x`,Vim找不到一個跟它匹配的映射,它將會被解析了兩個命令:`<leader>`(這個什么都不會干)和?`x`(通常會刪除一個字符)。
## 本地Leader
在這個例子中,`<leader>x`是一個本地緩沖區映射,不過這種定義方式并不合適。如果我們需要設定一個只會用于特定緩沖區的映射,一般會使用`<localleader>`,而不是`<leader>`。
使用兩種不同的leader按鍵就像設置了一種命名空間,這會幫助你保證所有不同的映射對你而言更加清晰直接。
但你在編寫一個會被其他人用到的插件的時候,這點顯得尤其重要。使用`<localleader>`來設置本地映射會防止你的插件覆蓋別人用`<leader>`設置的全局映射,因為他們可能已經對他們做設置的全局映射非常之習慣了。
## 設置
在這本書的前面幾個章節里,我們談論了使用`set`來設置選項。有一些選項總是會適用于整個Vim,但是有些選項可以基于緩沖區進行設置。
切回到文件`foo`,執行下面的命令:
~~~
:setlocal wrap
~~~
然后切換到文件`bar`,執行下面的命令:
~~~
:setlocal nowrap
~~~
把你的Vim窗口調小一些,你會發現有些行在`foo`中會自動換行,而在`bar`中則不會。
讓我們來測試下另外一個選項。切換到`foo`執行下面的命令:
~~~
:setlocal number
~~~
現在切換到`bar`,然后執行下面的命令:
~~~
:setlocal nonumber
~~~
現在在文件`foo`中會出現行號,而在`bar`則沒有。
不是所有的選項都可以使用`setlocal`進行設置。如果你想知道某個特定的選項是否可以設置為本地選項,執行`:help`查看它的幫助文檔。
對于本地選項如何_真正地_地工作,我說的有些簡略。在練習中你會學到更多這方面的細節。
## 遮蓋
ok,在開始下一節之前,我們先來看關于本地映射的一個非常有趣的特性。切換到文件`foo`,然后執行下面的命令:
~~~
:nnoremap <buffer> Q x
:nnoremap Q dd
~~~
然后敲擊`Q`,看看會發生什么?
當你敲擊`Q`,Vim會執行第一個映射,而不是第二個,因為第一個映射比起第二個要顯得_更具體_,這可以看成第二個映射被第一個映射遮蓋了。
切換回文件`bar`,然后敲擊`Q`,Vim會使用第二個映射。這是因為在這個緩沖區中第二個映射沒有被第一個映射遮蓋。
## 練習
閱讀`:help local-options`。
閱讀`:help setlocal`。
閱讀`:help map-local`。
- 前言
- 鳴謝
- 預備知識
- 打印信息
- 設置選項
- 基本映射
- 模式映射
- 精確映射
- Leaders
- 編輯你的Vimrc文件
- Abbreviations
- 更多的Mappings
- 鍛煉你的手指
- 本地緩沖區的選項設置和映射
- 自動命令
- 本地緩沖區縮寫
- 自動命令組
- Operator-Pending映射
- 更多Operator-Pending映射
- 狀態條
- 負責任的編碼
- 變量
- 變量作用域
- 條件語句
- 比較
- 函數
- 函數參數
- 數字
- 字符串
- 字符串函數
- Execute命令
- Normal命令
- 執行normal!
- 基本的正則表達式
- 實例研究:Grep 運算符(Operator),第一部分
- 實例研究:Grep運算符(Operator),第二部分
- 實例研究:Grep運算符(Operator),第三部分
- 列表
- 循環
- 字典
- 切換
- 函數式編程
- 路徑
- 創建一個完整的插件
- 舊社會下的插件配置方式
- 新希望:用Pathogen配置插件
- 檢測文件類型
- 基本語法高亮
- 高級語法高亮
- 更高級的語法高亮
- 基本折疊
- 高級折疊
- 段移動原理
- Potion段移動
- 外部命令
- 自動加載
- 文檔
- 發布
- 還剩下什么?