Я хочу использовать gf
для открытия имен файлов с гиперссылками в .org
файлах (я использую плагин vim vim-orgmode ):
![enter image description here](https://i.stack.imgur.com/MewDX.png)
Я набираю gf
, и файл должен открыться. Чтобы не проходить мимо первых двух [[
, я создал следующий скрипт для выполнения этой работы:
function! GFOrg()
python << EOF
import vim
try:
filename=vim.eval("@%")
if filename.endswith(".org"):
line = vim.current.line
linkstart=line.find("[[")
if linkstart != -1:
row, start = vim.current.window.cursor
vim.current.window.cursor = row, linkstart+2
vim.command("normal gf")
except Exception as e:
print("Error: {}".format(e))
EOF
endfunction
Теперь, если я сопоставлю это с переопределением gf
:
nnoremap gf :call GFOrg()<CR>
Я получаю ошибку рекурсии:
![enter image description here](https://i.stack.imgur.com/wyJtZ.png)
Но если я выйду и снова открою Vim (на самом деле MacVim) и использую gfgf
в качестве своего сопоставления, я могу просто набрать gf
(один раз), и он отлично работает:
nnoremap gfgf :call GFOrg()<CR>
Может кто-нибудь объяснить, почему мне не нужно дважды вводить gf
, чтобы сопоставить его с вызовом, и почему это останавливает ошибку рекурсии?