
「HOMEキーなんて僻地すぎて使わねーよ」というご指摘はさておいて、スマートな <Home> とは vscode での homeキー(cursorHome) と同じカーソルの動作のことです。
目次
動作の定義
- 行の途中にカーソルがある場合に
<Home>を押すとインデントを考慮した行頭にカーソルを移動する(vim の^と同じ) - インデントを考慮した行頭にカーソルがある場合は完全な行頭に移動する(vim の
0と同じ) - 完全な行頭にカーソルがある場合に
<Home>を押すとインデントを考慮した行頭にカーソルを移動する(vim の^と同じ)
1~3のカーソル動作を <Home> キーのみで行う。
GIF
Homeキーを4回押してます。

キーマップの設定
vim.api.nvim_set_keymap のオプション callback に関数を渡す。
local function smart_home() -- カーソルがある行を文字列で取得 local line = vim.api.nvim_get_current_line() -- 現在のカーソル位置を取得 local row, col = unpack(vim.api.nvim_win_get_cursor(0)) -- 先頭にある空白と制御文字(タブ)にマッチさせる。戻り値はマッチした文字列または nil local m = line:match('^[%s%c]+') -- カーソルを移動させる(三項演算子で読みづらいけどluaでよく見るので) vim.api.nvim_win_set_cursor(0, (m ~= nil and (col == 0 or m:len() < col)) and { row, m:len() } or { row, 0 }) end vim.api.nvim_set_keymap('n', '<Home>', '', { callback = smart_home }) vim.api.nvim_set_keymap('i', '<Home>', '', { callback = smart_home }) vim.api.nvim_set_keymap('v', '<Home>', '', { callback = smart_home })