プログラミング/Visual Studio Code
コマンドマクロ†
例えば Ctrl+M で、
- ターミナルに移動
- make を実行
- エディタへ戻る
をしたいような時、
macro-commander という Extention を使うと良いみたい。
プロジェクトフォルダの .vscode/settings.json に、
LANG: json
{
"macros": {
"run make": [
"workbench.action.terminal.focus",
{ "command": "workbench.action.terminal.sendSequence", "args": { "text": "make\n" } },
"workbench.action.focusActiveEditorGroup"
]
}
}
のように書いておくと、Ctrl+K Ctrl+S のキーボードショートカット一覧に
のように macros.run make が出るので Ctrl+M を割り当てればいい。
キーボードマクロ†
エディタ上で任意のキーストロークを記録・再生するキーボードマクロは、
で良さそう。
- Ctrl+Alt+R で記録開始
- Ctrl+Alt+P で再生
コード補完のメニューが邪魔†
Visual Studio Code で編集中にコード補完リストが出て邪魔すぎたので、Ctrl + space を押したときだけ出るように設定しました。
このコード補完リストは Suggestion とか Intellisense とか呼ばれるもので、 本当に探したいときはとても便利なのですが不必要な時に現れてくれると邪魔なことこの上ないです。
この suggestion が何もしなくても勝手に現れる動作は Quick Suggestions と呼ばれるようで、 これを消してやれば良いのだそうです。参考: https://qiita.com/kob58im/items/7ace99c5373682c04c00
現状では [File]-[Preferences]-[Settings] あるいは Ctrl+, で Settings を開き、 quick suggestions で検索、出てくる表の Value が on になっているところをすべて off にすれば 勝手に出ることがなくなります。
ここを off にしても Ctrl + Space を押せばちゃんと出るのでちゃんと suggestions の機能も使えます。
始めからこれで良いのに。
Tabby†
https://gigazine.net/news/20230410-tabby-self-host-copilot/
ローカルで GitHub Copilot もどきを動かして VS Code から使えます。
https://github.com/TabbyML/tabby
- NVIDIA-SMI 530.30.02
- CUDA Version: 12.1
- NVIDIA Container Toolkit CLI version 1.13.0
- Docker version 20.10.7
- NVIDIA GeForce RTX 2070, 8GB
の組み合わせでストレスなく動かせました。
ただこれ、
https://huggingface.co/Salesforce/codegen-350M-multi[外部リンク]
The data consists of 119.2B tokens and includes C, C++, Go, Java, JavaScript, and Python.
とのことなので、使用言語がここに入ってないと役に立たないです。
あと、Copilot のデモと比べるとそこまで賢くないような。
WSL 上でのコーディング†
WSL のプラグインを入れると WSL のファイルシステム上で操作しているかのような動作が得られる。
https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-wsl
プラグインを入れたら左下の [Open a Remote Window] をクリックして、
[Connect to WSL] をクリックすると
図のように WSL に接続した旨が表示される。
あとは Open Folder などで WSL 内のパス /home/user/project などを指定してやれば、 その後開くターミナルなどもそのまま WSL のものとなって便利。
この環境を使うのにいくつか注意点があって、
VSCode のプラグインは通常のものと WSL 用のものとで別に入れなければならない場合がある。
リモートで動かすプログラムのパスなどセキュリティセンシティブな設定は Local や Project の設定ではなく Remote 別の設定に書かなければならない。
これには Ctrl+Shift+P から Remote Settings を使う。
そういった設定を User Settings に書こうとすると、Json の該当項目がグレーアウトして、
"This setting cannot be applied in this window. It will be applied when you open a local window."
と言われる。あるいは Project フォルダの .vscode/settings.json に書こうとすると、
"This setting can only be applied user settings in local window or in remote settings in remote window."
と言われる。
すごく分かりにくいけれどこれらを総合すると、
- セキュリティセンシティブな設定はプロジェクト設定には書けない(git で落としてきたりする設定で書き換えられないようにするため)
- User Settings はローカルのウィンドウのための設定なのでリモート接続で使うウィンドウには適用されない
- WSL を使っている場合はリモート扱いになる
ということみたいだ。
WSL に複数のディストリビューションが入っているときは Windows のコマンドプロンプトから
LANG: console > wsl --set-default <Distribution>
あるいは、
LANG: console > wsl --set-version <Distro> <Version>
とする。
root ではない特定のユーザーでログインしたいときは、WSL 内の /etc/wsl.conf に
LANG: console $ cat | sudo tee /etc/wsl.conf [user] default=osamu ^D
のように書いておく。
でこれ、どうもすぐには反映されないようで・・・ Windows の再起動が必要かもしれません。
正しく設定しても VSCode がうまく動作しないとき†
プラグインの設定を変えてもうまく反映されないような時、 VSCode をいったん閉じて開きなおすとうまく行くことが何度もありました。
trimesh の scene をいい感じに表示するには†
VSCode 上で普通に trimesh scene.show() すると最低限の埋め込み 3D ビュアーでの表示となる
ノートブック埋め込みビュアーは便利ではあるのだけれど機能が限られていて、ライティングやマテリアル指定などがうまく反映されず、見たいところが良く見えない時がある(小さなモデルを拡大すると暗くなる???)
そこで scene.show(viewer='gl') のようにすると外部にウィンドウが開いてきれいなレンダリング結果を確認できるのだけれど、これには pyglet モジュールの 2 未満のバージョンのものが必要。
import sys
!{sys.executable} -m pip install pyglet
で入れると 2 より大きいものが入ってしまうので、
!{sys.executable} -m pip uninstall -y pyglet
!{sys.executable} -m pip install "pyglet<2"
のようにして pyglet 1.5 くらいのものを入れてやれば動くみたい。
pip による外部モジュールの install†
コンソールからやると VSCode が使っているのと異なる python にインストールされてしまったりするので、Jupyter 上でやると間違いない
import sys
!{sys.executable} -m pip install
のようなのをセルに書き込めばインストールされる
未インストールの時のみ pip install を呼ぶには、
import sys
import subprocess
import importlib.util
def ensure_package(pkg_name):
if importlib.util.find_spec(pkg_name) is None:
print(f"{pkg_name} not found. Installing...")
subprocess.check_call([
sys.executable, "-m", "pip", "install", pkg_name
])
else:
print(f"{pkg_name} {importlib.util.find_spec(pkg_name).loader.load_module().__version__} already installed.")
を作っておき、
ensure_package("trimesh")
のようにしてインストールされていることを確認&強制すると良い
ただ、古いモジュールでは version が定義されていないこともあるようで、 そういうのをこれで確認しようとするとエラーになるので注意が必要。
ターミナル上で Ctrl+F などのキーが使いたい†
以前はちまちまショートカットキーを設定しなおしていたのですが、 チェックボックス1つで可能との記事がこちらにありました。
楽ちん!
https://note.com/moba_gadgets_x/n/n2d9d43d066a4
Visual Studio Codeのターミナル機能は、ソースコードを見ながらOSをコマンドで操作できて便利なのですが、Linuxを使っているとどうしても「Ctrl + k」でカーソルの後ろの文字をズバッと削除したくなってしまうわけです。ただVisual Studio CodeではCtrl + kが別の機能に割り当てられているため1行削除にならず、ずっとストレスを貯めていました。
実はこの挙動は設定で変更できて、「Allow Chords」のチェックを外す(falseにする)とターミナルのキーバインドが有効になり、Ctrl + kでカーソルの後ろの文字を削除できます。設定の説明にわざわざCtrl + kの話が書いてあるあたり、この件はみんな同じことを考えているのでしょう。
Ctrl+P, Ctrl+E, Ctrl+F, Ctrl+Space はこれだけじゃダメだった†
Ctrl+Shift+P から Keyboard Shortcuts を開いて、
- Ctrl+P や Ctrl+E の When に !terminalFocus を入れる
- Ctrl+F は Terminal: Focus Find を削除
Ctrl+Space は Terminal; Send Sequence などを削除
これで少なくとも
- Ctrl+P, Ctrl+N
- Ctrl+B, Ctrl+F
- Ctrl+A, Ctle+E
- Ctrl+K
- Ctrl+Space, Ctrl+W
が使えるようになりました。
添付ファイル:








