はじめに
この記事は親記事から派生したもので、nvim-tree.luaのプラグイン魔改造についてを取り扱っています。
本記事ではまずNeoVimの環境構築の方法について備忘録も兼ねて説明したいと思います。忘れっぽい自分のためにとても基本的なことから書かれていますので、慣れてる方はかいつまんで読んでください。
この記事には以下の内容が含まれています。
- NeoVimのインストール方法 (ubuntu, MacOS)
- Lazy.nvimを使ったプラグインの導入方法
- 基本的な操作方法・コマンド
それでは、
レッツ環境構築!
NeoVimのインストール
Ubuntu
とっても簡単で、terminal(もしくは「端末」)を開いて以下のコマンドを実行するだけです。aptを使ってneovimをインストールします。
sudo apt update
sudo apt install neovim
aptとはubuntuなどのlinuxで使われている、ソフトウェアの管理をしてくれるツールです。まず、sudo apt updateでaptの知ってる情報を最新のものに更新して、sudo apt install neovimでインストールしています。
(より新しいバージョンのneovimをインストールしたい人はsudo snap install nvim --classicでインストールすることもできます。)
MacOS
こちらもとっても簡単で、ターミナルを開いて以下のコマンドを実行するだけです。
brewコマンドが入っていなくてえらが出た人は、こちらのHomebrewのページからインストールしてください。一番上に載っているコマンドを実行するだけでインストールできると思います。「homebrew install」と調べても同じページが出てくると思います。
brew install neovim
インストールができたら
nvim
ターミナルでnvimを実行して、テキストエディタが表示されたら成功です!
例えば、~/Document/a.txtを編集したかったらnvim ~/Document/a.txtあるいは、cd ~/Document/ && nvim a.txtと実行します。
プラグインの導入
今回はNeoVimのプラグインを管理するプラグインlazy.nvimを使ってプラグインをインストールして行きます。
まず、nvimを起動したときには、~/.config/nvim/というディレクトリにあるinit.luaファイルが読み込まれます。このinit.luaにlazy.nvimを使った設定を書いて行きます。
設定の仕方は個人の好みがあると思いますが、ここではおそらく一般的で、僕的にも一番綺麗だと思う方法を紹介して行きたいと思います。
最終的に、~/.config/nvim/の構成は下の写真のようになります。
まず、一番上(.config/nvim/)にあるinit.luaにはrequire("config.init")とだけ書きます。これによって、.config/nvim/config/init.luaというファイルが読み込まれます。ここにnvim全体の共通設定を書いて行きます。
-- ~/.config/nvim/lua/config/init.lua
-- 基本設定
vim.opt.number = true -- 行番号を表示
vim.opt.relativenumber = true -- 相対行番号を表示
vim.opt.termguicolors = false
-- キーマップの例(最低限)
vim.g.mapleader = " "
vim.keymap.set("n", "<leader>w", ":w<CR>")
vim.keymap.set("n", "<leader>q", ":q<CR>")
-- プラグインマネージャ lazy.nvim のセットアップ
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
if not vim.loop.fs_stat(lazypath) then
vim.fn.system({
"git", "clone", "--filter=blob:none",
"https://github.com/folke/lazy.nvim.git",
"--branch=stable", lazypath,
})
end
vim.opt.rtp:prepend(lazypath)
-- 残りの設定ファイルの読み込み
require("lazy").setup({
{ import = "config.keymaps" }, -- キーマップ設定
{ import = "config.indent" }, -- インデント設定
{ import = "plugins" },
{ import = "snippets.cpp" }, -- C++スニペット
})
最初の1行目は--でコメントアウトされているメモなので気にしないでください。
vim.g.mapleader = " "というのは、スペースキーを<leader>として使えるように設定するもので、その下に書かれているvim.keymap.set("n", "<leader>w", ":w<CR>")という設定によって、スペースとwを連続して押すことで:w<CR>を押したことと同じになります(はエンターキーのこと)。:wというのはwriteのことで、nvimで編集した内容をファイルに書き込み、保存します。
次の部分で、プラグインを管理するlazy.nvimが入ってない場合(if not vim.loop.fs_stat(lazypath))はインストールするようになっています。
最後のrequire("lazy").setup()の部分で残りの設定ファイル.config/nvim/lua/config/keymaps.luaや.config/nvim/lua/plugins/の下にある諸々のluaファイルが読み込まれます。
プラグインをつかしたいときは、.config/nvim/lua/plugins/の下に、追加したいプラグインをインストール・設定するためのコードを書きます。今回は例としてnvim-treeのインストール方法を説明します。他のプラグインを使いたい場合は、nvim-treeとなっている部分などを適宜置き換えて使ってください。
まず、returnというのは、このファイルに書いた設定を先ほどのinit.luaファイルに戻して、最終的にそこで設定しているので、このような形になっています。
一番最初に出てくる"nvim-tree/nvim-tree.lua"というのは、今回使いたいnvim-treeが置かれているGitHub上の場所を表しています。こちらのページに飛んでいただくと、「nvim-tree」というユーザーが管理している「nvim-tree.lua」というレポジトリがあることが確認できます。このレポジトリが、lazy.nvimによって自動的に~/.local/nvim/lazy/ディレクトリにクローンされてきて使えるようになります。
dependenciesで依存関係を示しています。
opts = {}の部分は、nvim-treeを使うためのオプションを設定しているところです。適宜、使いたいプラグインのREADME.mdなどを読んで設定してください。
vim.keymap.set()というのは、先ほども出てきたショートカットを設定する関数です。自分好みにnvim-treeのコマンドを設定できます。このファイルで設定しないといけないわけではありませんが、管理のしやすさ的に各プラグインごとのファイルの中で設定するのが一番いいと思います。
-- ~/.config/nvim/lua/plugins/nvim-tree.lua
return {
"nvim-tree/nvim-tree.lua",
dependencies = { "nvim-tree/nvim-web-devicons" },
opts = {
view = {
width = 30,
centralize_selection = true,
},
update_focused_file = {
enable = true,
},
is_invisible_cursor = true,
renderer = { group_empty = true },
filters = { dotfiles = false, git_ignored = false },
},
config = function(_, opts)
require("nvim-tree").setup(opts)
vim.keymap.set("n", "<leader>r", ":NvimTreeFocus<CR>", { desc = "ファイルツリーを開く" })
vim.keymap.set("n", "<leader>e", ":NvimTreeToggle<CR>", { desc = "ファイルツリーの表示/非表示" })
end,
}
NeoVimの基本操作・コマンド
NeoVimのいいところは、プラグインによる拡張のしやすさと、自分好みにカスタマイズすることで操作の効率が爆上がりする点にあります。よく聞くところで言うと、「カーソルの移動をh, j, k, lでできるので、ホームポジションから手を離さなくていい」と言う話があると思います。これだけでなく、任意の行に直接飛んだり、行全体をカットしたり、単語や()内部を削除して入力できりなどです。
ただ、慣れるまではvim系のお作法や仕組みがわからず困惑するだけだと思います。
僕が一番最初に混乱したのは、「文字が入力できない!」と言うことでした。これは、vscodeなどと違い、入力できる状態(Insertモード)以外に、ノーマルモードやビジュアルモードがあることが原因でした。nvimを起動したタイミングではノーマルモードになっています。そこから、iなどを押しインサートモードにして編集し、escapeでノーマルモードに戻り、:wとエンターを入力して保存し、:q + Enterで終了すると言うような流れが一番よくある流れだと思います。まずは個人的に基本だと思っている三つの状態を意識してみてください。
- ノーマルモード
- インサートモード
- ビジュアルモード
以下にあげるコマンドはノーマルモードで使えるものです。インサートモードからノーマルモードに戻りたい場合は<ESC>を押してください。
以下で:qと書かれていたら、:qと入力してEnterキーを押すことで実行されます。
ファイル操作と移動
| コマンド | 操作 |
|---|---|
:q |
終了 |
:q! |
強制終了(保存していない内容は失われる) |
:w |
保存 |
:x |
保存して終了 |
h |
左に一つ移動 |
j |
下に一つ移動 |
k |
上に一つ移動 |
l |
右に一つ移動 |
数字 + h, j, k, l
|
数字分だけ移動 |
gg |
ファイルの一番上に移動 |
G |
ファイルの一番下に移動 |
挿入モードへの遷移
| コマンド | 操作 |
|---|---|
i |
カーソルの左から編集開始 |
I |
行の一番左から編集開始 |
a |
カーソルの右から編集開始 |
A |
行の一番右から編集開始 |
o |
下に行を追加して編集開始 |
O |
上に行を追加して編集開始 |
ciw |
単語を削除して編集開始 |
ci[ |
[]内部を削除して編集開始 |
置き換え
- :%s/[変換前の文字列]/[変換後の文字列]/[オプション(g, c, etc...)]
- オプション
- g : 1行に複数ある場合すべて置き換える
- c : 一ヶ所ごとに確認する
- オプション
最後に
いかがだったでしょうか。環境構築の部分は、想定外の部分で沼っていないことを祈っています!今はGeminiやChatGPTなど、生成AIがあるので、エラーになってしまったら適宜AIの方も活用してみてください!
本記事で紹介したショートカット以外にもたくさんのショートカットが用意されており、さらに、インストールしたプラグインにもたくさんの関数などが用意されているので、「こんなショートカットがあったらいいな」と思う機能は、自分でカスタマイズすることで、慣れたら簡単に実現できるようになります!ぜひ時間を取られてしまう操作を探し、自分なりに改造していってください!!
