全角英数字を半角に変換するVimScript
VimScriptといいつつ、いつもどおり基本的にPerlで作業しています。
tr演算子さえ使えば全角/半角の変換なんて簡単にできちゃいますからね。
WindowsならActive Perlさえインストールしてしまえばすぐに使えます。
MacやLinuxなら当然Perlはプリインストールされているから、特別な設定不要で使えるはず。
こうしたマクロを使い慣れたPerl(Pythonでも、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>