読者です 読者をやめる 読者になる 読者になる

さわだのノート

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

RSS: 記事の更新情報 Rss Feed

原稿に連番を振るVimスクリプトを作った。

原稿に手順を指定する番号を振っていくのが面倒なので、「%a」「%A」の形式で指定した文字列に連番を振るVimスクリプトを作った。

「%」のあとに異なるアルファベットを指定することで、アルファベットごとに連番を振ることができます。

「%数字」に変換するのは、このあとさらに丸数字に変換する必要があるためです。丸数字変換する必要があるものは「%」のあとに小文字のアルファベット、必要がないものは大文字のアルファベットを指定します。

自分で使う以外まったく需要はなさそうですが……。

仕組みは至って単純で、Perlで総当たりの置換を行っています。もう少しましなやり方ありそうですが、面倒だったのでこれでいいやとやっちゃいました。

function! Renban_parcent_format() range
    let str = getline(a:firstline, a:lastline)
    let firstline = a:firstline

perl << EOF
use utf8;
use Encode;

# 原稿を取得
my $str = decode_utf8(VIM::Eval('str'));

for my $char ('a' .. 'z') {
  my $num = 1;
  $num++ while $str =~ s|\%$char|\%$num|;
}

for my $char ('A' .. 'Z') {
  my $ph = 1;
  $ph++ while $str =~ s|\%$char|sprintf '%02d', $ph|e;
}

my $firstline = VIM::Eval('firstline');
$main::curbuf->Set($firstline, split(/\n/, $str));
EOF

execute "normal " . a:lastline . "gg"
endfunction

vnoremap <leader>fo :call Renban_parcent_format()<cr>

こんな感じで原稿を書くと、

###%Zpage
手順見出し>
%z 

手順>
%a 
画像>
162-%A
キャプション>
 □□□□◆□□□□■%b□□□□◆□□□□■

手順>
%a 
画像>
162-%A
キャプション>
 □□□□◆□□□□■%b□□□□◆□□□□■


###%Zpage

手順見出し>
%z 

手順>
%c 
画像>
163-%B
キャプション>
 □□□□◆□□□□■%d□□□□◆□□□□■

手順>
%c 
画像>
163-%B
キャプション>
 □□□□◆□□□□■%d□□□□◆□□□□■


手順見出し>
%z 

手順>
%e 
画像>
163-%B
キャプション>
 □□□□◆□□□□■%f□□□□◆□□□□■

手順>
%e 
画像>
163-%B
キャプション>
 □□□□◆□□□□■%f□□□□◆□□□□■

こんな感じに変換されます。

###01page
手順見出し>
%1 

手順>
%1 
画像>
162-01
キャプション>
 □□□□◆□□□□■%1□□□□◆□□□□■

手順>
%2 
画像>
162-02
キャプション>
 □□□□◆□□□□■%2□□□□◆□□□□■


###02page

手順見出し>
%2 

手順>
%1 
画像>
163-01
キャプション>
 □□□□◆□□□□■%1□□□□◆□□□□■

手順>
%2 
画像>
163-02
キャプション>
 □□□□◆□□□□■%2□□□□◆□□□□■


手順見出し>
%3 

手順>
%1 
画像>
163-03
キャプション>
 □□□□◆□□□□■%1□□□□◆□□□□■

手順>
%2 
画像>
163-04
キャプション>
 □□□□◆□□□□■%2□□□□◆□□□□■