用過Sublime的都知道,寫引號、括號之類配對的文字時,它都會智能的自動補全另外一邊括號。 一樣,VIM也有不少實現它的插件。git
其中比較輕量好用的有autoclose
和auto-pairs
,而auto-pairs更智能、更全面。github
官方Repo的介紹很清楚的解釋了每種用法,掃一眼就都明白了。vim
這裏記錄一些高級的問題。app
<M-e>
鍵的問題初看,並不明白<M>在鍵盤上是什麼?Google了好久也查不到。最後終於在查關鍵字Vim Key Notation
發現了,原來<M>
表明Meta key
,在不少終端或平臺是不支持的。偶爾有支持的,那就是Alt鍵。這個時候,它和<A-..>
是一樣的意思。插件
可是,自動補全括號中,有一個fast wrap
功能,須要用到<M-e>
鍵,即Alt-e
鍵。但是無論怎麼按,在insert仍是normal模式按,都只會輸出一個奇怪符號´
,而不執行命令。code
爲何? 由於Alt
快捷鍵,在不少Terminal或平臺都是不支持的,好比Mac的終端。orm
通過一番查詢,Mac的iTerm2能夠將Alt(Option)鍵映射爲Meta鍵。 位置爲:Preference -> Profiles -> Keys -> Left Option key -> ESC+
.blog
而後就能解決fast wrap的問題了,效果如官方解釋同樣很是方便:rem
input: |'hello' (press (<M-e> at |) output: ('hello') wrap string, only support c style string input: |'h\\el\'lo' (press (<M-e> at |) output ('h\\ello\'') input: |[foo, bar()] (press (<M-e> at |) output: ([foo, bar()])
除了<M-e>
即Alt-e
外,還有不少自動補全括號引號的按鍵:
System Shortcuts: <CR> : Insert new indented line after return if cursor in blank brackets or quotes. <BS> : Delete brackets in pair <M-p> : Toggle Autopairs (g:AutoPairsShortcutToggle) <M-e> : Fast Wrap (g:AutoPairsShortcutFastWrap) <M-n> : Jump to next closed pair (g:AutoPairsShortcutJump) <M-b> : BackInsert (g:AutoPairsShortcutBackInsert) If <M-p> <M-e> or <M-n> conflict with another keys or want to bind to another keys, add let g:AutoPairsShortcutToggle = '<another key>' to .vimrc, if the key is empty string '', then the shortcut will be disabled.
若是Alt鍵太難按,也能夠設置mapping如:
imap <C-d>e <M-e>
,也就是按Ctrl-d
,再按e便可。imap <C-d>p <M-p>
,也就是按Ctrl-d
,再按p便可。 或者:imap <C-d> <Meta>
,那麼以後就都同樣了,只要按Ctrl-d
,再按e/p/n/b/{等等注意:設置映射時候,不能用inoremap
了,實踐中,只有imap
才能生效。
一開始很是奇怪,在我寫一個*.json
文件時候,每次輸完一對引號,在其中輸入數字時候,全部引號就所有消失。一開始覺得是bug,結果發現是插件有意爲之! 也就是說,auto-pairs
等多種插件,都會爲了方便閱讀,自動幫你隱藏JSON中的引號,讓它看起來更簡介,更像YAML文件。