Vim-Auto-pairs總結

用過Sublime的都知道,寫引號、括號之類配對的文字時,它都會智能的自動補全另外一邊括號。 一樣,VIM也有不少實現它的插件。git

其中比較輕量好用的有autocloseauto-pairs,而auto-pairs更智能、更全面。github

參考官網:jiangmiao/auto-pairsjson

官方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

image

而後就能解決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自動補全問題

一開始很是奇怪,在我寫一個*.json文件時候,每次輸完一對引號,在其中輸入數字時候,全部引號就所有消失。一開始覺得是bug,結果發現是插件有意爲之! 也就是說,auto-pairs等多種插件,都會爲了方便閱讀,自動幫你隱藏JSON中的引號,讓它看起來更簡介,更像YAML文件。

相關文章
相關標籤/搜索