Tmux+NeovimでJetBrains IDEのScratchみたいな機能を実現している話
目次
任意の構成のSandbox的な環境をTmuxのwindowとして用意するようにしたところターミナルから出ずにサクっと動作検証とかが行えてハッピーになったよ、という記事。ここではvanillaなGoのプロジェクトの例を紹介しますが、お好みの構成でSandbox環境を作ってみてください。
全然大したことをやっているわけではないですがTmux, Neovimやそれらのプラグインの普及活動になれば嬉しいので書いてみます。
動作イメージ⌗
こんな感じでvanillaのGoプロジェクトをTmuxのwindowに開いておいて、確認したくなったときにすぐwindowを切り替えてコードを書いて実行結果を確認できるようにしている。(Gifの例はGoの書式指定子%+v
の動作を忘れて試してみているところ)
Gifでやっていることは以下
- GoのSandbox環境を開いたNeovimが起動しているwindowに切り替え
- コードを書く
- Neovim上でターミナルを表示
make run
を実行してコード実行- 結果を確認
- 元いたwindowに戻る
tmux-fzfなど筆者のターミナル環境については以下参照
筆者はGoの動作を確認したいことがほとんどなのでこういった構成にしているが、必要に応じてよく使うFWをセットアップした環境を作っておくと便利そう。
プロジェクトの内容⌗
Go固有の内容もあるので参考程度で。
├── .git
├── .gitignore
├── go.mod
├── go.sum
├── main.go
├── main.go.sample
├── main_test.go
└── Makefile
基本的にmain.go
の中身を編集して、go run .
で実行して実行結果を確認するということをしている。
Makefile
の中身は以下のような感じになっていて、make run
でコード実行、make clear
でmain.go
をまっさらにできるようにしているだけである。
.PHONY: run clear
run:
@go run .
clear:
@cp ./main.go.sample ./main.go
main.go.sample
の内容は以下。
package main
func main() {
}
あとはよく見返したくなるコードはmain.go
以外のファイル名で保存したり、commitしておくと後からでもさっと確認できてよさそう。(筆者はそこまでやってない)
感想⌗
ターミナルから出ずに作業が完結できてうれしい。
同様のことはGoの場合はブラウザからThe Go Playground(※)を開いても行えるが筆者は何でもターミナルでできると嬉しい人なのでできるようにしてみた。
※ブラウザ上で実行できるGoのエディタ + 実行環境がセットになったやつ。https://go.dev/play/
あとやるとしたらThe Go PlaygroundにあるURL発行機能とかを実現できると他の人への共有も楽になっていいのかもしれない。(今のところあんまり他の人に共有する機会がないので困っていない)
補足⌗
最後に補足としてGif内で使っているNeovimのプラグインを紹介します。
ターミナル表示⌗
GoのSandbox環境のmain.go
に書いたスクリプトを実行するために、Neovimからターミナルを表示するシーンで使っている。
コード編集してサクっと動作確認したいときなどに便利。(といいつつ最近動作の重さが目立ってきたので<C-z>
でNeovimの起動元に戻ってターミナルを操作することが多い)
カーソル移動⌗
fmt.Printf("u: %v\n", u)
のu
から%v
の位置にカーソル移動する際に使っているプラグイン。
動作のイメージはこんな感じ。
起動すると文字がグレーアウトするのでジャンプしたい文字列を入力するとその文字にジャンプするためのキーワードを表示してくれるというプラグイン。
同様の機能をもつプラグインとしてはeasy-motionなどのプラグインが有名だが、fuzzy-motionはジャンプしたい文字列をfuzzy-finder形式で絞り込んでくれるのが大きな特徴。(詳しくはリポジトリのREADME参照)
筆者はノーマルモードでf
キーを押下するとプラグインが起動するように設定している。
カーソル移動の効率がよすぎて正直もうこれなしでは開発したくない。
LSP Server⌗
Language Serverをホストするためのプラグイン。
すごく簡単にいうと補完や関数定義を表示したり定義ジャンプできるようにしたりしてくれる。
以上です。ここまで読んでくれてありがとうございました。