【Mac】Neovimの最初にやっておきたい初期設定

6 min

こんにちは。ナミレリです。エディター環境をMacとUbuntuの両方でvimやVSCodeからNeovimに移行しています。Lua言語に慣れていない私ですが、Neovimの新しい環境をセットアップするのは楽しいですね。全てを自分好みにカスタマイズできます。Lua言語に慣れていない私でも、各プラグインの公式サイトやgithubを参考にし、ある程度はやりたいことを設定できるのでLua初心者にもわかりやすく紹介します

この記事ではLua初心者でもわかりやすく、Neovimのインストールから、最初にやっておきたいNeovimの初期設定を紹介していきます。

この記事はこんな人にオススメ

  • VSCode以外にもテキストエディタを試してみたい
  • プログラミング初心者で、効率的なテキストエディタを使いたい方
  • Vimに興味があり、よりモダンで拡張性に富んだエディタを試してみたい方
  • すでにNeovimを使い始めたが、より深く活用したいと考えている方
この記事の環境
Parallelsの母艦
  • MacBook Pro 14インチ M1Max(メモリ32GB)
  • macOS Ventura 13.3
  • Parallels Desktop 18 for MacParallelsの公式サイト
  • Neovim NVIM v0.9.0-dev-1339
ParallelsのゲストOS
  • Ubuntu22.10
  • Neovim NVIM v0.9.0-dev-613
Parallels 18 for Macの無料トライアル もありますので、ぜひダウンロードして試してみてください。M1/M2のMac上で快適にUbuntuが動作します。

はじめに

Neovimは、高速で軽量、拡張性に富んだテキストエディタで、特にプログラマーの皆さんにとって非常に魅力的なテキストエディタです。この記事では、Neovimの魅力や使い方、おすすめのプラグインをご紹介し、初心者の方でも簡単に試していただけるように紹介していきます。

Neovimとは

Neovimは、Vimのソースコードを積極的にリファクタリングすることで、以下の目標を達成しようとするプロジェクトです。

  • メンテナンスを簡素化することで、バグや機能のマージ速度を向上させる。
  • 複数の開発者で作業を分担する。
  • コアソースを変更することなく、新しいユーザーインターフェイスの実装を可能にする。
  • コプロセスに基づく新しいプラグインアーキテクチャで、拡張性を向上させる。
  • プラグインは、LuaやPythonなどの任意のプログラミング言語で開発することができます

Vimの強力な機能や操作性を継承しつつ、Vim以上にマージ速度や新機能、拡張性を高めていくプロジェクトということですね。

Neovimの特徴

今更ですが、Neovimの主な特徴を下にまとめてみます。

誤解を恐れずに一言で特徴を言うと、Neovimは「モダンで、カスタマイズ性が高く、マルチプラットフォーム対応で、軽量で高速!なエディター」です。

モダンである

長い歴史を持つVimのコードをベースにし、Vimの伝統的なエディタ機能を継承しつつ、現代的な開発に適した機能を追加しています。

カスタマイズ性が高い

プラグインをインストールしたり、細かな設定を書くことで自分好みのエディターにカスタマイズできます。プラグインはGitHubなどのリポジトリから簡単にインストールできます。プラグインの種類は例えば、自動補完、コード整形、カラースキーム、ChatGPTへのアクセスなど、様々な機能のプラグインがあります。

また、Neovimは、キーマップを自由にカスタマイズすることができます。良く使うコマンドのショートカットキーを割り当てることができ、そのカスタムキーマップを設定ファイルに保存して、複数のマシンで同じキーマップを使用することもできます。

マルチプラットフォーム対応

Windows、macOS、Linuxなどのさまざまなプラットフォームで動作します。(私は設定ファイルを一元管理してmacOSとLinuxで利用しています)

Neovimはマルチプラットフォームに対応しているので、プラットフォームに制限がなく、作業環境や開発環境を共有しやすくなります。

