恥は/dev/nullへ by 初心者

プログラミング素人がのろのろと学んだことをつづっています♪

Neovimのキーマップ設定 and 自作コマンド定義

目次


情報源

情報源は、Lua-guideのMappingsという項目と、Neovimのヘルプです。

Lua-guide - Neovim docs


キーマップを設定するにはvim.keymap.set()を使う

キーマップを設定するにはvim.keymap.set()を使います。
たとえば、ノーマルモードで j に gj を割り当てる場合、init.lua

vim.keymap.set('n', 'j', 'gj')

と記述します。n はノーマルモードを指します。

この設定は、Vim

nnoremap j gj

に相当します。

一方、

nmap j gj

のようにしたい場合は

vim.keymap.set('n', 'j', 'gj', {remap = true})

と記述します。

https://neovim.io/doc/user/lua-guide.html#lua-guide-mappings-set
に以下の記述があります。

remap: By default, all mappings are nonrecursive by default 
(i.e., vim.keymap.set() behaves like :noremap). 
If the {rhs} is itself a mapping that should be executed, 
set remap = true:

つまり、デフォルトではremapされないようになっています。よって、remapを有効にするには {remap = true} を記述する必要があります。


コマンドをキーに割り当てる

私はVaffleというプラグインを使っているのですが、これを呼び出す場合

:Vaffle

を実行します。
これを s というキーに割り当てる場合、init.lua

vim.keymap.set('n', 's', '<cmd>Vaffle<CR>')

と記述します。

ちなみに、次のように記述しても同じように動作しました。

vim.keymap.set('n', 's', ':Vaffle<CR>')


キーマップ設定例

以下は、設定したキーマップの一部です。

vim.keymap.set('n', 's', '<Nop>')               -- s押下時は何もしない
vim.keymap.set('n', 'sa', '<cmd>set wrap<CR>')  -- saで折り返し表示

-- Ctrl+LにESCを割り当てる
vim.keymap.set('' , '<C-l>', '<ESC>') -- Normal, Visual, Operator-pendingに適用
vim.keymap.set('i', '<C-l>', '<ESC>') -- Insertに適用

-- Ctrl+LにCtrl+Cを割り当てる
vim.keymap.set('c', '<C-l>', '<C-c>') -- CommandからNormalに戻る

-- Ctrl+Sに再描画を割り当てる
vim.keymap.set('n' , '<C-s>', '<C-l>')

-- 表示行でカーソル移動
vim.keymap.set('n', 'j', 'gj')
vim.keymap.set('v', 'j', 'gj')
vim.keymap.set('n', 'k', 'gk')
vim.keymap.set('v', 'k', 'gk')

-- init.luaを開く
vim.keymap.set('n', '<Leader>ev', '<cmd>e ~/.config/nvim/init.lua<cr>')


自作コマンドを定義する

ついでに、自作コマンドを定義する手順を調べてみました。

ホームディレクトリにある.vimrcを開く「Hoge」というコマンドを自作したいとします。Vimの.vimrcに記述する場合

command Hoge :e ~/.vimrc

という表現になりますが、同じことをNeovimのinit.luaに記述する場合は次のようになります。

vim.api.nvim_create_user_command('Hoge', 'e ~/.vimrc', {})

vim.api.nvim_create_user_command()には3つの引数を指定します。1つ目はコマンド名です。2つ目はVimコマンドかLua関数です。3番目はコマンド属性です。

コマンド属性は数が多いので、必要に応じて下記リンク先を参照すればよいと思います。
https://neovim.io/doc/user/map.html#user-commands