18
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Neovim 初心者向け設定ガイド

Posted at

Neovim の設定方法をメモ。
オプション設定、キーマッピング, プラグインの管理方法などを解説。

設定ファイル

Neovim のカスタマイズは、設定ファイル(init.vim, または init.lua)を編集することで行う。

Neovim 0.5 以降では、Luaを用いた設定方法が推奨されている。Luaは実行速度が速く、柔軟性が高いため。

設定ファイルの位置

~/.config/nvim/init.lua

ファイル構成

LuaでNeovimの設定を書く場合、異なる設定を別々のファイルに分けて管理する。

ex)

~/.config/nvim/
├── init.lua
└── lua/
    ├── keymaps.lua
    ├── options.lua
    ├── plugins.lua

init.luaの設定

init.luaは、他の設定ファイルをロードするためのエントリーポイントとして機能する。
例えばこんな感じ

-- 基本オプションの設定
require('options')

-- キーマップの設定
require('keymaps')

-- プラグインの設定
require('plugins')

-- 各種セットアップ(例:Tree-sitter, LSPなど)
require('setup.treesitter')
require('setup.lspconfig')

各設定ファイルの例

options.lua(基本オプション設定):

local opt = vim.opt

-- 行番号の表示
opt.number = true
opt.relativenumber = true

-- タブとインデントの設定
opt.tabstop = 4
opt.shiftwidth = 4
opt.expandtab = true

-- 検索設定
opt.ignorecase = true
opt.smartcase = true

keymaps.lua(キーマッピング設定):

local map = vim.api.nvim_set_keymap
local opts = { noremap = true, silent = true }

-- ノーマルモードでのキーマップ
map('n', '<leader>ff', '<cmd>Telescope find_files<cr>', opts)
map('n', '<leader>fg', '<cmd>Telescope live_grep<cr>', opts)

plugins.lua(プラグイン管理設定、packer.nvimを使用):

return require('packer').startup(function()
    use 'wbthomason/packer.nvim' -- Packer 自体のインストール
    use 'nvim-treesitter/nvim-treesitter' -- Treesitter
    use {
        'neoclide/coc.nvim', branch = 'release'
    }
    -- 他のプラグイン
end)

vim.opt オプション設定

vim.optは、Vimのオプションを管理するために使用する。

local opt = vim.opt -- for conciseness

-- 行番号の表示
opt.number = true

こんな感じで, optという変数にvim.optを代入してから、設定を記載する書き方が一般的ぽい。

代表的な設定できるオプションは下記

カテゴリ オプション 説明
基本設定 number 行番号を表示するかどうか。
基本設定 relativenumber 現在の行からの相対行番号を表示するかどうか。
基本設定 tabstop タブの表示幅。
基本設定 softtabstop ソフトタブの幅。
基本設定 shiftwidth インデントの幅。
基本設定 expandtab タブをスペースに展開するかどうか。
基本設定 smartindent 自動インデントを使用するかどうか。
基本設定 autoindent 新しい行を現在の行のインデントと同じにする。
基本設定 smartcase 検索時に大文字が含まれる場合のみ大文字と小文字を区別する。
基本設定 ignorecase 検索時に大文字と小文字を区別しない。
基本設定 wrap 長い行を画面端で折り返すかどうか。
基本設定 linebreak 単語単位での折り返しを行うかどうか。
ビジュアル設定 cursorline 現在の行にハイライトを表示するかどうか。
ビジュアル設定 cursorcolumn 現在の列にハイライトを表示するかどうか。
ビジュアル設定 background 色のテーマが明るいか暗いかを設定。
ビジュアル設定 showmode モードを画面下に表示するかどうか。
ビジュアル設定 showcmd コマンドを入力中に画面下に表示するかどうか。
検索設定 hlsearch 検索結果をハイライト表示するかどうか。
検索設定 incsearch 検索語を入力中に部分的に一致する位置をハイライト表示するかどうか。
ファイル処理設定 backup ファイルを保存する際にバックアップを取るかどうか。
ファイル処理設定 writebackup 書き込み中に一時的なバックアップを取るかどうか。
ファイル処理設定 swapfile スワップファイルを使用するかどうか。
ファイル処理設定 undofile アンドゥ情報をファイルに保存するかどうか。
ファイル処理設定 autoread ファイルが外部で変更された場合に自動的に読み直すかどうか。
その他 mouse マウスのサポートを有効にする。
その他 clipboard クリップボードの使用設定。
その他 spell スペルチェックを有効にするかどうか。
その他 spelllang スペルチェックの言語設定。

Packerについて

packer.nvimはNeovim用のプラグインマネージャーで、luaで書かれている。
https://github.com/wbthomason/packer.nvim

特徴

  1. 非同期インストール
  2. 遅延ローディング
  3. 依存関係の管理
  4. プラグインの管理
  5. 管理のカスタマイズ

基本的な使用方法

インストール

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

