Vim 在操作员模式下替换运动
我试图在与操作员一起使用时更改Vim 在操作员模式下替换运动,vim,Vim,我试图在与操作员一起使用时更改ge运动的功能。与其在目标单词的最后一个字符上操作,我希望它只在目标单词的最后一个字符之前工作,类似于w 例如: foo bar ^ 应该导致 当我使用dge时,光标位于^ 我对Vimscript一无所知,现在我非常依赖于exe。我写的这个快速尝试似乎充满了错误。这些变量似乎根本不正常工作 我的主要想法是,当ge在运算符模式下被键入时,退出,并用正确的参数调用函数。然后在起始位置设置一个标记,向左移动一列(以确保它可以重复移动,即使这只是操作员模式),移
ge
运动的功能。与其在目标单词的最后一个字符上操作,我希望它只在目标单词的最后一个字符之前工作,类似于w
例如:
foo bar
^
应该导致
当我使用dge
时,光标位于^
我对Vimscript一无所知,现在我非常依赖于exe
。我写的这个快速尝试似乎充满了错误。这些变量似乎根本不正常工作
我的主要想法是,当ge在运算符模式下被键入时,退出,并用正确的参数调用函数。然后在起始位置设置一个标记,向左移动一列(以确保它可以重复移动,即使这只是操作员模式),移动ge
s的设置量,然后向右移动一列(我的主要目标在这里)并删除,直到设置标记
如果有人能指出我犯的错误,我将不胜感激
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>
函数!修理工(计数、操作员)
exe'normal m['
exe“正常h”
exe计数。'normal ge'
exe'正常l'
exe运算符。'normal`['
端功能
onoremap-ge:call-FixGE(v:prevcount,v:operator)
通过使用f
和t
运算符,您的示例可以在不更改ge
运动的情况下解决:
dTo
(d+F+)dF
ge
的默认行为,则应检查:
这有点接近(未经测试):
函数!修正(计数,运算符)
exe'normal m['
exe“正常h”
exe“正常”。a:计数。“ge”
exe'正常l'
exe'normal'.a:运算符''`['
端功能
onoremap-ge:call-FixGE(v:prevcount,v:operator)
函数参数必须使用:前缀(我认为是sigil)。我知道count
是一个保留变量::let count=7
给出一个错误。不过,我认为可以将其用作函数参数
我也把“代码>:正常的< /代码>在两行开始,而不是在中间。
我理解了。我已经改变了答案中的注释,用另一种方法来解决这个问题。我当然熟悉<代码> f>代码>,我想这是一个一致性的问题,而不是实用性问题。我最初开始工作。在这一点上,当我使用dge
来纠正我无意中键入了2个空格而不是1的错误时。我还将ge
重新映射到一个键,因此速度也会更快。无论如何,我认为这应该是可行的,而且我也对理论层面的解决方案感兴趣。但我会检查CountJump,谢谢。非常感谢你,这些nges成功了!E:对于可能感兴趣的任何人:记住在exe'normal
之后添加感叹号(!)以避免循环
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.
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>