vim-unimpaired
git-svn-id: http://photonzero.com/dotfiles/trunk@74 23f722f6-122a-0410-8cef-c75bd312dd78
This commit is contained in:
parent
7b6979945f
commit
5523b70d21
3 changed files with 377 additions and 1 deletions
|
|
@ -5,6 +5,7 @@
|
||||||
(add-to-list 'load-path "~/.emacs.d")
|
(add-to-list 'load-path "~/.emacs.d")
|
||||||
(add-to-list 'load-path "~/.emacs.d/auto-complete")
|
(add-to-list 'load-path "~/.emacs.d/auto-complete")
|
||||||
(add-to-list 'load-path "~/.emacs.d/icicles")
|
(add-to-list 'load-path "~/.emacs.d/icicles")
|
||||||
|
(add-to-list 'load-path "~/.emacs.d/aquamacs-tabbar")
|
||||||
|
|
||||||
(require 'icicles)
|
(require 'icicles)
|
||||||
(icy-mode 1)
|
(icy-mode 1)
|
||||||
|
|
@ -13,7 +14,7 @@
|
||||||
(require 'vimpulse)
|
(require 'vimpulse)
|
||||||
(require 'color-theme)
|
(require 'color-theme)
|
||||||
(require 'color-theme-autoloads)
|
(require 'color-theme-autoloads)
|
||||||
(require 'tabbar)
|
(require 'aquamacs-tabbar)
|
||||||
;(require 'highlight-symbol)
|
;(require 'highlight-symbol)
|
||||||
(require 'auto-complete-config)
|
(require 'auto-complete-config)
|
||||||
|
|
||||||
|
|
|
||||||
101
.vim/bundle/vim-unimpaired/doc/unimpaired.txt
Normal file
101
.vim/bundle/vim-unimpaired/doc/unimpaired.txt
Normal file
|
|
@ -0,0 +1,101 @@
|
||||||
|
*unimpaired.txt* Pairs of handy bracket mappings
|
||||||
|
|
||||||
|
Author: Tim Pope <vimNOSPAM@tpope.org> *unimpaired-author*
|
||||||
|
License: Same terms as Vim itself (see |license|)
|
||||||
|
|
||||||
|
This plugin is only available if 'compatible' is not set.
|
||||||
|
|
||||||
|
INTRODUCTION *unimpaired*
|
||||||
|
|
||||||
|
This plugin provides several pairs of bracket maps.
|
||||||
|
|
||||||
|
NEXT AND PREVIOUS *unimpaired-next*
|
||||||
|
|
||||||
|
The following maps all correspond to normal mode commands. If a count is
|
||||||
|
given, it becomes an argument to the command. A mnemonic for the "a" commands
|
||||||
|
is "args" and for the "q" commands is "quickfix".
|
||||||
|
|
||||||
|
*[a* |:previous|
|
||||||
|
*]a* |:next|
|
||||||
|
*[A* |:first|
|
||||||
|
*]A* |:last|
|
||||||
|
*[b* |:bprevious|
|
||||||
|
*]b* |:bnext|
|
||||||
|
*[B* |:bfirst|
|
||||||
|
*]B* |:blast|
|
||||||
|
*[l* |:lprevious|
|
||||||
|
*]l* |:lnext|
|
||||||
|
*[L* |:lfirst|
|
||||||
|
*]L* |:llast|
|
||||||
|
*[q* |:cprevious|
|
||||||
|
*]q* |:cnext|
|
||||||
|
*[Q* |:cfirst|
|
||||||
|
*]Q* |:clast|
|
||||||
|
|
||||||
|
*[o*
|
||||||
|
[o Go to the file preceding the current one
|
||||||
|
alphabetically in the current file's directory.
|
||||||
|
|
||||||
|
*]o*
|
||||||
|
]o Go to the file succeeding the current one
|
||||||
|
alphabetically in the current file's directory.
|
||||||
|
|
||||||
|
LINE OPERATIONS *unimpaired-lines*
|
||||||
|
|
||||||
|
*[<Space>*
|
||||||
|
[<Space> Add [count] blank lines above the cursor.
|
||||||
|
|
||||||
|
*]<Space>*
|
||||||
|
]<Space> Add [count] blank lines below the cursor.
|
||||||
|
|
||||||
|
*[e* *v_[e*
|
||||||
|
[e Exchange the current line with [count] lines above it.
|
||||||
|
|
||||||
|
*]e* *v_]e*
|
||||||
|
]e Exchange the current line with [count] lines below it.
|
||||||
|
|
||||||
|
ENCODING AND DECODING *unimpaired-encoding*
|
||||||
|
|
||||||
|
Each of these operations has a map that takes a motion, a map that
|
||||||
|
targets [count] lines, and a visual mode map. The linewise variant integrates
|
||||||
|
with repeat.vim.
|
||||||
|
|
||||||
|
Mnenomic: encoding always comes before decoding; "[" always comes before "]".
|
||||||
|
|
||||||
|
*[x* *[xx* *v_[x*
|
||||||
|
[x{motion} XML encode.
|
||||||
|
[xx <foo bar="baz"> => <foo bar="baz">
|
||||||
|
{Visual}[x
|
||||||
|
|
||||||
|
*]x* *]xx* *v_]x*
|
||||||
|
]x{motion} XML decode. HTML entities are handled as well.
|
||||||
|
]xx
|
||||||
|
{Visual}]x
|
||||||
|
|
||||||
|
*[u* *[uu* *v_[u*
|
||||||
|
[u{motion} URL encode.
|
||||||
|
[uu foo bar => foo%20bar
|
||||||
|
{Visual}[u
|
||||||
|
|
||||||
|
*]u* *]uu* *v_]u*
|
||||||
|
]u{motion} URL decode.
|
||||||
|
]uu
|
||||||
|
{Visual}]u
|
||||||
|
|
||||||
|
*[y* *[yy* *v_[y*
|
||||||
|
[y{motion} C String encode. Backslash escape control
|
||||||
|
[yy characters, quotation marks, and backslashes.
|
||||||
|
{Visual}[y
|
||||||
|
|
||||||
|
*]y* *]yy* *v_]y*
|
||||||
|
]y{motion} C String decode.
|
||||||
|
]yy
|
||||||
|
{Visual}]y
|
||||||
|
|
||||||
|
TODO *unimpaired-todo*
|
||||||
|
|
||||||
|
Descend into and ascend from directories with |[o| and |]o|.
|
||||||
|
|
||||||
|
Avoid munging null characters when encoding and decoding.
|
||||||
|
|
||||||
|
vim:tw=78:et:ft=help:norl:
|
||||||
274
.vim/bundle/vim-unimpaired/plugin/unimpaired.vim
Normal file
274
.vim/bundle/vim-unimpaired/plugin/unimpaired.vim
Normal file
|
|
@ -0,0 +1,274 @@
|
||||||
|
" unimpaired.vim - Pairs of handy bracket mappings
|
||||||
|
" Maintainer: Tim Pope <vimNOSPAM@tpope.org>
|
||||||
|
" Version: 1.1
|
||||||
|
|
||||||
|
if exists("g:loaded_unimpaired") || &cp || v:version < 700
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
let g:loaded_unimpaired = 1
|
||||||
|
|
||||||
|
let s:cpo_save = &cpo
|
||||||
|
set cpo&vim
|
||||||
|
|
||||||
|
" Next and previous {{{1
|
||||||
|
|
||||||
|
function! s:MapNextFamily(map,cmd)
|
||||||
|
let map = '<Plug>unimpaired'.toupper(a:map)
|
||||||
|
let end = ' ".(v:count ? v:count : "")<CR>'
|
||||||
|
execute 'nmap <silent> '.map.'Previous :<C-U>exe "'.a:cmd.'previous'.end
|
||||||
|
execute 'nmap <silent> '.map.'Next :<C-U>exe "'.a:cmd.'next'.end
|
||||||
|
execute 'nmap <silent> '.map.'First :<C-U>exe "'.a:cmd.'first'.end
|
||||||
|
execute 'nmap <silent> '.map.'Last :<C-U>exe "'.a:cmd.'last'.end
|
||||||
|
execute 'nmap <silent> ['. a:map .' '.map.'Previous'
|
||||||
|
execute 'nmap <silent> ]'. a:map .' '.map.'Next'
|
||||||
|
execute 'nmap <silent> ['.toupper(a:map).' '.map.'First'
|
||||||
|
execute 'nmap <silent> ]'.toupper(a:map).' '.map.'Last'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call s:MapNextFamily('a','')
|
||||||
|
call s:MapNextFamily('b','b')
|
||||||
|
call s:MapNextFamily('l','l')
|
||||||
|
call s:MapNextFamily('q','c')
|
||||||
|
|
||||||
|
function! s:entries(path)
|
||||||
|
let path = substitute(a:path,'[\\/]$','','')
|
||||||
|
let files = split(glob(path."/.*"),"\n")
|
||||||
|
let files += split(glob(path."/*"),"\n")
|
||||||
|
call filter(files,'v:val !=# "." && v:val !=# ".."')
|
||||||
|
call filter(files,'v:val[-4:-1] !=# ".swp" && v:val[-1:-1] !=# "~"')
|
||||||
|
call map(files,'substitute(v:val,"[\\/]$","","")')
|
||||||
|
return files
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:FileByOffset(num)
|
||||||
|
let file = expand('%:p')
|
||||||
|
let num = a:num
|
||||||
|
while num
|
||||||
|
let files = s:entries(fnamemodify(file,':h'))
|
||||||
|
if a:num < 0
|
||||||
|
call reverse(sort(filter(files,'v:val < file')))
|
||||||
|
else
|
||||||
|
call sort(filter(files,'v:val > file'))
|
||||||
|
endif
|
||||||
|
let temp = get(files,0,'')
|
||||||
|
if temp == ''
|
||||||
|
let file = fnamemodify(file,':h')
|
||||||
|
else
|
||||||
|
let file = temp
|
||||||
|
while isdirectory(file)
|
||||||
|
let files = s:entries(file)
|
||||||
|
if files == []
|
||||||
|
" TODO: walk back up the tree and continue
|
||||||
|
break
|
||||||
|
endif
|
||||||
|
let file = files[num > 0 ? 0 : -1]
|
||||||
|
endwhile
|
||||||
|
let num += num > 0 ? -1 : 1
|
||||||
|
endif
|
||||||
|
endwhile
|
||||||
|
return file
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
nnoremap <silent> <Plug>unimpairedONext :<C-U>edit `=<SID>FileByOffset(v:count1)`<CR>
|
||||||
|
nnoremap <silent> <Plug>unimpairedOPrevious :<C-U>edit `=<SID>FileByOffset(-v:count1)`<CR>
|
||||||
|
|
||||||
|
nmap ]o <Plug>unimpairedONext
|
||||||
|
nmap [o <Plug>unimpairedOPrevious
|
||||||
|
|
||||||
|
" }}}1
|
||||||
|
" Line operations {{{1
|
||||||
|
|
||||||
|
nnoremap <silent> <Plug>unimpairedBlankUp :<C-U>put!=repeat(nr2char(10),v:count)<Bar>']+1<CR>
|
||||||
|
nnoremap <silent> <Plug>unimpairedBlankDown :<C-U>put =repeat(nr2char(10),v:count)<Bar>'[-1<CR>
|
||||||
|
|
||||||
|
nmap [<Space> <Plug>unimpairedBlankUp
|
||||||
|
nmap ]<Space> <Plug>unimpairedBlankDown
|
||||||
|
|
||||||
|
nnoremap <silent> <Plug>unimpairedMoveUp :<C-U>exe 'norm m`'<Bar>exe 'move--'.v:count1<CR>``
|
||||||
|
nnoremap <silent> <Plug>unimpairedMoveDown :<C-U>exe 'norm m`'<Bar>exe 'move+'.v:count1<CR>``
|
||||||
|
xnoremap <silent> <Plug>unimpairedMoveUp :<C-U>exe 'norm m`'<Bar>exe '''<,''>move--'.v:count1<CR>``
|
||||||
|
xnoremap <silent> <Plug>unimpairedMoveDown :<C-U>exe 'norm m`'<Bar>exe '''<,''>move''>+'.v:count1<CR>``
|
||||||
|
|
||||||
|
nmap [e <Plug>unimpairedMoveUp
|
||||||
|
nmap ]e <Plug>unimpairedMoveDown
|
||||||
|
xmap [e <Plug>unimpairedMoveUp
|
||||||
|
xmap ]e <Plug>unimpairedMoveDown
|
||||||
|
|
||||||
|
" }}}1
|
||||||
|
" Encoding and decoding {{{1
|
||||||
|
|
||||||
|
function! s:StringEncode(str)
|
||||||
|
let map = {"\n": 'n', "\r": 'r', "\t": 't', "\b": 'b', "\f": '\f', '"': '"', '\': '\'}
|
||||||
|
return substitute(a:str,"[\001-\033\\\\\"]",'\="\\".get(map,submatch(0),printf("%03o",char2nr(submatch(0))))','g')
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:StringDecode(str)
|
||||||
|
let map = {'n': "\n", 'r': "\r", 't': "\t", 'b': "\b", 'f': "\f", 'e': "\e", 'a': "\001", 'v': "\013", '"': '"', '\': '\', "'": "'"}
|
||||||
|
let str = a:str
|
||||||
|
if str =~ '^\s*".\{-\}\\\@<!\%(\\\\\)*"\s*\n\=$'
|
||||||
|
let str = substitute(substitute(str,'^\s*\zs"','',''),'"\ze\s*\n\=$','','')
|
||||||
|
endif
|
||||||
|
let str = substitute(str,'\\n\%(\n$\)\=','\n','g')
|
||||||
|
return substitute(str,'\\\(\o\{1,3\}\|x\x\{1,2\}\|u\x\{1,4\}\|.\)','\=get(map,submatch(1),nr2char("0".substitute(submatch(1),"^[Uu]","x","")))','g')
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:UrlEncode(str)
|
||||||
|
return substitute(a:str,'[^A-Za-z0-9_.~-]','\="%".printf("%02X",char2nr(submatch(0)))','g')
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:UrlDecode(str)
|
||||||
|
let str = substitute(substitute(substitute(a:str,'%0[Aa]\n$','%0A',''),'%0[Aa]','\n','g'),'+',' ','g')
|
||||||
|
return substitute(str,'%\(\x\x\)','\=nr2char("0x".submatch(1))','g')
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" HTML entities {{{2
|
||||||
|
|
||||||
|
let g:unimpaired_html_entities = {
|
||||||
|
\ 'nbsp': 160, 'iexcl': 161, 'cent': 162, 'pound': 163,
|
||||||
|
\ 'curren': 164, 'yen': 165, 'brvbar': 166, 'sect': 167,
|
||||||
|
\ 'uml': 168, 'copy': 169, 'ordf': 170, 'laquo': 171,
|
||||||
|
\ 'not': 172, 'shy': 173, 'reg': 174, 'macr': 175,
|
||||||
|
\ 'deg': 176, 'plusmn': 177, 'sup2': 178, 'sup3': 179,
|
||||||
|
\ 'acute': 180, 'micro': 181, 'para': 182, 'middot': 183,
|
||||||
|
\ 'cedil': 184, 'sup1': 185, 'ordm': 186, 'raquo': 187,
|
||||||
|
\ 'frac14': 188, 'frac12': 189, 'frac34': 190, 'iquest': 191,
|
||||||
|
\ 'Agrave': 192, 'Aacute': 193, 'Acirc': 194, 'Atilde': 195,
|
||||||
|
\ 'Auml': 196, 'Aring': 197, 'AElig': 198, 'Ccedil': 199,
|
||||||
|
\ 'Egrave': 200, 'Eacute': 201, 'Ecirc': 202, 'Euml': 203,
|
||||||
|
\ 'Igrave': 204, 'Iacute': 205, 'Icirc': 206, 'Iuml': 207,
|
||||||
|
\ 'ETH': 208, 'Ntilde': 209, 'Ograve': 210, 'Oacute': 211,
|
||||||
|
\ 'Ocirc': 212, 'Otilde': 213, 'Ouml': 214, 'times': 215,
|
||||||
|
\ 'Oslash': 216, 'Ugrave': 217, 'Uacute': 218, 'Ucirc': 219,
|
||||||
|
\ 'Uuml': 220, 'Yacute': 221, 'THORN': 222, 'szlig': 223,
|
||||||
|
\ 'agrave': 224, 'aacute': 225, 'acirc': 226, 'atilde': 227,
|
||||||
|
\ 'auml': 228, 'aring': 229, 'aelig': 230, 'ccedil': 231,
|
||||||
|
\ 'egrave': 232, 'eacute': 233, 'ecirc': 234, 'euml': 235,
|
||||||
|
\ 'igrave': 236, 'iacute': 237, 'icirc': 238, 'iuml': 239,
|
||||||
|
\ 'eth': 240, 'ntilde': 241, 'ograve': 242, 'oacute': 243,
|
||||||
|
\ 'ocirc': 244, 'otilde': 245, 'ouml': 246, 'divide': 247,
|
||||||
|
\ 'oslash': 248, 'ugrave': 249, 'uacute': 250, 'ucirc': 251,
|
||||||
|
\ 'uuml': 252, 'yacute': 253, 'thorn': 254, 'yuml': 255,
|
||||||
|
\ 'OElig': 338, 'oelig': 339, 'Scaron': 352, 'scaron': 353,
|
||||||
|
\ 'Yuml': 376, 'circ': 710, 'tilde': 732, 'ensp': 8194,
|
||||||
|
\ 'emsp': 8195, 'thinsp': 8201, 'zwnj': 8204, 'zwj': 8205,
|
||||||
|
\ 'lrm': 8206, 'rlm': 8207, 'ndash': 8211, 'mdash': 8212,
|
||||||
|
\ 'lsquo': 8216, 'rsquo': 8217, 'sbquo': 8218, 'ldquo': 8220,
|
||||||
|
\ 'rdquo': 8221, 'bdquo': 8222, 'dagger': 8224, 'Dagger': 8225,
|
||||||
|
\ 'permil': 8240, 'lsaquo': 8249, 'rsaquo': 8250, 'euro': 8364,
|
||||||
|
\ 'fnof': 402, 'Alpha': 913, 'Beta': 914, 'Gamma': 915,
|
||||||
|
\ 'Delta': 916, 'Epsilon': 917, 'Zeta': 918, 'Eta': 919,
|
||||||
|
\ 'Theta': 920, 'Iota': 921, 'Kappa': 922, 'Lambda': 923,
|
||||||
|
\ 'Mu': 924, 'Nu': 925, 'Xi': 926, 'Omicron': 927,
|
||||||
|
\ 'Pi': 928, 'Rho': 929, 'Sigma': 931, 'Tau': 932,
|
||||||
|
\ 'Upsilon': 933, 'Phi': 934, 'Chi': 935, 'Psi': 936,
|
||||||
|
\ 'Omega': 937, 'alpha': 945, 'beta': 946, 'gamma': 947,
|
||||||
|
\ 'delta': 948, 'epsilon': 949, 'zeta': 950, 'eta': 951,
|
||||||
|
\ 'theta': 952, 'iota': 953, 'kappa': 954, 'lambda': 955,
|
||||||
|
\ 'mu': 956, 'nu': 957, 'xi': 958, 'omicron': 959,
|
||||||
|
\ 'pi': 960, 'rho': 961, 'sigmaf': 962, 'sigma': 963,
|
||||||
|
\ 'tau': 964, 'upsilon': 965, 'phi': 966, 'chi': 967,
|
||||||
|
\ 'psi': 968, 'omega': 969, 'thetasym': 977, 'upsih': 978,
|
||||||
|
\ 'piv': 982, 'bull': 8226, 'hellip': 8230, 'prime': 8242,
|
||||||
|
\ 'Prime': 8243, 'oline': 8254, 'frasl': 8260, 'weierp': 8472,
|
||||||
|
\ 'image': 8465, 'real': 8476, 'trade': 8482, 'alefsym': 8501,
|
||||||
|
\ 'larr': 8592, 'uarr': 8593, 'rarr': 8594, 'darr': 8595,
|
||||||
|
\ 'harr': 8596, 'crarr': 8629, 'lArr': 8656, 'uArr': 8657,
|
||||||
|
\ 'rArr': 8658, 'dArr': 8659, 'hArr': 8660, 'forall': 8704,
|
||||||
|
\ 'part': 8706, 'exist': 8707, 'empty': 8709, 'nabla': 8711,
|
||||||
|
\ 'isin': 8712, 'notin': 8713, 'ni': 8715, 'prod': 8719,
|
||||||
|
\ 'sum': 8721, 'minus': 8722, 'lowast': 8727, 'radic': 8730,
|
||||||
|
\ 'prop': 8733, 'infin': 8734, 'ang': 8736, 'and': 8743,
|
||||||
|
\ 'or': 8744, 'cap': 8745, 'cup': 8746, 'int': 8747,
|
||||||
|
\ 'there4': 8756, 'sim': 8764, 'cong': 8773, 'asymp': 8776,
|
||||||
|
\ 'ne': 8800, 'equiv': 8801, 'le': 8804, 'ge': 8805,
|
||||||
|
\ 'sub': 8834, 'sup': 8835, 'nsub': 8836, 'sube': 8838,
|
||||||
|
\ 'supe': 8839, 'oplus': 8853, 'otimes': 8855, 'perp': 8869,
|
||||||
|
\ 'sdot': 8901, 'lceil': 8968, 'rceil': 8969, 'lfloor': 8970,
|
||||||
|
\ 'rfloor': 8971, 'lang': 9001, 'rang': 9002, 'loz': 9674,
|
||||||
|
\ 'spades': 9824, 'clubs': 9827, 'hearts': 9829, 'diams': 9830,
|
||||||
|
\ 'apos': 39}
|
||||||
|
|
||||||
|
" }}}2
|
||||||
|
|
||||||
|
function! s:XmlEncode(str)
|
||||||
|
let str = a:str
|
||||||
|
let str = substitute(str,'&','\&','g')
|
||||||
|
let str = substitute(str,'<','\<','g')
|
||||||
|
let str = substitute(str,'>','\>','g')
|
||||||
|
let str = substitute(str,'"','\"','g')
|
||||||
|
return str
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:XmlEntityDecode(str)
|
||||||
|
let str = substitute(a:str,'\c&#\%(0*38\|x0*26\);','&','g')
|
||||||
|
let str = substitute(str,'\c&#\(\d\+\);','\=nr2char(submatch(1))','g')
|
||||||
|
let str = substitute(str,'\c&#\(x\x\+\);','\=nr2char("0".submatch(1))','g')
|
||||||
|
let str = substitute(str,'\c'',"'",'g')
|
||||||
|
let str = substitute(str,'\c"','"','g')
|
||||||
|
let str = substitute(str,'\c>','>','g')
|
||||||
|
let str = substitute(str,'\c<','<','g')
|
||||||
|
let str = substitute(str,'\C&\(\%(amp;\)\@!\w*\);','\=nr2char(get(g:unimpaired_html_entities,submatch(1),63))','g')
|
||||||
|
return substitute(str,'\c&','\&','g')
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:XmlDecode(str)
|
||||||
|
let str = substitute(a:str,'<\%([[:alnum:]-]\+=\%("[^"]*"\|''[^'']*''\)\|.\)\{-\}>','','g')
|
||||||
|
return s:XmlEntityDecode(str)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:Transform(algorithm,type)
|
||||||
|
let sel_save = &selection
|
||||||
|
let cb_save = &clipboard
|
||||||
|
set selection=inclusive clipboard-=unnamed
|
||||||
|
let reg_save = @@
|
||||||
|
if a:type =~ '^\d\+$'
|
||||||
|
silent exe 'norm! ^v'.a:type.'$hy'
|
||||||
|
elseif a:type =~ '^.$'
|
||||||
|
silent exe "normal! `<" . a:type . "`>y"
|
||||||
|
elseif a:type == 'line'
|
||||||
|
silent exe "normal! '[V']y"
|
||||||
|
elseif a:type == 'block'
|
||||||
|
silent exe "normal! `[\<C-V>`]y"
|
||||||
|
else
|
||||||
|
silent exe "normal! `[v`]y"
|
||||||
|
endif
|
||||||
|
let @@ = s:{a:algorithm}(@@)
|
||||||
|
norm! gvp
|
||||||
|
let @@ = reg_save
|
||||||
|
let &selection = sel_save
|
||||||
|
let &clipboard = cb_save
|
||||||
|
if a:type =~ '^\d\+$'
|
||||||
|
silent! call repeat#set("\<Plug>unimpairedLine".a:algorithm,a:type)
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:TransformOpfunc(type)
|
||||||
|
return s:Transform(s:encode_algorithm, a:type)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:TransformSetup(algorithm)
|
||||||
|
let s:encode_algorithm = a:algorithm
|
||||||
|
let &opfunc = matchstr(expand('<sfile>'), '<SNR>\d\+_').'TransformOpfunc'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:MapTransform(algorithm, key)
|
||||||
|
exe 'nnoremap <silent> <Plug>unimpaired' .a:algorithm.' :<C-U>call <SID>TransformSetup("'.a:algorithm.'")<CR>g@'
|
||||||
|
exe 'xnoremap <silent> <Plug>unimpaired' .a:algorithm.' :<C-U>call <SID>Transform("'.a:algorithm.'",visualmode())<CR>'
|
||||||
|
exe 'nnoremap <silent> <Plug>unimpairedLine'.a:algorithm.' :<C-U>call <SID>Transform("'.a:algorithm.'",v:count1)<CR>'
|
||||||
|
exe 'nmap '.a:key.' <Plug>unimpaired'.a:algorithm
|
||||||
|
exe 'xmap '.a:key.' <Plug>unimpaired'.a:algorithm
|
||||||
|
exe 'nmap '.a:key.a:key[strlen(a:key)-1].' <Plug>unimpairedLine'.a:algorithm
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call s:MapTransform('StringEncode','[y')
|
||||||
|
call s:MapTransform('StringDecode',']y')
|
||||||
|
call s:MapTransform('UrlEncode','[u')
|
||||||
|
call s:MapTransform('UrlDecode',']u')
|
||||||
|
call s:MapTransform('XmlEncode','[x')
|
||||||
|
call s:MapTransform('XmlDecode',']x')
|
||||||
|
|
||||||
|
" }}}1
|
||||||
|
|
||||||
|
let &cpo = s:cpo_save
|
||||||
|
|
||||||
|
" vim:set ft=vim ts=8 sw=2 sts=2:
|
||||||
Loading…
Add table
Add a link
Reference in a new issue