軽量で高速

軽く動作が速いエディターで、容量の大きなファイル、複数のファイルを同時に開いても処理が速いです。

Vimのコードをベースにスリムになっていること、マルチスレッドを採用しているため、バッファーの切り替えや処理が並列で行われること、非同期処理に対応しているため、バックグラウンドで処理を行いながら、ユーザーが入力することができること、などがその理由です。

操作スピードが速い

カーソル移動やコピー&ペーストなどの操作がキーボードでできるため、マウスから手を離さずに操作することができます。マウスで同じ操作をするよりも、圧倒的に速いスピードで操作することができます。これはプログラマーやライターなどの方には、効率が上がるので特に重要なことだと思います。

Neovimの学習曲線

Neovimの特徴をまとめていると、あらためて素晴らしいエディターだと発見がありますが、VimもNeovimも始めて使う方には学習曲線が急であることがよく言われます。

起動したけど、文字の入力すらできない、
終了したいけど、終了すらできない・・・。

ある程度の操作方法を覚えてしまえば一気に効率が高まります。私もそうですが初心者の方は、まずvimtutorをやってみるとレベルが上がります。

vimtutorでの学び方については以前に記事にしています。下の記事をぜひ参考にしてください。

それでは早速、Neovimをインストールするところからやっていきましょう。

Neovimのインストール

Neovimの様々なプラグインは最新版のNeovimを前提に開発されていることも多いです。この記事ではバージョン0.10を使いたいので最新版のNeovimをインストールしていきます。

この記事ではNeovimの最新版をインストールする方法を紹介します。安定版ではないのでインストールは自己責任でお願いします。

MacにNeovimをインストールする

Macではbrewでインストールします。

--HEADを付けることで最新の開発バージョンのHEADをインストールします。安定版ではないため自己責任でインストールしてください。

Macにインストール


brew install neovim --HEAD

以降、最新のHEADにするには、brew reinstall neovimします。

UbuntuにNeovimをインストールする

最新のNeovimをUbuntuに簡単にインストールする方法は2つあります。

1つはsnapでインストールする方法、もう1つは非公式のリポジトリ(PPA:Personal Package Archive)を追加してインストールする方法です。それぞれ紹介します。

snapでインストールする

snapでNeovimをインストールする際に、--edgeを付けることで最新のedgeをインストールします。以下のようにします。

Ubuntuにsnapでインストール


sudo snap install nvim --edge --classic

PPAを追加してインストールする

PPAとはPersonal Package Archiveの略で、非公式のリポジトリです。下のようにリポジトリを追加して最新のNeovimをインストールすることができます。

PPAを追加する


sudo add-apt-repository ppa:neovim-ppa/unstable
sudo apt update

Ubuntuにインストール


sudo apt install neovim

Neovimのバージョンを確認する

無事にインストールできました。下のコマンドでバージョンを確認しておきます。


nvim --version

Neovimのディレクトリ構成

Neovimの設定ファイルは~/.config/nvim/配下に置き、一般的にメインの設定ファイルは~/.config/nvim/init.luaです。(macOSやLinuxの場合)

ディレクトリ構成はこだわりや好みで自由に構成することができますが、この記事では下のように構成します。また、可能な限りLuaで設定ファイルを記載するようにします。設定ファイルをLuaで記述すると、より柔軟で高速な設定が可能になります。

~/.config/nvim/
├── init.lua
├── lua/
│   ├── autocmds.lua
│   ├── keymaps.lua
│   ├── options.lua
│   └── plugins.lua
└── plugin/
        ├── pluginA
        ├── pluginB/
        ├── pluginC/
      └── pluginD/
