目次
情報源
情報源は、Lua-guideのMappingsという項目と、Neovimのヘルプです。
キーマップを設定するには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