目次
シリーズ記事一覧
neovim + AstroNvim を使っていますか?
Unsplash にまったく neovim っぽいのが無くてもう全然違うリッチな IDE の画像を貼ってしまいました・・・
恵比寿で IT 企業をやっているとモテると聞いて創業しましたが早いことありがたいことに10年目に突入した長谷川です。
まだモテる成果は出ていません、、、これからです!(もうめんどくさいのでカウントやめましたw)
今回は Neovim と AstroNvim を紹介していきます。
Neovim
vi はすごく大昔から、それも自分が触り始めた20数年前より昔からある Editor ですね。
とてもいろんな Version や亜種を触ってきた気がする・・・
お仕事で触ってきた OS をちょっと思い出してみると・・・
Solaris も7くらいから(実は9初めて触ってそこから7触ったw)
FreeBSD っていくつから触ってるっけ・・・
Redhat ももう覚えてない
TurboLinux とか VineLinux とか
SUSE もあるなぁ
Debian もわからん
Ubuntu は出たばかりの頃から
(というか記憶がほとんどないじゃないかw)
なぜ OS を思い出してみたかというと vi って実はいろいろあって
vi っていってもいろんなバージョンが存在してます。
なんなら vi ですらないことの方が最近だと多いんじゃないかな・・・
あまりにも普通にある(最近違うかも)し、しかもちょっとサーバの設定をする程度じゃ version も確認しないのでなんの vi 触ってるのか把握しないでサーバ弄くることもよくある気がする・・・
自分はおじさんだけど、 vimmer としては凝っている User ではないです。
やっても vim で Perl Support 入れたりとかかなぁ
理由としては業務的にもサーバ系のインフラエンジニアをやってきているため、サーバが異なると環境が異なってしまい、あまり vi の設定自体はこだわらないようにしてきてます。
それでも10年くらいかな? vim の設定を育ててたりはする。
macOS や自分のサーバの中はやっぱり持ち回ってる .vimrc を育ててた。
自分の .vimrc でやってる時代がけっこう長くて、最近はエンジニアっぽいことあまりやれないので、local の macOS で実は一昨年くらいから neovim に入れ替えました。
Neovim Official の Sponsor にWarp Terminal がいるw
Install
macOS なら普通に homebrew にあります。
brew install neovim
Config
Neovim は .vimrc も読めるんだけど、Lua で書いた方が柔軟性や拡張性があるので初めて触る人は Lua で書き始めた方が良いと思います。
自分は .vimrc を移植してしばらくして、結局 Lua にすべて入れ替えました。
でいろいろ Lua の Config いじっているうちに、Lua がちょっと書けるようになってきて・・・
そうこうしているうちに結局自前で全部書くのやめて AstroNvim にガサっと入れ替えるという流れで触ってきてますねw
Awesome Neovim
まず Awesome List を見てみましょう!
めっちゃいっぱいあるので楽しい時間が過ごせそうです。
いろいろ入れてみて触ってみてぶっ壊しての繰り返しすると楽しいはずです。(最近はそんな時間無いけど・・・)
GitHub — rockerBOO/awesome-neovim: Collections of awesome neovim plugins.
AstroNvim
Neovim をパワーアップしてくれるものだと考えてください。
Neovim にはたくさんの拡張セットがあります。
有名どころだとこれらかなぁ
まだまだいっぱいあります。
Preconfigured Configuration | Awesome Neovim を見るとたくさんあることがわかります。
Requirements
ここでは AstroNvim の Requirement を入れていきましょう。
Requirements が列挙されています。
AstroNvim をちょっと触ってみたいだけなら、Font と Tree-Sitter だけでいいと思います。
LSP(Language Server Protocol) とかも含めると Node なども必要になりますが後述します。
まず AstroNvim を立ち上げられるところを優先します。
Nerd Fonts
これはお好きなのを適当に入れてください。
Nerd Fonts をもうすでに利用しているなら読み飛ばしてください。
参考に自分は Moralerspace を利用しています。
Version
AstroNvim の要求は v0.8 以上みたいですね。
homebrew で入れると今なら v0.9.5(2024/03/20時点)だと思うので問題なしです。
❯ nvim --version
NVIM v0.9.5
Build type: Release
LuaJIT 2.1.1710088188
システム vimrc: "$VIM/sysinit.vim"
省略時の $VIM: "/opt/homebrew/Cellar/neovim/0.9.5/share/nvim"
Run :checkhealth for more info
Tree-Sitter CLI
tree-sitter/cli/README.md at master · tree-sitter/tree-sitter
Install は homebrew で入ります。
brew install tree-sitter
Install AstroNvim
Neovim 自体は XDG_CONFIG_HOME な構成です。
つまり ${HOME}/.config/nvim に AstroNvim の構成ファイルを展開する形で Setup されます。
Install AstroNvim: Make a backup of your current nvim folder
もし Neovim を既に使ってるなら以下のコマンドでバックアップ取りましょう。
Installation | Getting Started | AstroNvim Docs にも記載があります。
test -d ${HOME}/.config/nvim && mv ${HOME}/.config/nvim ${HOME}/.config/nvim.bak
test -d ${HOME}/.local/share/nvim && mv ${HOME}/.local/share/nvim ${HOME}/.local/share/nvim.bak
test -d ${HOME}/.local/state/nvim && mv ${HOME}/.local/state/nvim ${HOME}/.local/state/nvim.bak
test -d ${HOME}/.cache/nvim && mv ${HOME}/.cache/nvim ${HOME}/.cache/nvim.bak
Clone the repository
以下のコマンドで AstroNvim の配置ができます。
git clone --depth 1 https://github.com/AstroNvim/AstroNvim ~/.config/nvim
Managing User Configuration
自分の設定ファイルは以下の形で配置します。
git clone --depth 1 https://github.com/AstroNvim/user_example ~/.config/nvim/lua/user
自分は .git は邪魔なので削除しています。
rm -rf ~/.config/nvim/lua/user/.git
自分の設定を紹介
${HOME}/.config/nvim/lua/user/init.lua
まず Dracula Theme にします。
-- Set colorscheme to use
colorscheme = "dracula",
${HOME}/.config/nvim/lua/user/options.lua
Clipboad とかの設定が入っています。
-- set vim options here (vim.<first_key>.<second_key> = value)
return {
opt = {
-- set to true or false etc.
relativenumber = false, -- sets vim.opt.relativenumber
number = true, -- sets vim.opt.number
spell = false, -- sets vim.opt.spell
signcolumn = "auto", -- sets vim.opt.signcolumn to auto
wrap = false, -- sets vim.opt.wrap
termguicolors = true,
pumblend = 20, -- popupmenu opacity
winblend = 30, -- floating windows opacity
mouse = "a",
clipboard = "unnamedplus",
},
g = {
mapleader = " ", -- sets vim.g.mapleader
autoformat_enabled = true, -- enable or disable auto formatting at start (lsp.formatting.format_on_save must be enabled)
cmp_enabled = true, -- enable completion at start
autopairs_enabled = true, -- enable autopairs at start
diagnostics_mode = 3, -- set the visibility of diagnostics in the UI (0=off, 1=only show in status line, 2=virtual text off, 3=all on)
icons_enabled = true, -- disable icons in the UI (disable if no nerd font is available, requires :PackerSync after changing)
ui_notifications_enabled = true, -- disable notifications when toggling UI elements
resession_enabled = false, -- enable experimental resession.nvim session management (will be default in AstroNvim v4)
clipboard = {
name = "macOS-clipboard",
copy = {
["+"] = "pbcopy",
["*"] = "pbcopy",
},
paste = {
["+"] = "pbpaste",
["*"] = "pbpaste",
},
cache_enabled = 0,
},
},
}
Plugins
自分は以下の Plugin を使っています。
- lewis6991/impatient.nvim
- ray-x/starry.nvim
- tpope/vim-surround
- keaising/im-select.nvim
- arminveres/md-pdf.nvim
- xiyaowong/transparent.nvim
- averms/black-nvim
- gorbit99/codewindow.nvim
やっぱり改めて見てみると使ってないのがあるなぁ。。
${HOME}/.config/nvim/lua/user/plugins/user.lua で設定していきます。
全部紹介するとめちゃくちゃ長くなるのでひとつだけにします。
Plugin: keaising/im-select.nvim
この Plugin は神です。
Neovim にはいくつかの Mode があります。
- Insert Mode
- Normal Mode
- Command Mode
- Visual Mode
- Terminal Mode
Mode の切替時に IME の有効無効をコントロールしてくれます。
vi 使っている人はわかると思いますが、稀に日本語を入力したいときがあります。その際に Insert Mode から Normal Mode に Esc で抜けて Command 入れてみたいなタイミングで IME の On/Off がけっこう手間だという瞬間が多いのではないでしょうか?
それを解決してくれます。
Install: im-select
brew tap daipeihust/tap
brew install im-select
which im-select
/opt/homebrew/bin/im-select
GitHub – daipeihust/im-select: 📟 Switch your input method through terminal
Install and setup this plugin
${HOME}/.config/nvim/lua/user/plugins/user.lua
GitHub – keaising/im-select.nvim: Switch Input Method automatically depends on Neovim’s edit mode
こちらを参考にして設定してください。
自分は以下のような設定になっています。
-- Imput Method Environments: im-select
{
"keaising/im-select.nvim",
lazy = false,
config = function()
require("im_select").setup {
-- IM will be set to `default_im_select` in `normal` mode
-- For Windows/WSL, default: "1033", aka: English US Keyboard
-- For macOS, default: "com.apple.keylayout.ABC", aka: US
-- For Linux, default: "keyboard-us" for Fcitx5 or "1" for Fcitx or "xkb:us::eng" for ibus
-- You can use `im-select` or `fcitx5-remote -n` to get the IM's name you preferred
default_im_select = "com.google.inputmethod.Japanese.Roman",
-- Can be binary's name or binary's full path,
-- e.g. 'im-select' or '/usr/local/bin/im-select'
-- For Windows/WSL, default: "im-select.exe"
-- For macOS, default: "im-select"
-- For Linux, default: "fcitx5-remote" or "fcitx-remote" or "ibus"
default_command = "/opt/homebrew/bin/im-select",
-- Restore the default input method state when the following events are triggered
set_default_events = { "VimEnter", "FocusGained", "InsertLeave", "CmdlineLeave" },
-- Restore the previous used input method state when the following events are triggered
-- if you don't want to restore previous used im in Insert mode,
-- e.g. deprecated `disable_auto_restore = 1`, just let it empty `set_previous_events = {}`
set_previous_events = { "InsertEnter" },
-- Show notification about how to install executable binary when binary is missing
keep_quiet_on_no_binary = false,
}
end,
},
Google Japanese Input を利用しているので
default_im_select = “com.google.inputmethod.Japanese.Roman”,
im-select は Full Path で設定しています。
default_command = “/opt/homebrew/bin/im-select”,
GitHub – keaising/im-select.nvim: Switch Input Method automatically depends on Neovim’s edit mode
Optional Requirements
ここからは Optional なので必須ではないです。
Optional Requirements: ripgrep
grep の新しいやつです。rg コマンドですね。
これも普通に homebrew にあります。
brew install ripgrep ripgrep-all
grep よりパワフルだしとても使いやすいです。
ただあちこちで容易によく使う Shell Script などに組み込むと入ってないと動かなくなるのでちょっと考えものではありますw
GitHub – BurntSushi/ripgrep: ripgrep recursively searches directories for a regex pattern while…
Optional Requirements: lazygit
CLI の git client です。
自分もよく使っています。homebrew にあります。
brew install lazygit
GitHub – jesseduffield/lazygit: simple terminal UI for git commands
Optional Requirements: go DiskUsage()
du の go で実装された新しいやつです。
これも homebrew にあったりする。
brew install gdu
GitHub – dundee/gdu: Fast disk usage analyzer with console interface written in Go
Optional Requirements: bottom
top の新しいやつです。(さっきから新しいやつって表現はなんだ?w)
rust で実装されてて、自分は macOS の中限定で top コマンドを bottom で置き換えちゃってます。
そしてけっこう homebrew に普通にあるという・・・
brew install bottom
GitHub – ClementTsang/bottom: Yet another cross-platform graphical process/system monitor.
Optional Requirements: Python & Node
Python と Node が必要です。特に LSP(Language Server Protocol)で利用されます。
まあ何かのプログラミング言語の LSP を利用しないのであれば必須ではありません。
初めて触るのであれば、要件要求が高まると障壁が上がってしまうのでまず Neovim に AstroNvim を組み込む程度にとどめて後で考えてもいいかもです。
Python であれば、System Default でもいいし anyenv で pyenv や Rye などで Install しても良いです。
Rye は最近の Update で Rye の Project の ContextRoot 以外でも使える Default の Python が設定されるようになったので、ちょっと System 的に困ることがなくなりました。
Node なら、brew で入れてもいいし anyenv で nodenv でもいいし volta でも良いです。
ちょっと余談ですが、自分は node でごにょごにょしないので node の version manager と npm(pnpm)で個別に node の CLI ツールなどを管理するのがめんどくさくてw
node の CLI ツール使いたいときはいまのところ、Volta で固めてます。
Appendix: NeovimとPreconfigured Configuration
Install AstroNvim の項でも説明しましたが、
Neovim 自体は XDG_CONFIG_HOME な構成です。
つまり ${HOME}/.config/nvim に AstroNvim の構成ファイルを展開する形で Setup されます。
つまりちょっとめんどくさいですが、環境変数や呼び出しを Control することで先ほど紹介した他の Preconfigured Configuration を個別に Install することもできます。
Example: lunarvim
lunarvim の構成ファイルを ${HOME}/.config/lvim として展開し、下記の script を PATH 通すことで、lunarvim も同時に使い分けることができます。
${HOME}/.local/bin/lvim
#!/usr/bin/env bash
export NVIM_APPNAME="${NVIM_APPNAME:-"lvim"}"
export LUNARVIM_RUNTIME_DIR="${LUNARVIM_RUNTIME_DIR:-"/Users/yusukeh/.local/share/lunarvim"}"
export LUNARVIM_CONFIG_DIR="${LUNARVIM_CONFIG_DIR:-"/Users/yusukeh/.config/lvim"}"
export LUNARVIM_CACHE_DIR="${LUNARVIM_CACHE_DIR:-"/Users/yusukeh/.cache/lvim"}"
export LUNARVIM_BASE_DIR="${LUNARVIM_BASE_DIR:-"/Users/yusukeh/.local/share/lunarvim/lvim"}"
exec -a "$NVIM_APPNAME" nvim -u "$LUNARVIM_BASE_DIR/init.lua" "$@"
自分は bash の alias で vi と vim を AstroNvim にしています。
lvim と叩くと lunarvim が呼び出されるようにしています。
#################################################
### environments
# EDITOR
declare -x EDITOR=nvim
#################################################
### neovim
# lunarvim
if [ -x ${HOME}/.local/bin/lvim ]; then
PATH=${PATH}:${HOME}/.local/bin
fi
最後に
この記事で今まで書き綴ってきた『ターミナルがダサいとモテない。』シリーズは一旦完結となります!
いかがでしたか?
みなさんがご自身のターミナル環境を設定する参考にしていただり、これまでデフォルトのターミナルをお使いだった方には少しでも面白い世界があることを感じてもらえていると嬉しいなと思います。
またお会いしましょう!
シリーズ記事一覧
転載:ターミナルがダサいとモテない。neovim+AstroNvim 紹介編(Medium)