Table of Contents
はじめに
GMOペパボEC Advent Calendar 2023 の3日目です。2日目はやんまーくんでした。
https://adventar.org/calendars/8672/embed
最近Web開発が多くなってきたので、Android StudioやXcodeなどのIDEから、Neovim(nvim)に引っ越しました。
ようやく、矢印キーでの移動をやめてhjklで移動するようになった自分が使っているプラグインや設定について紹介したいと思います。
設定たち
先に自分のdotfilesのリポジトリを貼っておきます。この中から紹介します。
| ツール | バージョン |
|---|---|
| nvim | 0.9.4 |
| iTerm2 | Build 3.4.22 |
folke/tokyonight.nvim
https://github.com/folke/tokyonight.nvim
テーマは、tokyonight.nvimを使っています。tokyonightの中にさらにStorm、Night、Moon、Dayの4つがあります。自分は、Stormを使っています。おしゃれでいい感じです。
numToStr/Comment.nvim
https://github.com/numToStr/Comment.nvim
コメントアウトするために使ってます。カーソル行をコメントアウトするときgcc 、範囲選択した行をコメントアウトするときはgc と入力するとコメントアウト出来ます。
folke/noice.nvim
https://github.com/folke/noice.nvim
コマンドを入力するときや、Waring、Errorの表示をポップアップ形式(?)で表示するプラグインです。
コマンドを入力するときのUI
非常に便利なのですが、LSPなどの起動時のWaringも表示するので、noiceで画面上が埋め尽くされるということがあります。表示するメッセージを絞るfilter機能もあります。こちらを使うことでフィルタリングも出来ます。自分の設定も載せておきます(追加が面倒で最近は設定を諦めました…)。
-- このような関数を作って使いまわしています。local function ignore_msg(kind, msg) return { filter = { event = "msg_show", kind = kind, find = msg, }, opts = { skip = true }, }end
require("noice").setup({ routes = { -- 関数を呼び出して楽に設定できるようになりました。 ignore_msg("", "render_symbol_winbar"), ignore_msg("lua_error", "CursorMoved"), ignore_msg("lua_error", "SagaSymbolUpdate"), },})vim-scripts/copypath.vim
https://github.com/vim-scripts/copypath.vim
現在開いているファイルファイル名やパスを取得できるプラグインです。
使い方は簡単で、CopyFileName でファイル名を、CopyFilePathで絶対パスをコピーできます。相対パスはコピーできないのですが、PR自体は立っているので参考(もしくはこのPR元のリポジトリを指定)にすればうまく動きそうです。
https://github.com/vim-scripts/copypath.vim/pull/1
nvimdev/lspsaga.nvim
https://github.com/nvimdev/lspsaga.nvim
Language Server(LS)の結果を表示するUIをかっこよくするプラグインです。
変数の使用箇所を表示している様子
いろんな機能があって、設定のドキュメントも充実しているので初心者の自分にも優しかったです。
HiPhish/rainbow-delimiters.nvim
https://github.com/HiPhish/rainbow-delimiters.nvim
カッコを虹色にするプラグインです。Android Studioで開発をしているときにRainbow Bracketsというプラグインを使っていたので、似たようなプラグインをnvimでも探したところ、これを見つけました。
tpope/vim-rails
https://github.com/tpope/vim-rails
Rails開発をするときに便利なプラグインです。色々機能はあるのですがまだまだ使いこなせていません…ここでは、自分が使っているコマンドの一部を紹介します。以下のコマンドを実行することで、現在開いているファイル名から推測してファイルを開きます。
| コマンド | 何をするか |
|---|---|
| Eview | Viewを開く |
| Econtroller | Controllerを開く |
| Eunitest | Unittestを開く |
| Emodel | Modelを開く |
デフォルトのままでもある程度はファイルを開いてくれるのですが、ControllerからRequestのテストファイルを開くことが出来ませんでした。そのため設定を追加しました。
これを応用すれば、開けないファイルがあってもある程度は制御できそうです(下のserviceは自分が適当に追加した設定なのでRequestだけを開きたいなら無視して大丈夫です)。
vim.cmd([[ let g:rails_projections = { \ "app/controllers/*_controller.rb": { \ "test": [ \ "spec/controllers/{}_controller_spec.rb", \ "spec/requests/{}_spec.rb" \ ], \ }, \ "spec/requests/*_spec.rb": { \ "alternate": [ \ "app/controllers/{}_controller.rb", \ ], \ }, \ "app/services/*_service.rb": { \ "test": [ \ "spec/services/{}_service_spec.rb", \ "spec/services/{}_spec.rb" \ ], \ }, \ "spec/services/*_spec.rb": { \ "alternate": [ \ "app/services/{}_service.rb", \ ], \ }} ]])Luaに置き換えたい…
andymass/vim-matchup
https://github.com/andymass/vim-matchup
%を入力すると対応するカッコに移動するプラグインです。vモードで範囲選択するときに便利で、vモード→%で一気に範囲選択できます。
その他
その他のnvim自体の設定についてです。
local keymap_opts = { noremap = true, silent = true }local opt = vim.optvim.g.mapleader = " " -- leaderキーをSpaceに割当vim.keymap.set("n", "<ESC><ESC>", ":nohlsearch<CR>", keymap_opts) -- ESC連打でハイライトを消すvim.keymap.set("n", "<leader>a", "ggVG", { noremap = true }) -- スペース+aで全選択opt.whichwrap = "b,s,h,l,<,>,[,]" -- 左右のキーで行をまたぐvim.opt.swapfile = false -- swapファイルを作らない-- undoの永続化if vim.fn.has("persistent_undo") == 1 then opt.undodir = vim.fn.expand("~/.config/nvim/undo") opt.undofile = trueend最後に
普段自分が使っているプラグインであまり他の人が使ってなさそうなものをピックアップして紹介しました。改めて見直すとUIをカスタマイズする系の設定が多かったです。
今後はpakcerで管理しているプラグインをlazyに移行したいなと思っています。が、腰が重く全然やってません…
明日のアドベントカレンダーはいかちゃんです。