VisualStudioCode

【VSCode】貼り付けた内容が勝手にインデントされて困る時の対処法

更新日:2023/02/07

VsCodeで貼り付けをしたとき、勝手にインデントされて困る時があります。
対処法を調べてみました。

 

そのまま貼り付けてほしい

次のようなコードがあるとします。
(. はスペース)

....func1();
....func2( 引数 , 引数 ,引数 ,
........引数 ,引数 ,引数 );

func1()とfnc2()を入れ替えたいので、func1()の行をコピーしてfunc2()の後に貼り付けます。

....func2( 引数 , 引数 ,引数 ,
........引数 ,引数 ,引数 );
........func1();

勝手にインデントされた!
そのまま貼り付けてくれればいいのに…

仕方なく、スペースを削除する日々…めんどくさい…

 

editor.formatOnPaste

結論としては、設定で Editor: Format On Paste にチェックを入れる。

Editor: Format On Paste
✅ 貼り付けた内容がエディターにより自動的にフォーマットされるかどうかを制御します。フォーマッタを使用可能にする必要があります。また、フォーマッタがドキュメント内の範囲をフォーマットできなければなりません。

setting.json上では、次のようになります。

"editor.formatOnPaste": true

チェックボックス横の説明を読んで、チェックを入れるとインデントされると解釈していました。
だから、チェックを外していたのですが…

まさか、チェックを入れるのが正解だったなんて…

 

全く違った

前項の対処法は、言語によって上手くいくものといかないものがあります。
ペースト時のインデントとEditor: Format On Pasteは、あまり関係ないようです...

貼り付け時のインデント調整は、Editor: Auto Indentでした。

Editor: Auto Indent
ユーザーが行を入力、貼り付け、移動、またはインデントするときに、エディターでインデントを自動的に調整するかどうか制御します。
full v

選択できる値は、5つあります。

意味
noneインデントしない
keep現在のインデントを保持する
bracketskeepの意味+言語が定義されたかっこを優先する
advancedbracketsの意味+言語で定義された特別な onEnterRules を呼び出す
規定 fulladvancedの意味+言語で定義された indentationRules を優先する

nonefull以外がよさそうです。

noneにすると、エンター入力時に次の行をインデントしてくれなくて不便です。
bracketsはエンター入力時に{}などのかっこを参照して、次の行をインデントしてくれます。

advancedonEnterRulesはエンター入力時の追加処理が定義されています。
処理内容は様々で、インデントを操作しているものもあります。

fullindentationRulesは行入力、貼り付け、移動時に、現在の行または次の行のインデントを調整する方法を定義されています。
貼り付け時に、勝手にエンターされるのはこれが原因のようです。

■備考
onEnterRulesindentationRulesは、言語の定義ファイル(language-configuration.json)で定義されています。

一度設定してみて動作を確認してから、決定してみてください。

なお、次のように settings.json で言語ごとに設定することもできます。

"[php]":{
    "editor.autoIndent": "advanced",
},

全体設定で上手くいかない時は、こちらを試してみるといいですね。

更新日:2023/02/07

書いた人(管理人):けーちゃん

スポンサーリンク

記事の内容について

null

こんにちはけーちゃんです。
説明するのって難しいですね。

「なんか言ってることおかしくない?」
たぶん、こんなご意見あると思います。

裏付けを取りながら記事を作成していますが、僕の勘違いだったり、そもそも情報源の内容が間違えていたりで、正確でないことが多いと思います。
そんなときは、ご意見もらえたら嬉しいです。

掲載コードについては事前に動作確認をしていますが、貼り付け後に体裁を整えるなどをした結果動作しないものになっていることがあります。
生暖かい視線でスルーするか、ご指摘ください。

ご意見、ご指摘はこちら。
https://note.affi-sapo-sv.com/info.php

 

このサイトは、リンクフリーです。大歓迎です。