如何防止操作后自动退出视觉模式?

How do I prevent auto visual mode exit after an action?

我想防止退出视觉模式,尤其是当我选择了一个视觉块并将其粘贴到某处时。 一个示例用例是: 我在两个文件之间复制并粘贴了一段代码,但我想在粘贴后修复缩进。我不想再次重新选择代码块然后修复缩进。

I want to prevent exitting visual mode

你不能。在可视模式下执行命令后,您必须将其保留为正常模式。

I don't want to reselect the block of code once again

An example use case is: I copy and paste a block of code

在你的情况下,它是一个新块,因此不能“重新selected”。所以你真的必须自己select。使用 1v(或 1vl if set selection=exclusive)来简化此操作。

您也可以随时创建映射。例如

nnoremap <Leader>p pg`[1v

实际上,您可以使用 gv 选项“重新select”之前 select 编辑的视觉块。我实际上使用以下选项在缩进块后保持可视模式。

vnoremap < < gv
vnoremap > > gv

基本上,它是 visual 模式下的映射 no recursive maping (vnoremap) 将 < 命令映射到 < gv。换句话说,它在之后应用 <gv。因此,您可以采取行动并“重新select”之前select编辑的视觉块。

编辑: 这是另一个示例,映射 Alt+kAlt+j 上下移动 selected 视觉块,同时“重新select”视觉块。

vnoremap <A-k> :m '<-2<CR>gv=gv
vnoremap <A-j> :m '>+1<CR>gv=gv