gpt4 book ai didi

python - 对 Vimscript 递归错误的解决方案感到困惑

转载 作者:行者123 更新时间:2023-11-28 21:37:07 27 4
gpt4 key购买 nike

我想使用 gf 打开 .org 文件中的超链接文件名(我使用 vim 插件 vim-orgmode ):

enter image description here

我输入 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

但是如果我退出并重新打开 Vim(实际上是 MacVim),并使用 gfgf 作为我的映射,我只需输入 gf (一次),它就可以正常工作:

nnoremap gfgf :call GFOrg()<CR>

谁能解释一下为什么我不需要输入两次 gf 来映射到调用,以及为什么它会停止递归错误?

最佳答案

您正在使用 :normal 调用 gf ,这将再次调用您映射,从而导致递归。您应该使用 :normal! 以避免重新映射。

话虽这么说,我们可以做得更好!

  • 应该进行缓冲区本地映射
  • 仅将此映射应用于 org 的缓冲区的 'filetype'

将以下内容添加到~/.vim/after/ftplugin/org.vim:

nnoremap <buffer> gf :call search('\[\[.', 'bce', line('.'))<cr>gf 

关于python - 对 Vimscript 递归错误的解决方案感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50182878/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com