ディレクトリ・ファイル説明
~/.config/nvim/init.luaメインの設定ファイルです。
init.luaは各プラグインの読み込みや、
キーマップの読み込み、オプション設定ファイルの
読み込みを行います。
~/.config/nvim/lua/このフォルダにあるファイルをLuaモジュールとして
require()することができます。
Neovimの各種の設定ファイルを分割して
配置するディレクトリです。
ここには、プラグインの設定、キーマップ、
オプション設定値、ユーティリティ関数などの
機能ごとに、複数のファイルを配置します。
~/.config/nvim/plugin/各種プラグインの設定ファイルを配置します。
このディレクトリにはインストールした
プラグインの設定ファイルをまとめるための
サブディレクトリを作成しても良いと思います。

知っておきたいLuaの基本

この記事ではNeovimの設定はなるべくLuaで書いていきますので、知っておきたいLuaの基本について少し紹介しておきます。Luaはシンプルで学びやすいスクリプト言語です。

Luaの変数とデータ型

変数を定義する際は、local を使って以下のように宣言します。

(Luaにおける--はコメントです)


local number = 100
local text = "Hello, World!"

print(number) -- 100が表示される
print(text) -- Hello, World!が表示される

Luaのテーブル

Luaのテーブルは、連想配列(ハッシュマップ)として機能し、キーと値のペアでデータを保持します。テーブルは以下のように作成できます。


local my_table = {
  key1 = "value1",
  key2 = "value2"
}
print(my_table.key1) -- value1が表示される
print(my_table.key2) -- value2が表示される

print(my_table["key1"]) -- 同様にvalue1が表示される

Luaの制御構造

Luaでは、ifwhileforなどの制御構造が使えます。


-- if文
local age = 18
if age >= 20 then
  print("You are an adult.")
else
  print("You are not an adult.")
end

-- whileループ
local i = 1
while i <= 5 do
  print(i)
  i = i + 1
end

-- forループ
for i = 1, 5 do
  print(i)
end

Luaの関数

Luaで関数を定義するには、以下のように function を使います。


local function greet(name)
  print("Hello, " .. name .. "!")
end

greet("John") -- "Hello, John!"が出力される

..は、Luaにおける文字列の連結演算子です

上の基本的なLuaの構文を理解しておくと、Neovimの設定ファイルを編集する際ずいぶんと楽になると思います。

参考:https://github.com/willelz/nvim-lua-guide-ja/blob/master/README.ja.md

Neovimの初期設定

では、Luaで設定ファイルを書いていきましょう。ターミナルはiTerm2を使います。iTerm2のインストール方法や初期設定についてはこちらをご覧ください。

ディレクトリやファイルの作成

まずは上で紹介した、Neovimのディレクトリ構成(空のディレクトリや空のファイル)を下のコマンドで作ります。


mkdir -p ~/.config/nvim/lua && \
touch ~/.config/nvim/init.lua && \
touch ~/.config/nvim/lua/autocmds.lua && \
touch ~/.config/nvim/lua/keymaps.lua && \
touch ~/.config/nvim/lua/options.lua && \
touch ~/.config/nvim/lua/plugins.lua

options.luaの設定

では、初期設定でやるべき設定を~/.config/nvim/lua/options.luaに書きます。


vi ~/.config/nvim/lua/options.lua

以下は私の設定内容で、おすすめの設定内容です。Luaにおける--はコメントです。

設定値を変えながらお気に入りの自分だけのカスタマイズをしてみてください。

~/.config/nvim/lua/options.lua


-- ファイル
vim.opt.fileencoding = "utf-8" -- エンコーディングをUTF-8に設定
vim.opt.swapfile = false -- スワップファイルを作成しない
vim.opt.helplang = "ja" -- ヘルプファイルの言語は日本語
vim.opt.hidden = true -- バッファを切り替えるときに
                      --ファイルを保存しなくてもOKに

-- カーソルと表示
-- vim.opt.cursorline = true -- カーソルがある行を強調
-- vim.opt.cursorcolumn = true -- カーソルがある列を強調

-- クリップボード共有
vim.opt.clipboard:append({ "unnamedplus" }) -- レジスタとクリップボードを共有

