abstract
| - But sometimes I just got some base64 raw string like aGFwcHkgdmltbWluZyA=. Here is how to use a system command to read it in Vim directly. You need a program like decode64.exe to encode/decode strings. You can can download it from (unfortunately I tested it under WIN2K/2003 only). Put the decode64.exe/base64dll.dll somewhere in your %path% enviroment variable. You need write some script in your vimrc: vnoremap ;mme "ey:call CalcEncode64(1) vnoremap ;mmd "ey:call CalcEncode64(0) function! CalcEncode64(pattern) " #region let has_equal = 0 let l:rege=@e let l:regk=@k let l:regl=@l " 1=encode 0=decode let l:elen = strlen(@e) " TOTAL length let l:rightmark=strpart(@e, l:elen-4, 3) if l:rightmark == "===" let @e = strpart(@e,0,l:elen-4) let has_equal = 1 endif if a:pattern == 1 let @k = @e elseif a:pattern == 0 let @k = substitute (@e, "
", "", "g") else return "" endif let l:nsize = 1200 " nsize must be multiples of 4 (byte, for base64 code 4 byte is an unit) let l:len = strlen(@k) " TOTAL length let l:vleft=l:len/l:nsize " the .n block let l:vright=l:len/l:nsize " the .n block total let l:answerstr = "" while 0< l:vleft let l:answerstr = l:answerstr . s:normalExecode(l:vleft,l:nsize,l:len,l:vright,a:pattern) let l:vleft = l:vleft-1 endwhile " last block < nsize byte let l:answerstr = l:answerstr . s:lastExecode(l:vleft,l:nsize,l:len,l:vright,a:pattern) let @k=l:answerstr if has_equal == 1 :normal `>"kp else echo "answer = ".l:answerstr endif let @l=l:regl let @k=l:regk let @e=l:rege endfunction " #endregion function! s:lastExecode(vleft,nsize,len,vright,pattern) " #region let l:answer="" let l:nstart=a:nsize*a:vright let @l=strpart(@k, l:nstart, a:len-a:nsize*a:vright) let l:answer = s:ExeDecode(a:vleft,a:nsize,a:len,a:vright,a:pattern) return l:answer endfunction " #endregion function! s:normalExecode(vleft,nsize,len,vright,pattern) " #region let l:nstart=(a:vright-a:vleft)*a:nsize let @l=strpart(@k, l:nstart, a:nsize) let l:answer = s:ExeDecode(a:vleft,a:nsize,a:len,a:vright,a:pattern) return l:answer endfunction " #endregion function! s:ExeDecode(vleft,nsize,len,vright,pattern) " #region " 1=encode 0=decode " TODO: when encode,the string must NOT contains any char of pipe '|' " which conflicts whith the windows shell command, I really dont know " how to deal with it. if a:pattern == 1 let @l = substitute (@l, "
", "", "g") let @l = substitute (@l, "", "", "g") let l:answer = system("echo " . @l . " \| ENCODE64.exe ") let @*="echo " . @l . " \| ENCODE64.exe " elseif a:pattern == 0 "let l:answer = system("echo " . @l . " \| DECODE64.exe -D") let l:answer = system("echo " . @l . " \| ENCODE64.exe -D") else return "" endif return l:answer endfunction " #endregion Now open a new gvim instance and copy and paste aGFwcHkgdmltbWluZyA= into it. Use virtual mode to select it, then press ;mmd You can see the output text at the bottom of the window: answer = happy vimming Sometimes the raw base64 string is encoded from Unicode original string. If you want to read it please type: :set enc=utf8 first. See [help 'enc'].
|