VS CodeのEmacs的なtune-up

\![macOS-11.2.3](<https://img.shields.io/badge/macOS-11.2.3-brightgreen>) \![ruby-2.7.2p137](<https://img.shields.io/badge/ruby-2.7.2p137-brightgreen>)


# 状況

私のcoding環境はshell + Emacs ですが，学生さんにとってはだいぶハードルが高いみたいです．なら，教える側が歩み寄ろうとこの一年VS Codeで四苦八苦したのですが，ちょっと挫折していました．その様子をまとめると次の通りです．

まず，教えるときにはMacとWin10の両方を使う必要があります．ずっとMacを私は使っていて，学生さんたちはWin10を買わされているからです．Macを使っているとcommand系のkeyboard shortcut(OSXへの命令)とctrl系のshortcut(Emacsへの命令)をうまく頭の中で切り替えることができます．

ところがWin10だとこれが難しくなります．VS CodeのExtensionのAwesome Emacs Keybindを使うとほぼ完全にVS CodeのEmacs化ができますが，これではハードルの高いEmacsを教えているのと同じになります．こうして，最初の一年は，Emacsで頻出するブロック選択とかbuffer移動などVS Codeでやりにくい操作がたくさんあり，不便だな〜〜と思っていました．一方で，VS Codeのコードヒント(IntelliSense)やTerminal, Explorer同時表示はcoding初心者にはとても直感的で，coding技術の修得に効果がありそうです．

色々VS Codeのtune upをするうちに，カーソル移動以外は心地よく使えるようにWin10 + Mac + VS Code + Emacs環境を融合することができました．年取って物覚えとマウス操作がおぼつかないEmacs老人が，最新鋭のVS Code使いとなれる環境構築をまとめてみました．


# ruby on VS Code


## ruby runner

最初の一歩は小さく．．．です．target言語はRuby，あるいはそのエコシステムです．RubyはPythonみたくTerminalで動かせるいいExtension Runnerがありません．'Code Runner'はoutputへ持っていく(これは後で修正します)ので違和感が大きかったです．そこで，'Ruby Runner'である程度動かせるようにしました．`ctrl-shift-p` で最近のコマンドを選べばストレスを貯めずにしばらくは動かせます．


## code runner いじる

さらに慣れてくると，出力をIntegrated Terminalへ変更します．

-   <https://murabitoleg.com/vscode-runner/>

-   `Ctrl+Shift+P "settings"` でPreferences:open settings(UI)を選択
-   "code-runner.runInTerminal"を検索・選択してcheckを入れる．
-   右上の実行ボタンで設定が反映される

```json
> ~/.vscode/extensions/formulahendry.code-runner-0.11.3/package.json
 "code-runner.runInTerminal": {
	    "type": "boolean",
	    "default": false,
...
```

となっているのを，settings.jsonで上書き．

簡単なcode(hello worldとか)ならこれで，いい感じ！！！


# Terminalとの行き来(c-x, c-s, c-z, fg)

Terminalとの行き来ができるようにします．これは，shellによるargsの取得とか，redirectionで色々操作するため．

-   **on Mac:** `` ctrl-` `` でTerminalとeditorを行ったり来たり（バッククォート( \` )はJIS配列の場合 `Shift+@` で代用）
-   **on Win10:** ない． `ctrl-1` でできるようshort-cutを新たに登録．`ctrl-k, ctrl-s` でショートカットの編集画面．そこで，Terminal.focusと打ち込んで，workbench.action.Terminal.focusを選んで，編集アイコンを選ぶ．その後， `ctrl-1` とした．どっかとぶつかっている警告は気にせずにそのままreturnしたら，これで行ったり来たりができる．
    -   [Visual Studio Code でエディタとターミナルを移動するショートカットキーの作成](https://qiita.com/Shun141/items/fbed88abd4518f6d4039)

結局，EmacsからVS Codeへの頭の切り替えは，これが決め手．editorの問題ではなしに，shellとの連携だったようです．問題の場所の特定を間違っていた．やれやれ．


## さらに奥の手

それならいっそ，Applicationの切り替えにして，Win10のTerminalと切り替える方がいいかも(Comm-Tab for Mac, Alt-Tab for Win10)．

初心者に見せるためには同じApplication画面で表示する方がいいですが，初心者を卒業すれば，無理にVS Codeに執着する必要もないので．．．


# おまけ

以降は本筋から外れますが，いくつかのお手軽チューンナップのメモです．


## font

shellがfishだと文字化けが気になります．

-   code -> preferences -> settings(`command-,`)を開ける
-   terminal integrated font familyを検索
    -   Meslo LG M DZ for Powerline

Win10も綺麗に表示してくれますね．


## Terminalのkeybind

結局ここ．shellでctrl-p,n,b,f,k,yが使えない(except d)．．．でも，editorで慣れてくるとこれもover writeできるかも．ubuntu on wslはこのkeybindが使えるので，この統一感のなさは仕方がないのかな．．．Win10もkeyboard替えればいいのに．

-   [解決策はあります](https://qiita.com/Enola/items/225ff3d0ed7b3c2ee2d6)


## editor画面の切り替え(c-x o)

Emacsで頻出するbuffer移動の代わりです．

-   Macでは `command-option-left arrow` とか `right arrow`
-   これと `command-shift-p` を組み合わせる


## formatter

Ruby用のformatterです．

-   `option-shift-f` です．
-   rufo # ruby formatter
-   `gem install rufo` があらかじめ必要
    -   `"editor.formatOnSave": true` としている．


## hover

-   mouse overで関数の説明が出てくるんですが，授業の説明ではやたらと大きな文字にしているので邪魔です．
-   "editor.hover.enabled": false,
-   is your bulletproof solution. Then you can use CTLR + K, CTLR + I.



------
 - **source** ~/git_hub/grad_research_21s/docs/orgs/c03_vscode_setup.org