VIM中的多选功能

62

在VIM的可视模式下,是否可以选择多个非连续行(或段落)?如果可以,如何实现?

3个回答

73

不,没有插件是不可能实现的。

但是,如果这样能解决您的问题,您可以将多行复制到同一缓冲区中。

  • 要启动“累积缓冲区”:
    • 在可视模式下标记要复制的部分,
    • "a 操作缓冲区 a
    • 像往常一样复制 (y)。
  • 要向该缓冲区添加内容:
    • 标记下一个部分并
    • "A (大写缓冲区名称表示“不要覆盖缓冲区,而是追加到它里面”)
    • 再次使用 y 复制。
  • 然后,您可以随时使用 "ap 粘贴累积的缓冲区 a

2
我希望我能接受两个回复。这也是好知道的。谢谢。 - Marcin
如果你能删掉那个“不可能”的部分,我会点赞这个回答。 - Michael Dillon
未实际删除,而是调整了第一句话。现在应该正确了。 - soulmerge
3
清空累积的缓冲区 a 的方法是输入:let @a=''。请注意,翻译不会改变原意,也不会添加解释或其他额外内容。 - eckes

30

4
如果有人不想阅读所有答案,下面有一个链接可以获取到更新更好的类似 Sublime 的插件。https://dev59.com/SHI-5IYBdhLWcg3w8NOB#16568663 - Jon Thoroddsen
1
是的,这个答案插件自2006年以来就没有得到维护。 - Steven Lu

29
一种更加现代化的解决方案是使用这个插件。(免责声明: 我个人实际上不使用它,因为它会干扰我的vim设置。如果你的vim相对干净,并且你正从sublime迁移,那么这肯定是你的选择。)
我还想指出vim的记录/回放功能(按下q键)。很多时候录制也是不必要的,我可以通过迭代的方式完成通常由sublime的多选完成的任务 (例如搜索某些内容,在第一个实例上执行修复操作,然后通过按nN移动以及按.重复编辑操作来完成后续操作)。
我已经将我的,(逗号)键nnoremap映射到@q,这就可以重复按下qq(录制到q寄存器中)来重复执行该序列。

我曾考虑过使用,映射,但是如果我使用ft跳转到行中的一个字符后,如何向后搜索呢? - SO_fix_the_vote_sorting_bug
我不能评论那个,因为我从未学会使用逗号键(这就是为什么我将其映射掉的原因)...大概是在你通过使用“;”超过你正在寻找的内容时有用。好吧,你可以使用T或F来在相反的方向上做同样的事情。 - Steven Lu
弃用又来袭!请使用 https://github.com/mg979/vim-visual-multi - Avinash R

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接