vi に文字列をペーストしたら激しくインデントされてしまった

ショコラ
ショコラ

vi に文字列をペーストしたら激しくインデントされてしまった

vimrc に書かれた「set autoindent(set ai)」「set smartindent」辺りが原因かもしれない。
その場合「:set paste」を実行してから文字列をペーストしてキメマス。
オートインデントはキーボードで入力するときは自動でインデントが入って便利なんですけどね。

もっさん先輩
もっさん先輩
set paste

paste の後に元に戻すには nopaste を使います。

set nopaste

オートインデント関連を整理してみます。

①オートインデントは、改行時に前の行のインデントを引き継ぐようになります。

set autoindent

ai は autoindent を省略したものです。

set ai

②スマートインデントは、前の行の括弧({)に応じてインデントが挿入されるようになります。挿入されるインデントは shiftwidth で設定します。

set smartindent

③シフトウィズは、インデントする幅です。

set shiftwidth=2

noexpandtab の状態で shiftwidth に 7 等が設定されていると、タブとスペース(調整)でインデントされます。

④エクスパンドタブは、タブを入力するとタブストップ分のスペースが入力されるようになります。

set expandtab

⑤タブストップは、タブ1文字を何文字のスペースで表示するかの設定です。

set tabstop=4

シチュエーション

オートインデントの状態で whileブロックの中に文字列をペーストしてみます。

while (true) {
  //ここにペーストします。
}

行頭がインデントされた文字列を用意します。

  ## コメント
  if (true) {
    echo 'test';
  }

上の行をコピーして、while の中にペーストすると激しくずれます。

<?php
while (true) {
  ## コメント
    if (true) {
        echo 'test';
          }
}
Scroll to Top