我想使用gf
打开.org
个文件中的超链接文件名(我使用vim插件vim-orgmode):
我输入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>
我收到了一个递归错误:
但是如果我退出并重新打开Vim(实际上是MacVim),并使用gfgf
作为我的映射,我只需输入gf
(一次)就可以了。它可以正常工作:
nnoremap gfgf :call GFOrg()<CR>
任何人都可以解释为什么我不需要两次输入gf
来映射到调用,以及为什么它会停止递归错误?
答案 0 :(得分:4)
您正在使用:normal
来调用gf
,它会再次调用您的映射,这会导致递归。您应该使用:normal!
来避免重新映射。
据说我们可以做得更好!
'filetype'
的{{1}} 将以下内容添加到org
:
~/.vim/after/ftplugin/org.vim