[[🦉Shukuchi]]のように、カーソル配下にリンクがなくても瞬間移動してリンク先に遷移するコマンドをつくる。ただし、方向は`forward`に限る (後ろには移動できない)。 ```lua local forward_seek_gf = function() local line = vim.api.nvim_get_current_line() local row = vim.fn.line(".") local col = vim.fn.col(".") local get_cursor = function(pattern) local cur = 1 while true do local st, ed = string.find(line, pattern, cur) vim.notify(tostring(st)) vim.notify(tostring(ed)) vim.notify(tostring(col)) if not st then return nil end if col < st then return st - 1 end if col <= ed then return col - 1 end cur = ed + 1 end end local wiki_link_cursor = get_cursor("%[%[.-%]%]") local url_cursor = get_cursor("https?://[%w-_%.%?%.:/%+=&%%]+") if wiki_link_cursor == nil and url_cursor == nil then return end if wiki_link_cursor ~= nil and url_cursor == nil then vim.api.nvim_win_set_cursor(vim.api.nvim_get_current_win(), { row, wiki_link_cursor }) end if wiki_link_cursor == nil and url_cursor ~= nil then vim.api.nvim_win_set_cursor(vim.api.nvim_get_current_win(), { row, url_cursor }) end if wiki_link_cursor ~= nil and url_cursor ~= nil then vim.api.nvim_win_set_cursor(vim.api.nvim_get_current_win(), { row, math.min(wiki_link_cursor, url_cursor) }) end if require("obsidian").util.cursor_on_markdown_link(nil, nil, true) then vim.cmd([[ :ObsidianFollowLink ]]) else vim.cmd([[ gf ]]) end end ``` この関数を`mappings`で設定する。 ```lua require("obsidian").setup({ mappings = { ["<C-]>"] = { action = forward_seek_gf, opts = { noremap = false, expr = false, buffer = true }, }, }, }) ``` 個人的には[[ウィンドウ (Vim)|ウィンドウ]]を分割して開くようにもしたいので、以下のようなkeymapも割り当てている。 ```lua vim.keymap.set("n", "<M-]>", function() vim.cmd([[ vsplit ]]) forward_seek_gf() end, { silent = true }) vim.keymap.set("n", "g<C-]>", function() vim.cmd([[ split ]]) forward_seek_gf() end, { silent = true }) ```