我想使用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
现在,如果我将其映射到override
gf
:nnoremap gf :call GFOrg()<CR>
我得到一个递归错误:
但如果我退出并重新打开Vim(实际上是MacVim),并使用
gfgf
作为映射,我只需键入gf
(一次),它就可以正常工作:nnoremap gfgf :call GFOrg()<CR>
有人能解释为什么我不需要输入
gf
两次就可以映射到调用,以及为什么它会停止递归错误吗? 最佳答案
您正在使用:normal
调用gf
,这将再次调用导致递归的映射。您应该使用:normal!
来避免重新映射。
有人说我们可以做得更好!
应该是缓冲区本地映射
仅将此映射应用于缓冲区
在'filetype'
中添加以下内容:
nnoremap <buffer> gf :call search('\[\[.', 'bce', line('.'))<cr>gf