Auto Pairs ========== Insert or delete brackets, parens, quotes in pair. Installation ------------ copy plugin/auto-pairs.vim to ~/.vim/plugin Features -------- * Insert in pair input: [ output: [|] * Delete in pair input: foo[ output: foo * Insert new indented line after Return input: {|} (press at |) output: { | } * Insert spaces before closing characters, only for [], (), {} input: {|} (press at |) output: { | } input: {|} (press foo} at |) output: { foo }| input: '|' (press at |) output: ' |' * Skip ' when inside a word input: foo| (press ' at |) output: foo' * Skip closed bracket. input: [] output: [] * Ignore auto pair when previous character is \ input: "\' output: "\'" * Fast Wrap input: |'hello' (press ( at |) output: ('hello') wrap string, only support c style string input: |'h\\el\'lo' (press ( at |) output ('h\\ello\'') input: |[foo, bar()] (press ( at |) output: ([foo, bar()]) * Quick jump to closed pair. input: { something;| } (press } at |) output: { }| * Support ``` ''' and """ input: ''' output: '''|''' * Delete Repeated Pairs in one time input: """|""" (press at |) output: | input: {{|}} (press at |) output: | input: [[[[[[|]]]]]] (press at |) output: | * Fly Mode input: if(a[3) output: if(a[3])| (In Fly Mode) output: if(a[3)]) (Without Fly Mode) input: { hello();| world(); } (press } at |) output: { hello(); world(); }| (then press at | to do backinsert) output: { hello();}| world(); } See Fly Mode section for details Fly Mode -------- Fly Mode will always force closed-pair jumping instead of inserting. only for ")", "}", "]" If jumps in mistake, could use AutoPairsBackInsert(Default Key: ``) to jump back and insert closed pair. the most situation maybe want to insert single closed pair in the string, eg ")" Fly Mode is DISABLED by default. add **let g:AutoPairsFlyMode = 1** .vimrc to turn it on Default Options: let g:AutoPairsFlyMode = 0 let g:AutoPairsShortcutBackInsert = '' Shortcuts --------- System Shortcuts: : Insert new indented line after return if cursor in blank brackets or quotes. : Delete brackets in pair : Toggle Autopairs (g:AutoPairsShortcutToggle) : Fast Wrap (g:AutoPairsShortcutFastWrap) : Jump to next closed pair (g:AutoPairsShortcutJump) : BackInsert (g:AutoPairsShortcutBackInsert) If or conflict with another keys or want to bind to another keys, add let g:AutoPairShortcutToggle = '' to .vimrc, if the key is empty string '', then the shortcut will be disabled. Options ------- * g:AutoPairs Default: {'(':')', '[':']', '{':'}',"'":"'",'"':'"', '`':'`'} * b:AutoPairs Default: g:AutoPairs Buffer level pairs set. * g:AutoPairsShortcutToggle Default: '' The shortcut to toggle autopairs. * g:AutoPairsShortcutFastWrap Default: '' Fast wrap the word. all pairs will be consider as a block (include <>). (|)'hello' after fast wrap at |, the word will be ('hello') (|) after fast wrap at |, the word will be () * g:AutoPairsShortcutJump Default: '' Jump to the next closed pair * g:AutoPairsMapBS Default : 1 Map to delete brackets, quotes in pair execute 'inoremap =AutoPairsDelete()' * g:AutoPairsMapCR Default : 1 Map to insert a new indented line if cursor in (|), {|} [|], '|', "|" execute 'inoremap =AutoPairsReturn()' * g:AutoPairsCenterLine Default : 1 When g:AutoPairsMapCR is on, center current line after return if the line is at the bottom 1/3 of the window. * g:AutoPairsMapSpace Default : 1 Map to insert a space after the opening character and before the closing one. execute 'inoremap =AutoPairsSpace()' * g:AutoPairsFlyMode Default : 0 set it to 1 to enable FlyMode. see FlyMode section for details. * g:AutoPairsShortcutBackInsert Default : Work with FlyMode, insert the key at the Fly Mode jumped postion Buffer Level Pairs Setting -------------------------- Set b:AutoPairs before BufEnter eg: " When the filetype is FILETYPE then make AutoPairs only match for parenthesis au Filetype FILETYPE let b:AutoPairs = {"(": ")"} TroubleShooting --------------- The script will remap keys ([{'"}]) , If auto pairs cannot work, use :imap ( to check if the map is corrected. The correct map should be =AutoPairsInsert("\(") Or the plugin conflict with some other plugins. use command :call AutoPairsInit() to remap the keys. * How to insert parens purely There are 3 ways 1. use Ctrl-V ) to insert paren without trigger the plugin. 2. use Alt-P to turn off the plugin. 3. use DEL or x to delete the character insert by plugin. Known Issues ----------------------- There are the issues I cannot fix. Compatible with Vimwiki - [issue #19](https://github.com/jiangmiao/auto-pairs/issues/19) Description: When works with vimwiki `` will output `xx_CR()` Reason: vimwiki uses `` on mapping `` that auto-pairs cannot expanding. Solution A: Add " Copy from vimwiki.vim s:CR function for CR remapping function! VimwikiCR() let res = vimwiki#lst#kbd_cr() if res == "\" && g:vimwiki_table_mappings let res = vimwiki#tbl#kbd_cr() endif return res endfunction autocmd filetype vimwiki inoremap =VimwikiCR()=AutoPairsReturn() to .vimrc, it will make vimwiki and auto-pairs 'Return' feature works together. Solution B: add `let g:AutoPairsMapCR = 0` to .vimrc to disable `` mapping. Compatible with viki - [issue #25](https://github.com/jiangmiao/auto-pairs/issues/25) Description: When works with viki `` will output viki#ExprMarkInexistentInElement('ParagraphVisible','') Reason: viki uses `` on mapping `` that auto-pairs cannot expanding. Solution A: Add autocmd filetype viki inoremap =viki#ExprMarkInexistentInElement('ParagraphVisible',"\n")=AutoPairsReturn()` to .vimrc, it will make viki and auto-pairs works together. Solution B: add `let g:AutoPairsMapCR = 0` to .vimrc to disable `` mapping. Remarks: Solution A need NOT add `let g:AutoPairsMapCR = 0` to .vimrc, if Solution A still cannot work, then have to use Solution B to disable auto-pairs ``. Breaks '.' - [issue #3](https://github.com/jiangmiao/auto-pairs/issues/3) Description: After entering insert mode and inputing `[hello` then leave insert mode by ``. press '.' will insert 'hello' instead of '[hello]'. Reason: `[` actually equals `[]\` and \ will break '.' Solution: none Contributors ------------ * [camthompson](https://github.com/camthompson)