如何在vim中进行列编辑?

Laz*_*zer 52 vi vim editor

按行编辑时Vim非常强大 - 搜索/替换工具被建模为按行工作.

但是,如果我想在所有行中更改特定列,该怎么办?例如,如何#轻松地将文件中的第80列更改为?

sa1*_*125 118

要编辑列,请按照下列步骤操作:

  1. 站在专栏的开头
  2. Ctrl+ Shift+ v,然后在要编辑的列上标记.
  3. Shift+ i在列的开头插入文本,Shift+ a添加文本,r替换突出显示的文本,d删除,c更改...等.
  4. ESC完成后点击.

我认为人们(我)有时会将列编辑键映射到Ctrl+,Q因此如果您将其映射,它将不会与视觉选择行(V)或粘贴文本发生冲突.

  • [Ctrl] + [V]是逐块视觉模式,@ Lazer在回答我的回答时描述为"凌乱".这将是我的首选方式(使用[r]将列替换为'#'),但OP已表明这是不可接受的. (5认同)
  • 我同意你的观点,这是最好的工作方式,也许这个问题的未来访问者会觉得这很有用,所以你得到我的投票. (2认同)
  • ctrl-V和ctrl + A对我不起作用,我(shift-i)和A(shift-a)确实,r,d和c按预期工作. (2认同)
  • 我需要点击两次ESC才能完成任务.当我按shift + i插入文本时,它只显示第一行的变化,但最终所有选定的行都会改变. (2认同)

Joh*_*web 39

您可以使用替换,其中模式的特定列匹配(\%c):

:%s/\%80c/#/<CR>
Run Code Online (Sandbox Code Playgroud)

或者您可以使用逐块视觉模式:

gg80|CTRL+vGr#

' virtualedit'选项可用于将光标定位到没有实际字符的位置:

:set virtualedit
Run Code Online (Sandbox Code Playgroud)


Fra*_*cho 34

...我无法按照sa125(facepalm)的步骤进行操作,所以我找了一些其他地方,发现了一些"更容易:https ://blog.pivotal.io/labs/labs/column-edit-mode-in-vi

  1. Ctrl+ v[并选择你想要的]
  2. Shift+ i[并写下任何内容......(请查看*下方)]
  3. Esc

*!注意事项不要因为"写什么......"只改变第一行这一事实而气馁!

希望能帮助到你!

  • 奇怪的是,在按下[Esc]并导航离开当前位置后才会显示任何内容. (7认同)
  • 嗨@Alex.S。我认为您需要使用“Ctrl+v”选择要删除的整列,然后按“x” (2认同)