💲

VS Codeの設定をいじってDockerコンテナ内のbashでgitコマンドを良い感じに補完できるようにしたった

2021/08/13に公開

はじめに

開発環境の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 - Containersdotfiles.repositoryを使うことにした。

ここらを参考にした。
Developing inside a Container using Visual Studio Code Remote Development
VSCode Remote Containers を使うなら dotfiles repository で幸せになろう - Qiita

設定

こんな感じで設定した。
dotfilesにトークンとかも書くかもしれないから、privateリポジトリにしておいた。

settings.json
{
  "dotfiles.repository": "https://github.com/optimisuke/dotfiles.git",
  "dotfiles.targetPath": "~/dotfiles",
  "dotfiles.installCommand": "~/dotfiles/install.sh"
}

最初から入れたほうがいい気はするけど、Dockerfileとかdocker-compose.ymlの使い方のよくわからんかったので、VS Codeの設定でインストールさせることにした。
そのうち、チームのレビュー通ったら、apt install部分は然るべき場所に書きたい。
毎回、チェックするのも微妙やけど、そんなに時間かからんしよしとした。

.bashrc
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に追加する感じにした。相対パスにしてるところが自信なかったけど、動いた。

install.sh
#!/bin/bash
cat ./.bashrc >> ~/.bashrc

動作

vscodeからコンテナを起動してアタッチすると、bashが起動して、install.shが走った。コンソールには出てきてないけど、git cloneもいい感じにできてる。

# git checkout [TAB]
HEAD                   master                 origin/HEAD            origin/master 

おわりに

期待通りに動いて満足。
これで、たのしい補完ライフを送れる。

GitHubで編集を提案

Discussion