Vim有個稱為"abbreviations"的特性,與映射有點類似,但是它用于insert、replace和 command模式。這個特性靈活且強大,不過本節只會談及最常用的用法。
本書只會講述insert模式下的abbreviations。運行如下命令:
~~~
:iabbrev adn and
~~~
進入insert模式并輸入:
~~~
One adn two.
~~~
在輸入`adn`之后輸入空格鍵,Vim會將其替換為`and`。
諸如這樣的輸入糾錯是abbreviations的一個很實用的用法。運行命令:
~~~
:iabbrev waht what
:iabbrev tehn then
~~~
再次進入insert模式并輸入:
~~~
Well, I don't know waht we should do tehn.
~~~
注意?_兩個_?abbreviations的替換時機,第二個沒有輸入空格卻也替換了。
## Keyword Characters
緊跟一個abbreviation輸入"non-keyword character"后Vim會替換那個abbreviation。 "non-keyword character"指那些不在`iskeyword`選項中的字符。運行命令:
~~~
:set iskeyword?
~~~
你將看到類似于`iskeyword=@,48-57,_,192-255`的結果。這個格式很復雜,但本質上 "keyword characters"包含一下幾種:
* 下劃線字符 (`_`).
* 所有字母字符,包括大小寫。
* ASCII值在48到57之間的字符(數字0-9)。
* ASCII值在192到255之間的字符(一些特殊ASCII字符)。
如果你想閱讀這個選項格式的?_完整_?描述,你可以運行命令`:help isfname`,另外 閱讀之前最好準備點吃的。
你只要記住輸入非字母、數字、下劃線的字符就會引發abbreviations替換。
## 更多關于abbreviations
Abbreviations不僅僅只能糾錯筆誤。我們可以加幾個日常編輯中常用的abbreviations。 運行如下命令:
~~~
:iabbrev @@ steve@stevelosh.com
:iabbrev ccopy Copyright 2013 Steve Losh, all rights reserved.
~~~
隨意更換我的名字和郵箱地址為你的,然后試試這兩個abbreviations吧~
這些abbreviations將你常用的一長串字符壓縮至幾個字符,省的每次都要那么麻煩。
Why Not Use Mappings? 為什么不用Mappings?
* * *
不錯,abbreviations和mappings很像,但是他們的定位不同。看個例子:
運行命令:
~~~
:inoremap ssig -- <cr>Steve Losh<cr>steve@stevelosh.com
~~~
這個?_mapping_?用于快速插入你的簽名。進入insert模式并輸入`ssig`試試看。
看起來一切正常,但是還有個問題。進入insert模式并輸入如下文字:
~~~
Larry Lessig wrote the book "Remix".
~~~
注意到Vim將Larry名字中的`ssig`也替換了!mappings不管被映射字符串的前后字符是什么-- 它只在文本中查找指定的字符串并替換他們。
運行下面的命令刪除上面的mappings并用一個abbreviation替換它:
~~~
:iunmap ssig
:iabbrev ssig -- <cr>Steve Losh<cr>steve@stevelosh.com
~~~
再次試試這個abbreviation。
這次Vim會注意`ssig`的前后字符,只會在需要的時候替換它。
## Exercises
在你的`~/.vimrc`文件中為經常拼寫錯誤的單詞增加abbreviations配置。一定要使用 上一章中你創建的mappings來重新打開讀取`~/.vimrc`文件。
為你的郵箱地址、博客網址、簽名添加abbreviations配置。
為你經常輸入的文本添加abbreviations配置。
- 前言
- 鳴謝
- 預備知識
- 打印信息
- 設置選項
- 基本映射
- 模式映射
- 精確映射
- Leaders
- 編輯你的Vimrc文件
- Abbreviations
- 更多的Mappings
- 鍛煉你的手指
- 本地緩沖區的選項設置和映射
- 自動命令
- 本地緩沖區縮寫
- 自動命令組
- Operator-Pending映射
- 更多Operator-Pending映射
- 狀態條
- 負責任的編碼
- 變量
- 變量作用域
- 條件語句
- 比較
- 函數
- 函數參數
- 數字
- 字符串
- 字符串函數
- Execute命令
- Normal命令
- 執行normal!
- 基本的正則表達式
- 實例研究:Grep 運算符(Operator),第一部分
- 實例研究:Grep運算符(Operator),第二部分
- 實例研究:Grep運算符(Operator),第三部分
- 列表
- 循環
- 字典
- 切換
- 函數式編程
- 路徑
- 創建一個完整的插件
- 舊社會下的插件配置方式
- 新希望:用Pathogen配置插件
- 檢測文件類型
- 基本語法高亮
- 高級語法高亮
- 更高級的語法高亮
- 基本折疊
- 高級折疊
- 段移動原理
- Potion段移動
- 外部命令
- 自動加載
- 文檔
- 發布
- 還剩下什么?