~/.local/share/nvim/site/pack/packer/start/packer.nvimにインストールされる。

設定

今回はプラグイン設定用のluaファイルを用意する。

~/.config/nvim/init.lua
require('plugins')
~/.config/nvim/lua/plugins.lua
-- packer.nvim を使用するための設定
return require('packer').startup(function(use)
   use 'wbthomason/packer.nvim'  -- Packer 自体を管理
   use 'neovim/nvim-lspconfig'   -- LSP 設定用プラグイン
   use 'nvim-treesitter/nvim-treesitter'  -- Treesitter プラグイン

   -- その他のプラグイン
   use {
       'hrsh7th/nvim-cmp',  -- 補完エンジン
       requires = {
           'hrsh7th/cmp-nvim-lsp',  -- LSP 補完用
           'hrsh7th/cmp-buffer',    -- バッファ補完用
           'hrsh7th/cmp-path'       -- パス補完用
       }
   }

   -- プラグインの設定が必要な場合はここに記述
end)

Packerコマンド

コマンド 説明
:PackerInstall まだインストールされていないプラグインをインストールします。
:PackerUpdate インストールされているすべてのプラグインを最新のバージョンに更新します。
:PackerSync すべてのプラグインをインストール(または更新)し、必要に応じて削除します。基本的に PackerUpdatePackerClean を一度に行います。
:PackerClean もはや設定ファイルに記述されていないプラグインを削除します。

キーマッピング

キーマップをカスタマイズすることで、より効率的に作業を進められるようになる。

~/.config/nvim/lua/keymaps.lua
local map = vim.api.nvim_set_keymap

-- ノーマルモードでのキーマップ
map('n', '<leader>ff', '<cmd>Telescope find_files<cr>', opts)
map('n', '<leader>fg', '<cmd>Telescope live_grep<cr>', opts)

map(vim.api.nvim_set_keymap)の引数について

  • 第1引数はモード
  • 第2引数はマッピングされるキーシーケンス
  • 第3引数は実行されるコマンド

モード

第1引数に設定できるモードの種類

モード 説明
n ノーマルモード (Normal mode):通常のテキスト編集やコマンド入力が行われるデフォルトのモード。
i インサートモード (Insert mode):テキストを直接入力するモード。
v ビジュアルモード (Visual mode):テキストの選択と操作を行うモード。
x ビジュアルモード (Visual mode) の一種で、ブロック選択が可能。
s セレクトモード (Select mode):マウス操作や特定の機能によるテキスト選択が行われるモード。
o オペレーターペンディングモード (Operator-pending mode):オペレータの対象範囲を待機する状態。
t 端末モード (Terminal mode):端末エミュレータとして使用されるモード。
c コマンドラインモード (Command-line mode):コマンドを入力するモード。

特別なキー表記

第2引数に指定するキーシーケンスで、<leader>とか、<C-a>などの特別なキー表記について

キー表記 説明
<leader> ユーザー定義のプレフィックスキー。デフォルトは \。カスタムショートカットのために用いられる。
<C-a> Ctrlキーと 'a' キーの同時押し。特定のアクションを実行するためのコントロールキーコンビネーション。
<C-b> Ctrlキーと 'b' キーの同時押し。
<C-c> Ctrlキーと 'c' キーの同時押し。通常、操作を中断するのに用いられる。
<CR> エンターキー(Carriage Return)。コマンドを実行する際に使われる。
<Esc> エスケープキー。モードを切り替えたり、現在の操作を中断するのに用いられる。
<Tab> タブキー。入力中にアイテム間を移動するのに使われることが多い。
<S-...> Shiftキーと他のキーの組み合わせ。例: <S-Tab> はShiftキーとTabキーの組み合わせ。
<F1> - <F12> F1からF12までのファンクションキー。様々な編集機能やヘルプ表示に割り当てられることが多い。

leaderキー

<leader>キーのデフォルトはバックスラッシュ\

leaderキーは、ユーザーが定義するプレフィックスキーで、独自のショートカットを指定する時に使われる。とても便利なので使いこなしたいところ

leaderキーはカスタマイズすることができる

-- リーダーキーをスペースキーに設定
vim.g.mapleader = ' '
-- あるいはカンマ
vim.g.mapleader = ','
-- <leader>e でファイルエクスプローラーを開く
vim.api.nvim_set_keymap('n', '<leader>e', ':Ex<CR>', { noremap = true, silent = true })

-- <leader>f でファイルを検索するコマンドを実行
vim.api.nvim_set_keymap('n', '<leader>f', ':Telescope find_files<CR>', { noremap = true, silent = true })

※leaderキーの設定は他のキーマピングが行われる前に定義する必要がある。
※noremapオプションを指定することで、意図しない再マッピングを防ぐ。

まとめ

vim をカスタマイズするとき、いつも参考動画をそのまま真似るだけだった。基本的なところを理解することで、設定内容が見えるようになる。マジ基本大事

18
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?