-- メニューとコマンド
vim.opt.wildmenu = true -- コマンドラインで補完
vim.opt.cmdheight = 1 -- コマンドラインの表示行数
vim.opt.laststatus = 2 -- 下部にステータスラインを表示
vim.opt.showcmd = true -- コマンドラインに入力されたコマンドを表示

-- 検索・置換え
vim.opt.hlsearch = true -- ハイライト検索を有効
vim.opt.incsearch = true -- インクリメンタルサーチを有効
vim.opt.matchtime = 1 -- 入力された文字列がマッチするまでにかかる時間

-- カラースキーム
vim.opt.termguicolors = true -- 24 ビットカラーを使用
vim.opt.background = "dark" -- ダークカラーを使用する

-- インデント
vim.opt.shiftwidth = 4 -- シフト幅を4に設定する
vim.opt.tabstop = 4 -- タブ幅を4に設定する
vim.opt.expandtab = true -- タブ文字をスペースに置き換える
vim.opt.autoindent = true -- 自動インデントを有効にする
vim.opt.smartindent = true -- インデントをスマートに調整する

-- 表示
vim.opt.number = true -- 行番号を表示
vim.opt.wrap = false -- テキストの自動折り返しを無効に
vim.opt.showtabline = 2 -- タブラインを表示
                        -- (1:常に表示、2:タブが開かれたときに表示)
vim.opt.visualbell = true -- ビープ音を表示する代わりに画面をフラッシュ
vim.opt.showmatch = true -- 対応する括弧をハイライト表示

-- インタフェース
vim.opt.winblend = 20 -- ウィンドウの不透明度
vim.opt.pumblend = 20 -- ポップアップメニューの不透明度
vim.opt.showtabline = 2 -- タブラインを表示する設定
vim.opt.signcolumn = "yes" -- サインカラムを表示

init.luaからロードする

~/.config/nvim/init.luaから~/.config/nvim/lua/options.luaをロードします。


vi ~/.config/nvim/init.lua

~/.config/nvim/init.lua


require("options")

ロードする際、.luaの拡張子は不要です。また、~/.config/nvim/lua/にある設定ファイルをrequireする際は、ディレクトリの記述も不要です。

nvimで立ち上げてみましょう。nvimの終了は:q!です。

プラグインマネージャーのインストール

プラグインマネージャーのpacker.nvimをインストールします。packer.nvimはLuaで書かれているので設定も含めてLuaで統一でき、またパフォーマンスも最適化されます。とても人気のあるプラグインマネージャです。

公式リポジトリ:https://github.com/wbthomason/packer.nvim

packer.nvimのインストール

公式リポジトリのクイックスタートにならってインストールします。


git clone --depth 1 https://github.com/wbthomason/packer.nvim\
 ~/.local/share/nvim/site/pack/packer/start/packer.nvim

plugins.luaの設定

packer.nvimをインストールしたら、この記事では公式リポジトリのREADME.mdの例にあるとおり、packer.nvimの設定を~/.config/nvim/lua/plugins.luaに書きます。


vi ~/.config/nvim/lua/plugins.lua

~/.config/nvim/lua/plugins.lua


vim.cmd [[packadd packer.nvim]]
return require('packer').startup(function(use)
  -- Packer can manage itself
  use 'wbthomason/packer.nvim'
  --
  -- この下にインストールするプラグインを記載します。
  -- use 'プラグインA'
  -- use 'プラグインB'
  --
end)

次にこのファイルを~/.config/nvim/init.luaからロードします。

init.luaからロードする

~/.config/nvim/init.luaから~/.config/nvim/lua/plugins.luaをロードします。


vi ~/.config/nvim/init.lua

~/.config/nvim/init.lua


require("options") -- <-- 先程追加済です
require("plugins") -- <-- 今回追加します

