grasys blog

ターミナルがダサいとモテない。neovim + AstroNvim 紹介編

シリーズ記事一覧

neovim + AstroNvim を使っていますか?

Photo by Joan Gamell on Unsplash

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 User としてはめっちゃ新人です。

Home – 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 をパワーアップしてくれるものだと考えてください。

AstroNvim

Neovim にはたくさんの拡張セットがあります。

有名どころだとこれらかなぁ

まだまだいっぱいあります。
Preconfigured Configuration | Awesome Neovim を見るとたくさんあることがわかります。

Requirements

ここでは AstroNvim の Requirement を入れていきましょう。

こちらをまず見てください。

Getting Started

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

Tree-sitter|Introduction

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

こちらを参考にしてください。

Managing User Configuration

自分は .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 を使っています。

やっぱり改めて見てみると使ってないのがあるなぁ。。

${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 でもいいし anyenvpyenvRye などで Install しても良いです。

Rye は最近の Update で Rye の Project の ContextRoot 以外でも使える Default の Python が設定されるようになったので、ちょっと System 的に困ることがなくなりました。

Node なら、brew で入れてもいいし anyenvnodenv でもいいし 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

最後に

この記事で今まで書き綴ってきた『ターミナルがダサいとモテない。』シリーズは一旦完結となります!
いかがでしたか?

みなさんがご自身のターミナル環境を設定する参考にしていただり、これまでデフォルトのターミナルをお使いだった方には少しでも面白い世界があることを感じてもらえていると嬉しいなと思います。

またお会いしましょう!

シリーズ記事一覧


採用情報
お問い合わせ