我想要一个动作跳到代码块的末尾。我写了一个函数,我正在尝试对其进行映射,但它不起作用。这是我所做的:
onoremap <silent> } :set opfunc=MovementToEdgeOfBlock(1)<cr>g@
如果我只是这样做:
nnoremap <silent> } :call MovementToEdgeOfBlock(1)<cr>
然后该功能按预期工作。但我更需要它作为其他命令的动作。那么我做错了什么?
这是函数本身(我不认为问题出在函数中,但无论如何):
function! MovementToEdgeOfBlock(direction)
let startLine=line(".")
function! HowManyTabs(line)
let i=0
while a:line[i]==#"\t"
let i+=1
endwhile
return i
endfunction
let startLineTabs = HowManyTabs(getline("."))
echom startLineTabs " tabs"
if a:direction==1
let tabs=HowManyTabs(getline(line('.')+1))
else
let tabs=HowManyTabs(getline(line('.')-1))
endif
while tabs>startLineTabs
if a:direction==1
execute "normal! j"
else
execute "normal! k"
endif
let tabs=HowManyTabs(getline(line('.')))
endwhile
endfunction