先程と同じように、ロードする際は.luaの拡張子は不要です。また、~/.config/nvim/lua/にある設定ファイルをrequireする際は、ディレクトリの記述も不要です。

これでプラグインマネージャであるpacker.nvimの設定は完了です。次は実際にプラグインをインストールしつつ、packer.nvimの使い方を紹介します。

packer.nvimの使い方

プラグインマネージャだけをインストールし設定しただけでは意味がないので、実際にpacker.nvimを使ってプラグインをインストールしてみます。

まずは見た目をかっこ良くしたいのでカラーテーマであるtokyonight.nvimをインストールしてみます。

  1. STEP

    ~/.config/nvim/lua/plugins.luaへ設定を記載

    
    vi ~/.config/nvim/lua/plugins.lua
    
    

    ~/.config/nvim/lua/plugins.lua

    
    vim.cmd [[packadd packer.nvim]]
    return require('packer').startup(function(use)
      -- Packer can manage itself
      use 'wbthomason/packer.nvim'
      --
      -- この下にインストールするプラグインを記載します。
      use 'folke/tokyonight.nvim' -- <-- この行を追加
      
    end)
    
  2. STEP

    :PackerInstallする

    nvimを起動して、:PackerInstallするとplugins.luaに書かれていてインストールされていないプラグインをインストールしてくれます。

    :Packer Install
    :PackerSync
  3. STEP

    カラーテーマを設定する

    カラーテーマを設定するにはnvimを起動して、:colorscheme tokyonight-nightとします。

    :colorscheme tokyonight-night
    :colorscheme tokyonight-night

    tokyonight.nvimのカラーテーマには、tokyonight-night以外にも上の補完候補のようにいくつかありますので、設定を変えてお気に入りのテーマを見つけてください。

  4. STEP

    init.luaに設定しておく

    :colorscheme tokyonight-nightを(例えば)init.luaに設定しておくことで毎回カラーテーマを設定する必要がないようにします。

    
    vi ~/.config/nvim/init.lua
    
    

    ~/.config/nvim/init.lua

    
    require("options") -- <-- 先程追加済です
    require("plugins") -- <-- 先程追加済です
    
    vim.cmd[[colorscheme tokyonight-night]] -- 今回追加
    -- 上記は、vimコマンドでcolorscheme tokyonight-nightを実行するという意味
    

    これでnvimを起動するとカラースキームが設定されているはずです。

packer.nvimのコマンド

プラグインマネージャのpacker.nvimには便利なコマンドがありますので紹介します。

packer.nvimのコマンド
packer.nvimのコマンド

PackerClean

:PackerCleanは、packer.nvimプラグインマネージャーで、コメントアウトで無効化されたプラグインを削除するためのコマンドです。

PackerCompile

:PackerCompileは、プラグインの設定をコンパイルするためのコマンドです。コンパイル済みのローダーファイルが再生成され、nvim起動時にプラグインが効率的に読み込まれることでパフォーマンスが向上します。

プラグインの設定を変更するたびに、:PackerCompileを実行する必要があります。

PackerInstall

:PackerInstallは、プラグインをインストールするコマンドです。プラグイン設定に新しいプラグインを追加したら:PackerInstallを実行してそのプラグインをインストールします。

PackerUpdate

:PackerUpdateは、インストール済みのプラグインを更新するためのコマンドです。加えて、インストールしていないプラグインがあれば、それもインストールしてくれます。

:PackerUpdateを定期的に実行することで、プラグインを最新の状態に保つことができますのでセキュリティの観点からも定期的に実行したいです。

また、--previewのオプションを指定することで、実際に更新する前に更新内容を確認することができます。

PackerSync

:PackerSyncは、プラグインの更新(インストール)とコンパイルを一度に行うことができるコマンドで、:PackerUpdate:PackerCompileを一度に行います。

:PackerSync
:PackerSync

プラグインの設定を更新したり、追加した場合は:PackerSyncを実行すれば楽ですね。

PackerStatus

