diff --git a/.delimater.vim.swp b/.delimater.vim.swp index 5147311..16c663b 100644 Binary files a/.delimater.vim.swp and b/.delimater.vim.swp differ diff --git a/.delimitMate.vim.swp b/.delimitMate.vim.swp new file mode 100644 index 0000000..03190fe Binary files /dev/null and b/.delimitMate.vim.swp differ diff --git a/delimitMate.vim b/delimitMate.vim index f1b377d..042d653 100644 --- a/delimitMate.vim +++ b/delimitMate.vim @@ -22,50 +22,72 @@ " the sort of work that computers are for. " Init:{{{1 -if exists("loaded_annoying_delimiters") +if exists("loaded_delimitMate") " finish endif if v:version < 700 - echoerr "AnnoyingDelimiters: this plugin requires vim >= 7!" + echoerr "delimitMate: this plugin requires vim >= 7!" finish endif -let loaded_annoying_delimiters = 1 +let loaded_delimitMate = 1 -if !exists("g:annoyDelims_delims_list") - let s:delims = split (") } ] ' \" `") -else - let s:delims = g:annoyDelims_delims_list -endif - -if !exists("g:annoyDelims_autocomplete") +" Set user preferences:{{{2 +if !exists("g:delimitMate_autocomplete") let s:autocomplete = 1 else - let s:autocomplete = g:annoyDelims_autocomplete + let s:autocomplete = g:delimitMate_autocomplete endif -let s:paired_delims = split( &matchpairs, ',' ) -let s:quote_delims = split("\" ' ` ยด") -"let s:left_delims = [] -"let s:right_delims = [] +if !exists("g:delimitMate_paired_delims") + let s:paired_delims_temp = &matchpairs +else + let s:paired_delims_temp = g:delimitMate_paired_delims +endif -"for pair in s:paired_delims -"let pairl = split(pair,":") -"let s:left_delims = s:left_delims + pairl[0] -"let s:right_delims = s:right_delims + pairl[1] -"endfor +if !exists("g:delimitMate_quote_delims") + let s:quote_delims = split("\" ' `") +else + let s:quote_delims = g:delimitMate_quote_delims +endif -let s:left_delims = split(&matchpairs, ':.,\=') -let s:right_delims = split(&matchpairs, ',\=.:') +if !exists("g:delimitMate_leader") + let s:leader = "q" +else + let s:leader = g:delimitMate_leader +endif -let s:leader = "q" +if exists("g:delimitMate_expand_all") + let s:expand_space = g:delimitMate_expand_all +elseif exists("g:delimitMate_expand_space") + let s:expand_space = g:delimitMate_expand_space +else + let s:expand_space = 1 +endif + +if exists("g:delimitMate_expand_all") + let s:expand_return = g:delimitMate_expand_all +elseif exists("g:delimitMate_expand_return") + let s:expand_return = g:delimitMate_expand_return +else + let s:expand_return = 1 +endif + +let s:paired_delims = split(s:paired_delims_temp, ',') +let s:left_delims = split(s:paired_delims_temp, ':.,\=') +let s:right_delims = split(s:paired_delims_temp, ',\=.:') " Functions:{{{1 function! IsEmptyPair(str) - for pair in split( &matchpairs, ',' ) + [ "''", '""', '``' ] + for pair in s:paired_delims if a:str == join( split( pair, ':' ),'' ) return 1 endif endfor + for quote in s:quote_delims + if a:str == quote . quote + return 1 + endif + endfor return 0 endfunc @@ -124,20 +146,23 @@ endfunction call ResetMappings() if s:autocomplete == 0 " Don't auto-complete:{{{2 - let test_string = "Don't" - "inoremap ) SkipDelim(')') + + "inoremap ) SkipDelim('\)') for delim in s:right_delims + s:quote_delims exec 'imap ' . delim . ' SkipDelim("\' . delim . '")' endfor " Wrap the selection with delimiters: - "vmap q( visualmode() == "" ? "I(\" : "s(\\")\" let s:i = 0 while s:i < len(s:paired_delims) + + "vmap q( visualmode() == "" ? "I(\" : "s(\\")\" exec 'vmap ' . s:leader . s:left_delims[s:i] . \' visualmode() == "" ? "I' . s:left_delims[s:i] . \'\" : "s' . s:left_delims[s:i] . '\\"' . \s:right_delims[s:i] . '\"' + + "vmap q) visualmode() == "" ? "A\" : "s(\\")\" exec 'vmap ' . s:leader . s:right_delims[s:i] . \' visualmode() == "" ? "I' . s:left_delims[s:i] . \'\" : "s' . s:left_delims[s:i] . '\\"' . @@ -145,6 +170,7 @@ if s:autocomplete == 0 let s:i = s:i + 1 endwhile + "vmap q" visualmode() == "" ? "I"\" : "s"\\""\" for quote in s:quote_delims exec 'vmap ' . s:leader . quote . \' visualmode() == "" ? "I' . quote . @@ -153,59 +179,69 @@ if s:autocomplete == 0 else " Do auto-complete:{{{2 - let test_string = "Do" + + "imap ( () let s:i = 0 while s:i < len(s:paired_delims) exec 'imap ' . s:left_delims[s:i] . ' ' . s:left_delims[s:i] . s:right_delims[s:i] . '' let s:i = s:i + 1 endwhile - "imap ( () - "imap [ [] - "imap { {} - "autocmd Syntax html,vim imap < > - "let test_list = [] + + "imap " =QuoteDelim("\"") let s:i = 0 for delim in s:quote_delims exec 'imap ' . delim . ' =QuoteDelim("\' . delim . '")' endfor + + "imap ) =ClosePair(')') for delim in s:right_delims exec 'imap ' . delim . ' =ClosePair("\' . delim . '")' endfor - "imap " =QuoteDelim('"') - "imap ' =QuoteDelim("'") - "imap ) =ClosePair(')') - "imap ] =ClosePair(']') - "imap } =ClosePair('}') " Wrap the selection with delimiters: - "vmap q( visualmode() == "" ? "I(\" : "s()\\"\" let s:i = 0 while s:i < len(s:paired_delims) + "vmap q( visualmode() == "" ? "I(\" : "s()\\"\" exec 'vmap ' . s:leader . s:left_delims[s:i] . ' visualmode() == "" ? "I' . s:left_delims[s:i] . '\" : "s' . s:left_delims[s:i] . s:right_delims[s:i] . '\\"\"' - exec 'vmap ' . s:leader . s:right_delims[s:i] . ' visualmode() == "" ? "I' . s:left_delims[s:i] . '\" : "s' . s:left_delims[s:i] . s:right_delims[s:i] . '\\"\"' + + "vmap q) visualmode() == "" ? "A)\" : "s"\\""\" + exec 'vmap ' . s:leader . s:right_delims[s:i] . ' visualmode() == "" ? "A' . s:left_delims[s:i] . '\" : "s' . s:left_delims[s:i] . s:right_delims[s:i] . '\\"\"' let s:i = s:i + 1 endwhile for quote in s:quote_delims - exec 'vmap ' . s:leader . quote . - \' visualmode() == "" ? "I' . quote . - \'\" : "s' . quote . '\\"' . quote . '\"' + if quote == '"' + " Ugly fix for double quotes: + "vmap q" visualmode() == "" ? 'I\"' : "s\"\\"\" + exec 'vmap ' . s:leader . '" visualmode() == "" ? ' . + \ "'I\\\"' : " . + \ '"s\"\\"\"' + else + + "vmap q' visualmode() == "" ? "I\\'\\\\" : "s'\\"'\" + exec 'vmap ' . s:leader . quote . + \ ' visualmode() == "" ? "I\\' . quote . + \ '\\\\" : "s' . quote . + \ '\\"' . quote . '\"' + endif endfor - "vmap ( `>a)` - "vmap ) `>a)` - "vmap { `>a}` - "vmap } `>a}` - "vmap " `>a"` - "vmap ' `>a'` - "vmap ` `>a`` - "vmap [ `>a]` - "vmap ] `>a]` - - endif -" Expansions:{{{2 -imap WithinEmptyPair() ? "\\\" : "\" -imap WithinEmptyPair() ? "\\\" : "\" -imap WithinEmptyPair() ? "\\\" : "\" -" vim:foldmethod=marker:foldcolumn=2 +" Expansions and Deletion:{{{2 + +" If pair is empty, delete both delimiters: +imap WithinEmptyPair() ? "\\\" : "\" + +" If pair is empty, expand the pair to three lines and place the cursor +" in the middle: +if s:expand_return + imap WithinEmptyPair() ? "\\\" : "\" +endif + +" If pair is emtpy, add a space to each side of the cursor: +if s:expand_space + imap WithinEmptyPair() ? "\\\" : "\" +endif + +"}}}1 +" vim:foldmethod=marker:foldcolumn=4