PodからコードをコピペしたときについてしまうインデントをEmacsでどうやって消すか

Podからコードをコピペしたときについてしまうインデントをviとemacsでどうやって消すか

自分の場合。例としてLWP::SimpleのSYNOPSISをEmacsで。

(1)     use LWP::Simple;
        $content = get("http://www.sn.no/");
        die "Couldn't get it!" unless defined $content;

        if (mirror("http://www.sn.no/", "foo") == RC_NOT_MODIFIED) {
            ...
        }

        if (is_success(getprint("http://www.sn.no/"))) {
            ...
     (3)}
(2)

ちゃんとしたPerlコードになっている場合

(1)にmarkして(2)で

M-x indent-region

を実行してインデントします。(この例では...の部分がちゃんとしてないですけど、これぐらいなら大丈夫です)
Emacsのインデントは「正しい位置」にインデントされるので、結果的にインデントが消えます。

すでにPerlコードを書いているバッファにコピペした場合は、バッファ全体を

M-x perltidy-region

で整形しちゃうことも多いです。(この例では...の部分に勝手にセミコロンが付いてperltidyが通りましたが、運が悪ければエラーになっちゃう場合もあるので注意)


ちゃんとしたPerlコードになっていない場合(インデントが崩れそうに見える場合・perltidyがエラーになりそうな場合)

(1)にmarkして(3)で

C-x r d

を実行してインデント部分をdelete-rectangleします。キャレット位置合わせがちょびっとだけ面倒。

SYNOPSISが短い場合(3行とか)

(1)に移動して

C-i C-n C-i C-n C-i C-n ...

ってやるかも。C-i([tab])がインデントするようになっているので、Ctrl押しっぱなしでi,nを交互に連打でOKです。




※記事中「(1)でmarkして」とか書いてますけど、貼り付け直後はキャレットが貼り付け物の末尾にある(この動作は変更できるけどデフォルトのままにしてる)ので、「(2)や(3)でmarkして」という場合も多々。細かい話ですみません。