vscodeのtabの挙動をemacsっぽくする
visual studio codeのtabの挙動をemacsのようにしたい.
そのために, 以下の2つのextensionを利用する. * vscode-emacs-indent * customize-indentation-rules
emacsにおけるtabを押したときの挙動は以下のようなものだ.
- tabを押すと, その行がインデントされる. インデント幅を単純に増やすのではなく, 一つ前の行の文法とインデントによって決定される. したがって、tabを連打してもインデントは増えたりしない.
- カーソル位置は相対的に保存される. ただし, 文字よりも左側にカーソルがある場合、最も左の文字まで移動する.
一方で, vscodeの標準のtabの挙動は押すたびにインデントが増えていく挙動になっている.
このような挙動をemacsのように変更するextensionがvscode-emacs-indentだ. このextensionを入れることでjavascript, typescriptなどは所望の挙動をするようになる。
一方で, C++やPythonではvscode-emacs-indentを使ったとしてもtabを押してもインデントされない. これらの言語では, indentationRulesが設定されていないからである.
- goのindentationRulesの設定(language-configuration.json)
- typescriptのindentationRulesの設定 (.tsファイルから設定している)
- c++のlanguage-configuration.json. indentationRulesの設定がない.
そこで, customize-indetation-rulesという各言語のindentationRulesを上書き可能なextensionを作成した。
customize-indentation-rulesを利用すると, settings.jsonに設定を書けばindentationRulesが定義されていない言語に対して追加で定義することができる。 例えば、C++だと以下のような設定を書くと、インデントされるようになる. (元ネタは以前vscodeから削除されたC++のインデントルール)
以上のように, vscode-emacs-indentとcustomize-indentation-rulesを組み合わせると, vscodeのtabの挙動がemacsでの挙動を近づけることができる.