【2023/4】開発環境(tmux+neovim)

2023/04/16に公開

開発環境のメモ。
土日に開発環境(おもにNeovimやZshのプラグイン)をいじったりするのが趣味なので、あとで見返せるように記録でもつけておこうと思う。(以前からどう進化したのか見えるとモチベ上がるので)

dotfiles

https://github.com/IwasakiYuuki/dotfiles

基本的な構成

基本的にはtmux、neovimを使って端末エミュレータに閉じこもって開発をしている。
https://github.com/tmux/tmux
https://neovim.io/

tmuxでは、リポジトリ・プロジェクト毎にウィンドウ(またはセッション)を作成しており、その中でさらにNeovimの画面分割やToggleTermなどで作業スペースを分割している。
上の画像では、tmuxで”editor”、"shell"、"log"の3つのウィンドウを作成し、それぞれで役割分担をしている(tmuxは画面複製の機能に近いと思う)。こうしないとエディタを開いたり閉じたりしてめんどくさくなってしまう。

Tmux

上でも軽く説明したが、tmuxは画面複製の機能に近いようなもので、これを使うと端末エミュレータの画面やセッションを複数保持しながら開発をすることが出来るようになる。
https://github.com/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を使って開発をしている。
https://neovim.io/

設定ファイル構成

全て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-cmpcmp-*あたりは必須なプラグイン。
こんな感じで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