さわだのノート

書籍のお仕事に役立つかもしれない思いつきを記録しています。

RSS: 記事の更新情報 Rss Feed

全角英数字を半角に変換するVimScript

VimScriptといいつつ、いつもどおり基本的にPerlで作業しています。
tr演算子さえ使えば全角/半角の変換なんて簡単にできちゃいますからね。

WindowsならActive Perlさえインストールしてしまえばすぐに使えます。
MacやLinuxなら当然Perlはプリインストールされているから、特別な設定不要で使えるはず。

こうしたマクロを使い慣れたPerlPythonでも、RubyでもOK)で手軽に書けるのがVimの魅力です。
VimScript自体はまったく理解が及びませんが。

数字だけ変換とか、カタカナだけ変換とかもPerlのtr演算子があれば簡単にできます。ほんと、文字操作との相性は抜群です。

func! Hankaku() range
  let str = getline(a:firstline, a:lastline)
perl << EOF
use utf8;
use Encode;
my $text = decode_utf8(VIM::Eval('str'));
my $firstline = VIM::Eval('a:firstline');
my @list = ();
for my $str (split /\n/, $text) {
  $str =~ tr/0-9a-zA-Z/0-9a-zA-Z/;
  push @list, $str;
}
$main::curbuf->Set($firstline, @list);
EOF
execute "normal " . a:lastline . "gg"
endf
vnoremap <leader>ha :call Hankaku()<cr>
nnoremap <leader>ha :call Hankaku()<cr>