【2023/4】開発環境(tmux+neovim)
開発環境のメモ。
土日に開発環境(おもにNeovimやZshのプラグイン)をいじったりするのが趣味なので、あとで見返せるように記録でもつけておこうと思う。(以前からどう進化したのか見えるとモチベ上がるので)
dotfiles
基本的な構成
基本的にはtmux、neovimを使って端末エミュレータに閉じこもって開発をしている。
tmuxでは、リポジトリ・プロジェクト毎にウィンドウ(またはセッション)を作成しており、その中でさらにNeovimの画面分割やToggleTermなどで作業スペースを分割している。
上の画像では、tmuxで”editor”、"shell"、"log"の3つのウィンドウを作成し、それぞれで役割分担をしている(tmuxは画面複製の機能に近いと思う)。こうしないとエディタを開いたり閉じたりしてめんどくさくなってしまう。
Tmux
上でも軽く説明したが、tmuxは画面複製の機能に近いようなもので、これを使うと端末エミュレータの画面やセッションを複数保持しながら開発をすることが出来るようになる。
設定は~/.tmux.conf
に大体書いてある。(~/.tmux.conf.local
というローカル設定も作れるので、「この環境だけでこれを設定したい」などもできる。)
プラグイン
tpm
tmuxのプラグインマネージャー。
tmux-sensible
tmuxの基本的に有益と思われる設定をしてくれるらしいプラグイン。
(実は具体的に何を設定しているのかよくわかっていないがとりあえず入れているw)
tmux-reccurent
PCの再起動などで失われたtmuxセッションを復活させてくれるプラグイン。
tmux-continuum
tmux-reccurentとセットで使うものだった気がする。
tmux-open
tmux内でファイルパスやURLがあった場合にショートカットで開けるようにするプラグイン。
その他もちょっと入っているが、必須なのはここらへん。
Neovim
基本的にはNeovimを使って開発をしている。
設定ファイル構成
全てluaで設定を書いている。
ちょっと工夫しているのが、プラグインを分類ごとにファイルを分けているところ。
(例:completion.lua
には補完系のプラグインが集約されている)
/home/yuuki/.config/nvim
├── init.lua
└── lua
├── base # 基本設定
│ ├── indent.lua
│ ├── init.lua
│ ├── keymap.lua
│ ├── plugin_manager.lua
│ └── setting.lua
└── plugins # プラグイン
├── completion.lua
├── dependencies.lua
├── diagnostics.lua
├── git.lua
├── highlight.lua
├── lsp.lua
├── search.lua
├── statusline.lua
├── surround.lua
├── term.lua
├── utils.lua
└── visual.lua
そういえばちょっとだけ困っていることがあるんだった。
プラグインを分類ごとに違うファイルにできたのは良かったけど、プラグイン同士の依存があったりして完全に独立にはできていないんだよね(別の分類だけど片方を消すともう片方が動かなくなる感じ)。良い解決策ないかな(dependencies
とか作っとくと自動でインストールしてくれるとか)
プラグイン
補完系(completion.lua)
- hrsh7th/cmp-(nvim-lsp|buffer|path|cmdline|)
- hrsh7th/nvim-cmp
- SirVer/ultisnips
- honza/vim-snippets
Neovimの補完系のnvim-cmp
とcmp-*
あたりは必須なプラグイン。
こんな感じでLSPやスニペットなどからの補完を行ってくれる(ちなみに自動でトリガーされるように設定してあるが、特定の動作をした時のみに補完ウィンドウがでるような設定も可能)
その他にはスニペット系のultisnip
(エンジン)とそのスニペットの実体vim-snippets
を入れている。
警告系(diagnostics.lua)
- folke/trouble.nvim
これはLSPなどから警告(diagnostics)を受け取ってエディタの左側に表示してくれるプラグイン。
ちなみに:Trouble
コマンドでquickfixにて警告が出ている場所の一覧も見れる。
Git連携(git.lua)
- kdheepak/lazygit.nvim
これも必須プラグインで、LazygitをNeovimの中から使えるようにしたもの。
これのおかげでgitを使うときもいちいちToggleTermを開かなくてよくなるし、そもそも操作が簡略化されていてとても使いやすい。
ハイライト系(highlight.lua)
- nvim-treesitter/nvim-treesitter
これはデフォルトのNeovimのハイライトをさらに強化してくれるもの。
デフォルトでは組み込み関数でないとハイライトしてくれないところを、treesitterであればユーザが定義した関数もちゃんとハイライトしてくれてたりする。
LSP系(lsp.lua)
- williamboman/mason.nvim
- williamboman/mason-lspconfig.nvim
- neovim/nvim-lspconfig
LSPの管理にはMasonを主に使っている。MasonはちょっとりっちなUIで各言語のLSP、Linter、Formatterの管理(インストールも)ができるもので、mason-lspconfig.nvimはneovimのlspconfig(LSP設定用のプラグイン)とMasonの橋渡しをしてくれるものとなっている。
(mason-lspconfig.nvimを適切に設定しているとMasonから直接インストールするだけでちゃんと動く)
検索系(search.lua)
- nvim-lua/plenary.nvim
- nvim-telescope/telescope.nvim
Neovimの中からファイル名、文字列などを検索することが出来るプラグイン。(めっちゃ必須)
ファイル検索:
文字列検索:
その他いろいろな種類の検索:
ステータス系(statusline.lua)
- nvim-lualine/lueline.nvim
括弧系(surround.lua)
- jiangmiao/auto-pairs
- machakann/vim-sandwich
括弧やクォーテーションなどを自動で閉じたり、特定の部分を任意の文字列で囲うことが出来るプラグイン。
ターミナル系(term.lua)
- akinsho/toggleterm.nvim
Neovimの中でもコンソールを表示・非表示することが出来るようになっている。
Util系(utils.lua)
- tpope/vim-commentary
- jackMort/ChatGPT.nvim
これはいろいろ便利機能のあるものを入れる予定のファイルで、現在はコメントプラグインとChatGPTプラグインを入れている。
見た目系(visual.lua)
- catppuccin/nvim
- lukas-reineke/indent-blankline.nvim
- folke/noice.nvim
見た目をいい感じにするプラグインを集めている。
カラースキームはcatppuccinを使用しており、そのためにcatppuccin/nvimのプラグインを入れている。noice.nvimはNeovimのメッセージをFloating Windowで見やすくする機能。
とりあえず現状はこんな感じになっている。
Discussion