Vim で Unicode エスケープシーケンスを変換

VimJSON 文字列なファイルを以下のようなコマンドを使って整形するとする。

:%!python -m json.tool

綺麗にインデントが出て嬉しいけど、そこにマルチバイトな文字列があれば Unicode エスケープシーケンスにして変換してくれる。


Unicode エスケープシーケンスなのが何の文字列なのか一目で分かり辛いので以下のようなのをでっち上げた。
# めんどかったので Python さんの力を借りてる

let s:save_cpo = &cpo
set cpo&vim

python << PYTHONEOF
import vim
def unicode_escape():
  start = vim.eval('start')
  end = vim.eval('end')
  lines = vim.eval('val')
  string = lines[int(start) - 1:int(end)]
  print string.decode('unicode_escape').encode('utf-8')
PYTHONEOF

function! UnicodeEscapeDecode() range
  let start = col("'<")
  let end = col("'>")
  let lines = getline('.')
  python unicode_escape()
endfunction

let &cpo = s:save_cpo
unlet s:save_cpo

これで、Unicode エスケープシーケンスな文字列をビジュアル選択して、その状態で「:」を押す。
すると :'<,'> と表示されて入力状態になるので、call UnicodeEscapeDecode() と入力すると utf-8 な文字列を echo エリアに表示してくれる。