README
¶
devcontainer.vim
コンテナ上で Vim を使った開発をするためのツール。 (VSCode Dev Container の Vim 版)
VSCode 向けに作成された devcontainer.json に追加する形で Vim による Dev Container 開発のための設定を追加・起動するツールです。
Usage:
NAME:
devcontainer.vim - devcontainer for vim.
USAGE:
devcontainer.vim [global options] command [command options]
VERSION:
0.9.1
COMMANDS:
run Run container use `docker run`
templates Run `devcontainer templates`
start Run `devcontainer up` and `devcontainer exec`
down Stop and remove devcontainers.
config devcontainer.vim's config information.
vimrc devcontainer.vim's vimrc information.
runargs run subcommand's default arguments.
tool Management tools
help, h Shows a list of commands or help for one command
GLOBAL OPTIONS:
--license, -l show licensesa.
--help, -h show help
--version, -v print the version
devcontainer.json が存在しないプロジェクトで、ワンショットで環境を立ち上げる
devcontainer.vim run [DOCKER_OPTIONS] [DOCKER_ARGS]
docker run -it --rm -v "$(pwd):/work" --workdir /work -v "$HOME/.vim:/root/.vim" --name golang golang:1.22.1-bookworm コマンド相当の環境でコンテナを立ち上げる場合の例:
devcontainer.vim run -v "$(pwd):/work" --workdir /work -v "$HOME/.vim:/root/.vim" --name golang golang:1.22.1-bookworm
devcontainer.json が存在する場合
環境の起動
start サブコマンドで、環境を立ち上げ、Vim を転送し、起動できる。
たとえば、カレントディレクトリから devcontainer.json を検索し、読み込み、環境を立ち上げ、Vim を転送し、起動する場合は以下。
devcontainer.vim start .
devcontainer への引数を(--workspace-folder 以外は) そのまま利用できるため、
.vim をバインドしたい場合、以下のように指定する。
devcontainer.vim start --mount "type=bind,source=$HOME/.vim,target=/root/.vim" .
環境の停止
TODO:
環境の削除
down サブコマンドで環境の削除ができる。
devcontainer.vim down .
ツールのアップデート
devcontainer.vim が内部で利用するツールをアップデートしたい場合には、 tool サブコマンドを使用する。
# Vim のアップデート
devcontainer.vim tool vim download
# devcontainer CLI のアップデート
devcontainer.vim tool devcontainer download
テンプレートをもとに devcontainer.json を作成する
devcontainer.vim templates apply サブコマンドを使用することで、 devcontainers が提供しているテンプレートから devcontainer.json を生成できる。
また、利用可能なテンプレート ID, フィーチャー ID は以下ページで確認できる。
2. Using the Dev Container CLI - templates/README.md at main · devcontainers/templates も参照。
go のテンプレートを用いて devcontainer.json を生成する場合の例:
devcontainer.vim templates apply --template-id ghcr.io/devcontainers/templates/go:4.0.0 .
go のテンプレートを用い、 feature として Docker in Docker を指定した devcontainer.json を生成する場合の例:
/workspaces/devcontainer.vim/build/devcontainer.vim-linux-amd64 templates apply \
--template-id ghcr.io/devcontainers/templates/go:4.0.0 \
--features '[{ "id": "ghcr.io/devcontainers/features/docker-in-docker:2"}]' .
Customize:
コンテナのカスタマイズ
.vim や vimfiles など、ホストからバインドマンとさせたいものがあるが、
VSCode 等の他ツール向けに作成した devcontainer.json に devcontainer.vim 専用の mounts 定義を付けることはしたくない。
そのため、別途 devcontainer.vim のみが読み込むファイルを .devcontainer/devcontainer.vim.json に配置する。
devcontainer.vim は、 .devcontainer/devcontainer.json と .devcontainer/devcontainer.vim.json をマージして実行する。
PROJECT_ROOT/
+- .devcontainer/
| +- devcontainer.json # 普通の devcontainer 向けの設定を記述
| +- devcontainer.vim.json # .vim のマウントなど、 devcontainer.vim のみで利用したい設定を記述
|
+- ...(other project files)
devcontainer.json:
{
"name":"Go",
"image":"mcr.microsoft.com/devcontainers/go:1-1.22-bookworm",
"features":{},
"remoteUser":"vscode"
}
devcontainer.vim.json:
{
"mounts": [
{
"type": "bind",
"source": "${localEnv:HOME}/.vim",
"target": "/home/vscode/.vim"
}
]
}
追加の設定を生成する
devcontainer.vim config -g で devcontainer.vim が使用するための追加設定ファイルのテンプレートを生成できる。
devcontainer.vim config -g --home /home/containerUser > .devcontainer/devcontainer.vim.json
使用できるオプションは以下:
-g: 設定生成フラグ-o: 生成した設定の出力先ファイルを指定(default: STDOUT)--home: 設定テンプレート内のホームディレクトリのパス
Vim のカスタマイズ
devcontainer.vim vimrc -o で、コンテナ上で実行する Vim に、追加で読み込ませるスクリプトが開きます。
このスクリプトを更新することで、コンテナ上の Vim のみに適用させたい設定ができます。
デフォルトでは、以下の内容になっています。
(ノーマルモードで "*yy, ヴィジュアルモードで "*y でホストへ " レジスタの内容を送信する)
好みに応じて修正してください。
nnoremap <silent> "*yy yy:call SendToCdr('"')<CR>
vnoremap <silent> "*y y:call SendToCdr('"')<CR>
また、デフォルトに戻したい場合には、 -g オプションで vimrc を再生成してください。
devcontainer.vim vimrc -g
run サブコマンドの引数のカスタマイズ
devcontainer.vim runargs -o で、 run サブコマンドへ暗黙的に設定される引数設定ファイルが開きます。
このファイルを更新することで、暗黙的に適用させたい引数が指定できます。
デフォルトでは、以下の内容になっています。
(カレントディレクトリを /work へマウントし、ワーキングディレクトリも同じ場所へ設定)
好みに応じて修正してください。
-v "$(pwd):/work" -v "$HOME/.vim:/root/.vim" --workdir /work
また、デフォルトに戻したい場合には、 -g オプションで runargs を再生成してください。
devcontainer.vim runargs -g
Requirements:
以下コマンドがインストール済みで、PATH が通っていること。
- docker
Features:
- : v0.1.0
- : docker run 対応
- : コンテナの起動
- : AppImage 版 Vim のダウンロードとコンテナへの転送
- :
devcontainer.vimへの引数とdockerへの引数を指定できるようにする- :
runコマンドとして実現
- :
- : docker run 対応
- : v0.2.0
- :
devcontainer.jsonのcomposeContainer対応- : dockerComposeFile
- : service
- : workspaceFolder
- : remoteUser
- :
- : v0.3.0
- :
devcontainer.jsonのnonComposeBase対応
- :
- : v0.4.0
- : down コマンドの実装
- :
composeContainerとnonComposeBaseの判定- :
devcontainer read-configurationの結果にdockerComposeFileが含まれているかで判定
- :
- :
composeContainerの場合docker compose ps --format jsonしてProjectの値を取得し、docker compose -p ${PROJECT_NAME} downする
- :
nonComposeBaseの場合docker ps --format jsonしてLabels内にdevcontainer.local_folder=xxxが含まれており、xxxが現在のディレクトリと一致するものを探し、そいつの ID でdocker rm -f ${CONTAINER_ID}する
- :
- : down コマンドの実装
- : v0.5.0
- : devcontainer.vim のみが利用する設定に関する仕組みを追加
- :
devcontainer.jsonとdevcontainer.vim.jsonをマージしてからコンテナを起動する - : キャッシュディレクトリ内の構造整理
- :
- :
devcontainer.vim.jsonの設定例出力機能- : 標準出力
- : ファイルパス指定(
-oオプション)
- : Windows 向けに環境変数をセット
USERPROFILE->HOME
- : config コマンドの実装
- : リリーススクリプト・リリースワークフローを作る
- : devcontainer.vim のみが利用する設定に関する仕組みを追加
- : v0.6.0
- :
devcontainer upの出力を表示する - :
devcontainer templates applyコマンドを使えるようにする
- :
- : v0.7.0
- : Vim アップデートコマンドを追加
- : v0.8.0
- : クリップボード転送機能追加
- TCP でテキストを待ち受け、受信したテキストをクリップボードへ反映するプログラムを作る
- TCP ソケット通信する関数、ヤンク処理時にテキスト送信をするマッピングを実装したスクリプトを作る
docker cpで/SendToTcp.vimにコピーし、-c "source /SendToTcp.vimする
devcontainer.vim起動時に「1.」のプログラムを実行- 多重起動防止のために既にプログラムが実行済みかどうかを確認する必要がある
- 終了時にも、「他の
devcontainer.vimが存在するか」を確認して終了させるか判定
- : クリップボード転送機能追加
- : v0.9.0
- : run サブコマンドのデフォルト引数を自分で指定できるようにする
- :
<os.UserConfigDir>/devcontainer.vim/runargsにデフォルトで付与したい引数を記載する - ※ sh にパスの通った Linux のみで有効。(Windows PowerShell でシェル変数の展開が上手くできないため)
- :
- : run サブコマンドのデフォルト引数を自分で指定できるようにする
- : v0.10.0
- : キャッシュクリアコマンド
- : アンインストールコマンド
- : v0.11.0
- : stop コマンドの実装
- : v0.12.0
- : テンプレートリスト出力機能
devcontainer.vim templates applyに渡す--template-idとして使える ID の一覧を出力
- : テンプレートリスト出力機能
Limitation:
- amd64 のコンテナしか使用できません
- alpine 系のコンテナでは使用できません
Install:
binary download
go install
go install github.com/mikoto2000/devcontainer.vim@latest
Uninstall:
Windows
Delete executable file, config directory(~/AppData/Roaming/devcontainer.vim), and cache directory(~/AppData/Local/devcontainer.vim).
Remove-Item PATH_TO/devcontainer.vim.exe
Remove-Item -Recurse ~/AppData/Roaming/devcontainer.vim
Remove-Item -Recurse ~/AppData/Local/devcontainer.vim
Linux
Delete executable file, config directory(~/.config/devcontainer.vim), and cache directory(~/.cache/devcontainer.vim).
rm PATH_TO/devcontainer.vim
rm -rf ~/.config/devcontainer.vim
rm -rf ~/.cache/devcontainer.vim
MacOS
TODO:
License:
Copyright (C) 2024 mikoto2000
This software is released under the MIT License, see LICENSE
このソフトウェアは MIT ライセンスの下で公開されています。 LICENSE を参照してください。
Author:
mikoto2000 mikoto2000@gmail.com
Documentation
¶
There is no documentation for this package.