:PackerStatusは、インストールされているプラグインの一覧を表示するためのコマンドです。

各プラグインの名前や状態(有効/無効)、ディレクトリへのパスが表示されます。追加されたプラグインが正しくインストールされているか確認することができますね。

:PackerStatus
:PackerStatus

便利なブートストラップスクリプト

事前にpacker.nvimをインストールしていなくても、packer.nvimのインストール状態をチェックし、必要な場合は自動的にpacker.nvimをインストールするように設定することもできます。

公式リポジトリのこちらの記載通りにやってみましょう。

~/.config/nvim/lua/plugins.luaに下のように編集します。


vi ~/.config/nvim/lua/plugins.lua

~/.config/nvim/lua/plugins.lua


local ensure_packer = function()
  local fn = vim.fn
  local install_path = fn.stdpath('data')..'/site/pack/packer/start/packer.nvim'
  if fn.empty(fn.glob(install_path)) > 0 then
    fn.system({'git', 'clone', '--depth', '1', 'https://github.com/wbthomason/packer.nvim', install_path})
    vim.cmd [[packadd packer.nvim]]
    return true
  end
  return false
end

local packer_bootstrap = ensure_packer()

-- vim.cmd([[packadd packer.nvim]])
return require('packer').startup(function(use)
  -- Packer can manage itself
  use 'wbthomason/packer.nvim'
  --
  -- この下にインストールするプラグインを記載します。
  use 'folke/tokyonight.nvim'

end)

便利な起動オプション

nvimを起動する際の便利なオプションを紹介します。

1. 複数のファイルを開く

ファイルを複数一度に開くことができます。縦に分割する水平分割、横に分割する垂直分割、タブ(バッファ)で開く、の主に3つの開き方があります。

オプション説明
-o-oはファイルを水平分割で開きます
-O-Oはファイルを垂直分割で開きます。
-p-pは各ファイルを新しいタブで開きます

-- 縦に分割する水平分割で開く
nvim -o test1.lua test2.lua


-- 横に分割する垂直分割で開く
nvim -O test1.lua test2.lua


-- タブで開く
nvim -p test1.lua test2.lua

2. 起動時に設定ファイルを指定する

起動時に設定ファイルを指定して起動することができます。設定ファイル(init.luaplugins.lua)を読み込むには、-uオプションを使ってnvimを起動します。


nvim -u /path/to/your/init.lua

3. 起動時に設定ファイルを読み込まない

起動時に設定ファイルを読み込まずに起動することもできます。-uの後にNONEを付けます。


nvim -u NONE

設定ファイルに誤りがある場合などに良く使います。

4. 起動時間を測定する

nvimの起動時間を測定し、起動ログを指定したファイルに保存することができます。どのプラグインの読み込みが遅いかなど、nvimの遅延の原因を調べることができます。


nvim --startuptime ./startuptime.log


-- 〜 省略 〜
110.755  000.114  000.114: require('noice.message.manager')
110.833  000.076  000.076: require('noice.ui.state')
110.933  000.077  000.077: require('noice.util.stats')
110.976  000.541: first screen update
110.977  000.001: --- NVIM STARTED ---

最後に

最後まで読んでいただきありがとうございます。Neovimの最初にやっておきたい初期設定はいかがでしたでしょうか。NeovimやVimは自分好みにとことんカスタマイズできる使いやすいテキストエディターです。最初は独特の操作を覚える必要がありますが、一度覚えると無くてはならない存在になり、魅力的なエディターになることは間違いないのでぜひ活用してみてください。

次は、クールでカッコイイ見た目と機能を重視したプラグインを厳選して紹介しています。下の記事をぜひご覧ください。

定番おすすめ記事

ターミナルを活用する記事をまとめました。ターミナルの活用方法やコマンドの使い方などは、UbuntuなどのLinuxでも活用できます。Macの大元がUnix系統であるからこそです。

カテゴリー:
関連記事