在Vim中,如果你运行
:g/some_word/d_
包含" some_word"的所有行被删除,光标自动跳转到上次删除的位置。我希望光标保持在操作之前的位置。我该如何做到这一点?
答案 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_