是否有用于选择粘贴文本的vim命令?

Xav*_* T. 30 vim

我发现自己经常重复以下操作模式.

我通常进入视觉模式,选择一些行或块.然后我用y它们猛拉它们,然后使用p或粘贴它们P.下一步是选择粘贴的文本,替换变量或函数名称或更改缩进.

我知道我可以gv用来重新选择"原点",但我想要的是一个类似命令来选择"目的地".

:help gv提到: 但它仅在您通过寄存器内容替换选择时有用,而不是在插入整个新块时.
After using "p" or "P" in Visual mode the text that was put will be selected.

Luc*_*tte 47

你在找

`[v`]
Run Code Online (Sandbox Code Playgroud)

  • 如果您能解释这是如何工作的,那将是很好的。 (3认同)
  • 我已将其重新映射到`gp`,它完美无缺.这很好,因为我认为我不能从以下信息中挖掘出来:帮助!谢谢!复制后更改缩进也很棒. (2认同)
  • 或直接\`[= \`] (2认同)
  • 没什么好说的。`'[` 和 `']` 是 vim 自动设置到“先前更改或拉出的文本”的开头和结尾的标记。`v` 允许在两者之间进入可视模式。 (2认同)

Pet*_*ker 10

我更喜欢以下简单的映射到Benoit的功能

nnoremap <expr> g<c-v> '`[' . strpart(getregtype(), 0, 1) . '`]'
Run Code Online (Sandbox Code Playgroud)

详细了解表达式图:

:h :map-expression
Run Code Online (Sandbox Code Playgroud)

正如@ZyX指出的那样,strpart不是必需的,可以改写为:

nnoremap <expr> g<c-v> '`[' . getregtype()[0] . '`]'
Run Code Online (Sandbox Code Playgroud)


hta*_*ess 5

您的用例之一是在粘贴后更改缩进。

我使用以下地图来实现此目的:

nnoremap <leader>[ `[V`]<
nnoremap <leader>] `[V`]>
Run Code Online (Sandbox Code Playgroud)

他们执行以下操作:

  • 取消最近粘贴的块的缩进
  • 缩进最近粘贴的块

我发现这些地图非常有用且使用得很好。