Vim:如何以可视块模式插入?


Vim: How to insert in visual block mode?

在Vim中处于可视块模式(通过按ctrl-V)时如何插入?

  • VIM Blockwise Insert可能重复
  • 快速总结回答:我只是简单地将答案放在这里。 有太多评论,这个帖子已经淹没了。 1)通过在Vim中键入:ver,检查您的Vim版本是否启用了+ visualextra。 2)您首先标记要编辑的内容,然后按I(大写i) - 小写我将无法使用。 3)一旦你这样做,那么你可能看起来只是插入第一行,但是当你完成后,然后按ESC和j,然后将文本复制到其他行。 这就是我的方式。


试试这个

选择文本块后,按Shift + i或capital I

小写i将无法正常工作。






如果这不起作用......

检查您的Vim版本是否已启用+visualextra

您可以通过键入:ver并滚动功能列表来完成此操作。 (您可能希望将其复制并粘贴到缓冲区中并进行增量搜索,因为格式很奇怪。)

启用它超出了这个问题的范围,但我相信你可以在某个地方找到它。

  • 别忘了A
  • 为什么小写i在可视模式下不起作用?
  • 在复制文本之前,您还必须按escape才能退出插入模式。
  • 有没有人见过这个不起作用?我在CentOS上有一个未修改的vim设置。我按ctrl + v,按几次j,我看到光标突出显示几行的第一个字符。我按shift + i。光标移动到第一行的第一个字符,但我回到正常模式。我知道这一点,因为如果我按"a",它会将字符向右移动,并显示" - INSERT -"。如果我键入几个字符并按下escape,则不会应用于其他行。
  • @TylerCollier我遇到了关于digitalocean的Ubuntu 14.04的问题。如果您找到了解决方案,请发表评论。
  • @ZacharyBurt对不起,没办法解决。
  • @TylerCollier我在Ubuntu 12.04.5上遇到了同样的问题。对于我的特定用例,我可以根据下面的Nishant答案打开视觉块后使用"c"。
  • @ sixty4bit我在Ubuntu上从未遇到过这个问题。不幸的是,我无法在我最初提到的CentOS盒子上尝试你的答案。我再也无法访问任何CentOS机器了。
  • @ZacharyBurt与Ubuntu 14.04一起安装的默认vim(安装为vi)不包含visualextra功能,因此块插入在那里不起作用。 sudo apt-get install vim带来了一个功能更全面的版本,visualextra被激活。 @TylerCollier这也可能是您的CentOS安装上的相同问题:检查vim --version的输出以查看已激活功能的完整列表。
  • @GabrielGrant不幸的是,它为我说+ visualextra。是否有一个dotfile配置我必须激活它?
  • @ZacharyBurt嗯,奇怪。你有没有手动安装vim?一旦我做了,视觉块插入立即工作,没有任何dotfile更改。
  • @ Honghe.Wu因为iA用于将选择扩展到文本对象,请阅读我对此问题的回答或键入:help visual-operators
  • @Zachary Burt,就像Broandon Joyce所说的那样,也许你在将字符插入第一个选定的行后按下ESC,此操作生效。看到这个链接stackoverflow.com/questions/1676632/
  • ...也不要忘记r(非常适合ascii艺术)
  • @TylerCollier我也遇到过这个问题,我在这里发一个问题并得到答案,请查看stackoverflow.com/q/41670493/6521116
  • 如果像我这样的可怜的灵魂想知道为什么这个概念在你想要删除东西时不起作用,那就是因为你可以阻止选择并点击删除键。或者看看Nishan的答案并使用'c'键删除并将你置于插入模式,然后你可以添加新文本或只是点击转义然后你就完成了
  • 我在Mac上,这不起作用。对我有用的是这个答案:stackoverflow.com/a/43076392/61624。总之,编辑后按两次转义。


  • 按ctrl和v //开始选择
  • 按shift和i //然后键入任何文本
  • 按esc esc //按esc两次
    • 适用于Linux(Debian 9)
    • ctrl + v后,可以按j快速选择当前位置下方的线条,或按k快速选择当前位置上方的线条。您还可以使用带有updown错误的shift键进行选择。
    • 在所有答案中,这是唯一对我有用的答案。我在使用brew安装的mac上
    • 多年来我一直在抱怨我无法在块选择中轻松插入(如更改)。 所以它有一个大写i,我很惊讶。 我一直在使用:normal iINPUT输入行的开头。 非常感谢!


    您可能还有一个用例要删除文本块并替换它。

    像这样

    1
    2
    Hello World
    Hello World

    你可以在"W"之前进行视觉块选择并点击I - 输入"Cool" - 点击ESC,然后通过视觉块选择删除"World"。

    或者,更酷的方法是在两行中选择"世界"。键入c change。现在您处于insert模式。插入你想要的东西,然后点击ESC。两者都被较少的击键反映出来。

    1
    2
    Hello Cool
    Hello Cool

    • 最后一步对我有帮助,你必须点击ESC然后所有标记的行将显示你输入的字符。
    • 伟大的东西,它有很大帮助


    如果要在选定列之前或之后添加新文本:

    • 按ctrl + v
    • 选择列
    • 按shift + i
    • 写你的文字
    • 按esc
    • 按"jj"

    • 坦克你,jj将变化传播到下面的所有行是我失踪的最后一点!
    • jj是一个杀手!