VS Codeの設定をいじってDockerコンテナ内のbashでgitコマンドを良い感じに補完できるようにしたった
はじめに
開発環境のDockerコンテナ内で、git checkout
のあとのブランチ名を補完してくれなくて辛かったので、真面目に設定した。
チームで共有してる開発用コンテナの設定なので、みんなの環境には手を触れずに、自分の環境だけ対応する感じにした。なんとなく。
環境
UbuntuのDockerイメージ使ってる
golang:1.16-buster
コンテナ内で作業するときは、VS CodeのRemote - Containers
ってのを使って接続してる。コマンド打つときも、それでアクセスしてVS Code内でbash立ち上げてる。
調査
zsh
とかじゃなくて、デフォルトのbash
使いたいので、bashの補完を検索した。
どうもbash_completion
使ったら良さそう。
apt install bash-competion
して. /etc/bash_completion
したらいい感じに補完してくれた。
ここらを参考にした。
Debian - apt (not apt-get) autocompletion not working - Unix & Linux Stack Exchange
設定を永続化するための方法は、色々ありそうな気がするけど、最終的に、VSCode Remote Containersの設定で、自分用の.bashrc
を入れるようにした。
Dockerfileとかdocker-compose.ymlに書く方法もためしてみたけど、bashひらくたびにbash_completion
を読み込む方法がよくわからんかった。
うまいこと.bashrc
に永続化できたらいいんやと思うけど、やり方がいまいちわからんのと、人の.bashrc
をいじるのも微妙な気がした。
ということで、個人設定で.bashrc
を書き換える方針で探して試した。
また、.profile
で.bashrc
を呼んでるみたいだったので、今回の設定文は.bashrc
に書くことにした。
いろいろ調べた結果、自分用の.bashrc
とかドットファイルをいい感じに設定できる、vscodeのRemote - Containers
のdotfiles.repository
を使うことにした。
ここらを参考にした。
Developing inside a Container using Visual Studio Code Remote Development
VSCode Remote Containers を使うなら dotfiles repository で幸せになろう - Qiita
設定
こんな感じで設定した。
dotfiles
にトークンとかも書くかもしれないから、privateリポジトリにしておいた。
{
"dotfiles.repository": "https://github.com/optimisuke/dotfiles.git",
"dotfiles.targetPath": "~/dotfiles",
"dotfiles.installCommand": "~/dotfiles/install.sh"
}
最初から入れたほうがいい気はするけど、Dockerfileとかdocker-compose.ymlの使い方のよくわからんかったので、VS Codeの設定でインストールさせることにした。
そのうち、チームのレビュー通ったら、apt install部分は然るべき場所に書きたい。
毎回、チェックするのも微妙やけど、そんなに時間かからんしよしとした。
bashcomp='/etc/bash_completion'
if [ ! -f $bashcomp ]; then
apt update
apt install -y bash-completion
fi
. $bashcomp
権限、こんな感じでいじれるらしい。windowsやとどうなるんやろ?
$ git update-index --add --chmod=+x install.sh
install
はもとからある.bashrc
に追加する感じにした。相対パスにしてるところが自信なかったけど、動いた。
#!/bin/bash
cat ./.bashrc >> ~/.bashrc
動作
vscodeからコンテナを起動してアタッチすると、bashが起動して、install.sh
が走った。コンソールには出てきてないけど、git clone
もいい感じにできてる。
# git checkout [TAB]
HEAD master origin/HEAD origin/master
おわりに
期待通りに動いて満足。
これで、たのしい補完ライフを送れる。
Discussion