vscodeのtabの挙動をemacsっぽくする

f:id:garaemon1:20200502174644g:plain
customize-indentation-rules

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などは所望の挙動をするようになる。

github.com

一方で, C++Pythonではvscode-emacs-indentを使ったとしてもtabを押してもインデントされない. これらの言語では, indentationRulesが設定されていないからである.

そこで, customize-indetation-rulesという各言語のindentationRulesを上書き可能なextensionを作成した。

github.com

customize-indentation-rulesを利用すると, settings.jsonに設定を書けばindentationRulesが定義されていない言語に対して追加で定義することができる。 例えば、C++だと以下のような設定を書くと、インデントされるようになる. (元ネタは以前vscodeから削除されたC++のインデントルール)

gist.github.com

以上のように, vscode-emacs-indentとcustomize-indentation-rulesを組み合わせると, vscodeのtabの挙動がemacsでの挙動を近づけることができる.