1
我想要一个动作跳转到代码块的末尾。我写了一个函数,我试图onoremap它,但它不起作用。这是我做的:编写自定义动作需要一些帮助
onoremap <silent> } :set opfunc=MovementToEdgeOfBlock(1)<cr>[email protected]
如果我做的只是:
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
非常感谢你。 – gvlasov