Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vim 在操作员模式下替换运动_Vim - Fatal编程技术网

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
  • dF
    (d+F+)
如果您仍然觉得需要覆盖
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>