summary refs log tree commit diff
diff options
context:
space:
mode:
authorRobert Günzler <r@gnzler.io>2022-12-15 21:12:28 +0100
committerRobert Günzler <r@gnzler.io>2022-12-15 21:12:28 +0100
commit6f6aebf6db9ffa0fde64ebac3df7cd01f9a9db27 (patch)
treeeb912de5fef4bbfee4fccc4484c04e446cff45af
parent00d1359223b678e02afe879f6b1ae4a3d342707d (diff)
vim: fix gf handling of relative links
they should resolve relative to the file not vim's cwd

Signed-off-by: Robert Günzler <r@gnzler.io>
-rw-r--r--.vim/init.lua13
1 files changed, 10 insertions, 3 deletions
diff --git a/.vim/init.lua b/.vim/init.lua
index daa991f..3b5bf52 100644
--- a/.vim/init.lua
+++ b/.vim/init.lua
@@ -155,8 +155,16 @@ vim.keymap.set('n', '<tab>', [[ :normal za<cr> ]], {silent = true})
 -- vim.keymap.set('n', '<tab>', [[ :exe 'normal za' | IndentBlanklineRefresh<cr> ]], {silent = true})
 
 -- swap gf and gF
-vim.keymap.set('n', 'gf', [[ :e <cfile><cr> ]])
-vim.keymap.set('v', 'gf', [[ :e <cfile><cr> ]])
+-- vim.keymap.set('n', 'gf', [[ :e <cfile><cr> ]])
+-- vim.keymap.set('v', 'gf', [[ :e <cfile><cr> ]])
+vim.keymap.set({'n', 'v'},  'gf', function(a)
+  local Path = require('plenary.path')
+  local cfile = Path:new(vim.fn.expand('<cfile>'))
+  if not cfile:is_absolute() then
+    cfile = Path:new(vim.fn.expand('%:p:h'), cfile):normalize()
+  end
+  vim.cmd.edit(cfile)
+end, {desc='extends `:e <cfile>` with path normalization'})
 
 vim.keymap.set('n', '{', [[ {zz ]])
 vim.keymap.set('n', '}', [[ }zz ]])
@@ -174,7 +182,6 @@ vim.keymap.set('v',          'T',
 
 local misc = require('internal.misc')
 vim.keymap.set('n',  'gd', function() misc.open_under_cursor(nil, true) end, {desc='open under cursor'})
--- vim.keymap.set('n',  'gf', function() misc.file_under_cursor(function(s) vim.cmd('edit ' .. s) end) end)
 vim.keymap.set('n',  'gx', function() misc.open_under_cursor('url-launcher') end, {desc='url-launcher'})
 vim.keymap.set('n',  'gu', function() misc.open_under_cursor('url-launcher') end, {desc='url-launcher'})
 -- vim.keymap.set('n',  '<localleader>gs', function() misc.word_under_cursor(function(s) vim.fn.feedkeys(':%s/' .. s .. '//g'); cmd [[ call feedkeys("\<left>\<left>") ]] end) end)