vim-users.jp

Hack #82: コード片を貼付けしてインデントを正しくする

Posted at 2009/10/04
このエントリーをはてなブックマークに追加

問題

Vimでコード片をヤンクして別の場所で貼付ける際に、インデントの深さが異なる場合があります。 インデントの再調整をどのようにして楽に行なうことができるでしょうか。

解決1 Vimに任せる

Vimには=で指定した範囲のインデントを整える機能が備わっています。これはファイルタイプに依存します。

例えばRubyで以下のようなコードを編集中に、

...

def fact(n)
if n == 0
0
else
n * fact(n - 1)
end
end

...

def fact(n)の行にカーソルがあり、そこから次の空行までをまとめてRubyとしての正しいインデントに整形するには=}とタイプします。 これは=} (次の空行までを示すmotion)まで適用するという意味です。

これを貼付け後に貼付けした範囲を指定して行なうことで本問題が解決します。まずPで貼付けを行ない、カーソル位置が貼付け位置の手前にある状態のまま移動せずに、=']を行い、貼付けしたコード片の末尾までを指定してインデントを整えさせます。

def fact(n)
  if n == 0
    0
  else
    n * fact(n - 1)
  end
end

必要ならば、P自体をP=']で置き換えることで、より簡単に行なうことができます。

nnoremap P P=']

解決2 手動で頑張る

解決1は=ではうまくいかないときに元のインデント情報が失われてしまい大変なことになってしまいます。このときは、><で手動でインデントの深さのみをまとめて変更させる手法をとるのが好ましいでしょう。

Pで貼付けした範囲を右にインデントするならばPのあとに>']を、左にインデントするならば<']を打鍵しましょう。続けてさらに深く/浅くするには、.を打鍵しましょう。

ujihisa

もどる
blog comments powered by Disqus