s4553711
12/17/2011 - 7:30 PM

Escape/Unescape unicode string.

Escape/Unescape unicode string.

" unicodeescape.vim - Escape/Unescape unicode string.

function! UnicodeEscapeString(str)
  let oldenc = &encoding
  set encoding=utf-8
  let escaped = substitute(a:str, '[^[:alnum:][:blank:][:cntrl:][:graph:]]', '\=printf("\\u%04x", char2nr(submatch(0)))', 'g')
  let &encoding = oldenc
  return escaped
endfunction

function! UnicodeEscape() range
  let oldreg = @x
  execute 'normal gv"xy'
  let @x = UnicodeEscapeString(@x)
  execute 'normal gv"xp'
  let @x = oldreg
endfunction

function! UnicodeUnescapeString(str)
  let oldenc = &encoding
  set encoding=utf-8
  let escaped = substitute(a:str, '\\u\([0-9a-fA-F]\{4\}\)', '\=nr2char("0x" . submatch(1))', 'g')
  let &encoding = oldenc
  return escaped
endfunction

function! UnicodeUnescape() range
  let oldreg = @x
  execute 'normal gv"xy'
  let @x = UnicodeUnescapeString(@x)
  execute 'normal gv"xp'
  let @x = oldreg
endfunction

command! -range UnicodeEscape :<line1>,<line2>call UnicodeEscape()
command! -range UnicodeUnescape :<line1>,<line2>call UnicodeUnescape()