我正在尝试在与运营商一起使用时更改ge
动作的功能。我希望它不会在目标词的最后一个字符上运行,而是只使用直到目标词的最后一个字符,类似于w
。
示例:
foo bar
^
应该导致
当fooar
使用光标位于^
foar
代替dge
我对Vimscript一无所知,现在我非常依赖exe
。我写的这个快速尝试似乎充满了错误。变量似乎根本不起作用。
我的主要想法是在操作员模式下键入ge并且希望使用正确的参数调用函数时逃避。然后在起始位置设置一个标记,向左移动一列(以确保它可以重复运动,即使这只是操作员模式),移动ge
的设定量然后移动一个列右(我的主要目标在这里)并删除直到设置标记。
如果有人能够指出我所犯的错误,我们将不胜感激!
function! FixGE(count, operator)
exe 'normal m['
exe 'normal h'
exe count.'normal ge'
exe 'normal l'
exe operator.'normal `['
endfunction
onoremap ge <esc>:call FixGE(v:prevcount, v:operator)<cr>
答案 0 :(得分:1)
使用ge
和f
运算符可以在不更改t
动作的情况下解决您的示例:
dTo
dF
(d + F +&lt; space&gt;)如果您仍然觉得需要覆盖ge
的默认行为,请检查Ingo Karkat's plugin, CountJump : Create custom motions and text objects via repeated jumps:
DESCRIPTION
Though it is not difficult to write a custom movement (basically a :map
that executes some kind of search or jump) and a custom text-object (an
:omap that selects a range of text), this is too complex for a novice user
and often repetitive.
答案 1 :(得分:1)
这有点接近(未经测试):
function! FixGE(count, operator)
exe 'normal m['
exe 'normal h'
exe 'normal ' . a:count . 'ge'
exe 'normal l'
exe 'normal ' . a:operator . '`['
endfunction
onoremap ge <esc>:call FixGE(v:prevcount, v:operator)<cr>
函数参数必须使用:a
前缀(或者我认为是sigil)。我知道count
是保留变量::let count = 7
给出错误。我认为将它用作函数参数是可以的。
我还将:normal
放在两行的开头,而不是在中间。