みなさん普段エディタは何使ってますか?
僕は日頃エディタは軽い文章作成や開発などはVim、がっつり開発するときはVScodeと使い分けていたんですが、最近はキーバインドをもっと覚えたいと思いVimに一本化していました。
そんなVimを本腰を入れて触ろうとしていた時、NeoVimがモダンな感じでいいよーみたいな情報を聞いてなんとなく移行してみたので、その際に必要だったインストール手順とプラグイン管理のやり方を解説していこうと思います。
最近はGitHubが開発しているAIとペアプロできるサービスの「Copilot」がNeoVimに対応したとの事で今勢いが増しつつあるのでこの際に是非インストールしてみてください。
なお今回の記事はMacでのインストール手順を解説しています。
この記事で少しでもvimmerが増えてくれたら嬉しいです。
目次
そもそもVimとは?
一般の方や駆け出しエンジニアの方はプログラマーといえば、なんかPCに向かって黒い画面にカタカタとわけわからん文字めっちゃ打ち込んでるイメージが強いと思いますが、その黒い画面がVimだと思ってもらっていいです。
Vimは40年前くらいから存在する歴史あるテキストエディタの1つで、他のエディタとの最大の違いはマウスを一切使わずに開発をする所です。
その分コマンドでエディタを操作します。マウスを使わないということはその分手の移動が減るという事なので、スムーズにずっとキーボードに手を置いたまま高速で開発ができるようになります。
ただその慣れれば最高な操作性の反面、習得にものすごい時間とストレスがかかる事は否定できません。
僕も触れて最初の頃は思ったところにカーソルをうまく移動できずに何度VScodeに逃げ帰ったかわかりません。
NeoVimとは、そのVimから派生したテキストエディタで、昔から積み上げられてきた機能や使い勝手を継承しつつも、新しく今時な感じに作り直して拡張性やモダンさを意識した作りになったVimって感じです。
基本的なコマンドはほとんど同じです。Vimで使えるコマンドはNeoVimでも使用可能だと思ってもらって大丈夫です。
Vimコマンドの覚え方の解説は「【Vim】「思考のスピードで編集できる」コマンドの覚え方を現役エンジニアが徹底解説!」でしているのでよければ参考にしてください。
【Vim】「思考のスピードで編集できる」コマンドの覚え方を現役エンジニアが徹底解説!
前置きが長くなりましたがここからそんなNeoVimのインストール方法について解説します。
インストール手順と設定ファイル作成(Mac)
Homebrewからインストール
Macの場合はHomebrewでコマンド1つ叩けばインストール完了です。
念の為アップデートも確認しておきましょう。
($マークはコピペしないでね)
$ brew update
$ brew install neovim
インストール後、一応ちゃんと入っているかバージョンの確認をしておきましょう。
$ nvim -version
NVIM v0.5.1
...
設定ファイル(init.vim)の作成
次にNeoVimの設定ファイルを作成します。設定ファイルはinit.vimというファイル名で、ルートディレクトリ配下の.config/nvimに配置します。
次はこのコマンドを叩きましょう。
$ mkdir -p ~/.config/nvim
$ touch ~/.config/nvim/init.vim
mkdir -pは新規でディレクトリを作成するコマンドです。「-p」は必要に応じて親ディレクトリも一緒に作成してくれるオプションになります。
touchは新規でファイルを作成してくれるコマンドです。
NeoVimの設定ファイルは随時このinit.vimに書き込んでいく形になります。このファイルを自分好みにカスタマイズして自分だけのエディタを作れるのがVimの面白い所でもあるので、是非使い込んで成長させていってみてください。
参考として、自分が使っていて便利だと思った設定を置いておくのでまずはこれをinit.vimにコピペして使ってみてください。
" バックアップファイルを作らない
set nobackup
" スワップファイルを作らない
set noswapfile
" init.vimを保存したら自動反映
autocmd BufWritePost ~/.config/nvim/init.vim so ~/.config/nvim/init.vim
"インデント可視化
set list
set listchars=tab:»-,trail:-,eol:↲,extends:»,precedes:«,nbsp:%
" エンコーディング
set encoding=utf-8
scriptencoding utf-8
"jキーを二度押しでESCキー
inoremap <silent> jj <Esc>
inoremap <silent> っj <ESC>
"help日本語化
set helplang=ja
"行番号を表示
set number
" 挿入モードでバックスペースで削除できるようにする
set backspace=indent,eol,start
" 自動でカッコ等を閉じる
inoremap { {}<LEFT>
inoremap [ []<LEFT>
inoremap ( ()<LEFT>
inoremap " ""<LEFT>
inoremap ' ''<LEFT>
"棒状カーソル"
let &t_SI = "\<Esc>]50;CursorShape=1\x7"
let &t_EI = "\<Esc>]50;CursorShape=0\x7"
inoremap <Esc> <Esc>lh
" ヤンクするとクリップボードに保存される
set clipboard+=unnamed
ここまでがインストールと設定ファイルの作成までになります。
プラグインの導入
(独り言ですが、まだ十分にVim本来の性能に触れていない状態でプラグインを大量に入れるのは個人的にはおすすめできません。本来の性能でも十分に開発は可能なのでまずは操作に慣れていって、不便だと感じたら初めてプラグインの導入を検討するのがいいと思います。)
Vim関係のプラグイン管理ツールはいくつかあるのですが、現在主流なのは「dein.vim」を使うことです。下記はGitHubになります。
https://github.com/Shougo/dein.vim
dein.vimは日本人のShougoさん(暗黒美夢王)が作ったプラグイン管理ツールです。Vim界隈ではすごく有名な方で、便利なプラグインを数多く公開なさっています。
今回はこのdein.vimの導入手順を解説していきます。
なおこのdein.vimはPython3で動いているので事前にインストール必須になります。
Pythonのインストール方法は「【初心者向け】Pythonを学習すると何ができるのかとインストール方法を解説」で解説しているので参考にしてください。
【初心者向け】Pythonを学習すると何ができるのかとインストール方法を解説
今回紹介する手順の最終的なディレクトリ構造は以下になります。
dein.vimのインストール
まず最初にdeinというディレクトリをnvim配下に作成したのち、そこに移動します。
$ mkdir dein
$ cd dein
そこで下記のコマンドを叩きます。
$ curl https://raw.githubusercontent.com/Shougo/dein.vim/master/bin/installer.sh > installer.sh
こんな感じに表示されたらOKです。
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 2243 100 2243 0 0 4184 0 --:--:-- --:--:-- --:--:-- 4200
次に下記のコマンドを叩きます。
$ sh ./installer.sh ~/.config/nvim/dein
こんな感じに表示されたらOKです。
Install to "/Users/{ユーザー名}/.config/nvim/dein/repos/github.com/Shougo/dein.vim"...
git is /usr/local/bin/git
Begin fetching dein...
Cloning into '/Users/{ユーザー名}/.config/nvim/dein/repos/github.com/Shougo/dein.vim'...
remote: Enumerating objects: 62, done.
remote: Counting objects: 100% (62/62), done.
remote: Compressing objects: 100% (54/54), done.
remote: Total 62 (delta 2), reused 26 (delta 0), pack-reused 0
Unpacking objects: 100% (62/62), 78.94 KiB | 279.00 KiB/s, done.
Done.
Please add the following settings for dein to the top of your vimrc (Vim) or init.vim (NeoVim) file:
"dein Scripts-----------------------------
if &compatible
set nocompatible " Be iMproved
endif
" Required:
set runtimepath+=/Users/{ユーザー名}/.config/nvim/dein/repos/github.com/Shougo/dein.vim
" Required:
if dein#load_state('/Users/{ユーザー名}/.config/nvim/dein')
call dein#begin('/Users/{ユーザー名}/.config/nvim/dein')
" Let dein manage dein
" Required:
call dein#add('/Users/{ユーザー名}/.config/nvim/dein/repos/github.com/Shougo/dein.vim')
" Add or remove your plugins here like this:
"call dein#add('Shougo/neosnippet.vim')
"call dein#add('Shougo/neosnippet-snippets')
" Required:
call dein#end()
call dein#save_state()
endif
" Required:
filetype plugin indent on
syntax enable
" If you want to install not installed plugins on startup.
"if dein#check_install()
" call dein#install()
"endif
"End dein Scripts-------------------------
Done.
Complete setup dein!
最後に下記のコードをinit.vimのファイル先頭にコピペします。
{ユーザー名}の箇所は各自書き換えてくださいね。
(先程ターミナルに出力された文字列の、「“dein Scripts—————————–」から「Complete setup dein!」までをコピペすればOKです)
"dein Scripts-----------------------------
if &compatible
set nocompatible " Be iMproved
endif
" Required:
set runtimepath+=/Users/{ユーザー名}/.config/nvim/dein/repos/github.com/Shougo/dein.vim
" Required:
if dein#load_state('/Users/{ユーザー名}/.config/nvim/dein')
call dein#begin('/Users/{ユーザー名}/.config/nvim/dein')
" Let dein manage dein
" Required:
call dein#add('/Users/{ユーザー名}/.config/nvim/dein/repos/github.com/Shougo/dein.vim')
" Add or remove your plugins here like this:
"call dein#add('Shougo/neosnippet.vim')
"call dein#add('Shougo/neosnippet-snippets')
" dein begin
call dein#begin($HOME . '/.config/nvim/dein')
" プラグインリストを収めた TOML ファイル
" 予め TOML ファイル(後述)を用意しておく
let s:toml_dir = $HOME . '/.config/nvim/toml'
let s:toml = s:toml_dir . '/dein.toml'
let s:lazy_toml = s:toml_dir . '/dein_lazy.toml'
" TOML を読み込み、キャッシュしておく
call dein#load_toml(s:toml, {'lazy': 0})
call dein#load_toml(s:lazy_toml, {'lazy': 1})
" Required:
call dein#end()
call dein#save_state()
endif
" Required:
filetype plugin indent on
syntax enable
" If you want to install not installed plugins on startup.
"f dein#check_install()
" call dein#install()
"endif
"End dein Scripts-------------------------
これでパッケージを管理するdein.vim自体のインストールは終了になります。
tomlファイルでプラグインを管理
本来であれば、このinit.vimの「Add or remove your plugins here like this:」下にインストールしたいプラグインを記述すれば問題なく使えるのですが、多くのプラグインを導入していくにあたって可読性が悪くなりますし、読み込み速度にも影響してくるのでプラグインに関しては別にtomlファイルで管理するのが良いとされています。
ここからはtomlファイルでプラグインを管理する方法を記載していきます。
まずnvimディレクトリまで移動して、tomlディレクトリを作成した後に移動します。
そこでdein.tomlとdein_lazy.tomlを作成します。
$ cd ~/.config/nvim
$ mkdir toml
$ touch dein.toml
$ touch dein_lazy.toml
この2つのファイルに導入したいプラグインを記入していきます。
使い分けとしては、
dein.tomlファイルには全体的に使用したい(常に使用する)プラグインを記入します。
例えば「ディレクトリツリーを表示するプラグインを有効にする」とかですね。
dein_lazy.tomlファイルに関しては編集しているファイル毎に適用したいプラグインを記入します。
例えば「.py拡張子の時にはpythonの保管機能を提供してくれるプラグインを有効にする」とかですね。
記入の仕方は
[[plugins]]
repo = 'GitHubの開発者名/GitHubのリポジトリ名'
このような感じでプラグインのGitHubのリポジトリ名をtoml形式で記入していきます。記入したら:wqで保存します。
例としてdein.tomlに「ディレクトリツリーを表示するプラグイン(nerdtree)」を導入してみます。
[[plugins]]
repo = 'preservim/nerdtree'
たったこれだけで導入完了です。
もしプラグインを記入して上手くインストールされていなければNeoVimを開いて下記コマンドでdein.vimをアップデートしてみてください。
:call dein#update()
おわりに
この21世紀令和の時代に便利なIDEやエディタが世の中に多数存在している中で、わざわざNeoVimを使う人は間違いなく変わった人だと思いますが、メインのエディタとして使わないとしても、エンジニアとして働いていればいつか必ずサーバーをいじったりする中でVimを触る機会はやってきます。
その時にカーソルの移動方法だけでも習得しておくと、周囲からの評価も変わってくると思います。錯覚資産としても有用なので、この機会に勉強してみるのがおすすめです。
ちなみにVScodeやJetBrains製のIDEにもVimのキーバインドを使えるようにするプラグインが存在するので、モダンなエディタを使いつつ、Vimキーバインドで開発したい人はそちらを検討してみるのもいいと思います。
僕自身も全然半人前なのでもっと使いこなせる様に精進します。
おわり