如何使用":g / regex / d _"不会丢失当前光标位置

时间:2016-08-23 15:08:56

标签: vim

在Vim中,如果你运行

:g/some_word/d_

包含" some_word"的所有行被删除,光标自动跳转到上次删除的位置。我希望光标保持在操作之前的位置。我该如何做到这一点?

3 个答案:

答案 0 :(得分:3)

你不能让光标保持,但你可以让它回到到它的位置:

:g/some_word/d_|norm ''

答案 1 :(得分:3)

罗曼尔的答案是一个很好的答案,它应该可以做到这一点而不需要额外的麻烦。

如果这是一个常见问题,并且您不想在最后添加额外的norm! ''(或者在您完成时键入键序列),则可以将其封装在一个命令:

command! -nargs=* G call s:G(<q-args>)

function! s:G(args)
  let saved_position = winsaveview()
  exe 'g'.a:args
  call winrestview(saved_position)
endfunction

:G命令将调用s:G函数及其所有参数,这些参数保存位置,使用这些精确参数运行普通g,然后恢复它。所以你做:G/some_word/d_它会运行命令并将光标恢复到它开始的行/列中。

显然,只有经常使用它并且你不经常使用裸Vims(比如远程服务器等),这才有意义。否则,尝试romainl的建议可能是个更好的主意,或者习惯于在''中输入内容。你的选择。

此外,如果当前位置恰好是之后其中一些行,则光标可能会在意外的位置结束。例如,如果您的光标位于第7行并且命令删除了第3行,那么您将返回第7行,但是所有文本都会向上移动一行,因此您将在&中#34;错误&#34;地点。您可以使用此功能并补偿更改,但它会非常复杂,所以我不推荐它:)

答案 2 :(得分:1)

anwolib plugin提供了一个方便的:KeepView命令;你可以将它应用于任何Ex命令,因此它比@AndrewRadev建议的:G命令更通用:

:KeepView g/some_word/d_