Ria*_*zvi 2 python vim org-mode
我想用来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
Run Code Online (Sandbox Code Playgroud)
现在,如果我将其映射为覆盖gf
:
nnoremap gf :call GFOrg()<CR>
Run Code Online (Sandbox Code Playgroud)
我收到一个递归错误:
但是,如果我退出并重新打开Vim(实际上是MacVim),并gfgf
用作映射,则只需键入gf
(一次)就可以了:
nnoremap gfgf :call GFOrg()<CR>
Run Code Online (Sandbox Code Playgroud)
谁能解释为什么我不需要gf
两次键入就可以映射到调用,以及为什么它停止了递归错误?
您正在使用:normal
调用gf
,它将再次调用您的映射,这导致了递归。您应该使用:normal!
以避免重新映射。
话虽这么说,我们可以做得更好!
'filetype'
的org
将以下内容添加到~/.vim/after/ftplugin/org.vim
:
nnoremap <buffer> gf :call search('\[\[.', 'bce', line('.'))<cr>gf
Run Code Online (Sandbox Code Playgroud)