如何在可视模式下阻止替换代码?


26

我有一个要替换前两个字符的项目列表:

a) item 1
b) item 2
c) item 3

最快的方法是什么:

* item 1
* item 2
* item 3

我有一种使用可视模式的方法(Ctr-v,jjj,但是需要执行两个替换命令。irc,可以使用1个命令完成此替换)


1
喜欢.,.+2s/^../*/(或等效地在视觉选择中)?为什么要使用两个替换命令?2c将替换两个字符。
muru

有时只更改视觉选择中的第一行,然后使用重复。其他的行把事情搞砸了。
–poseid

2
@poseid您是否习惯按Ctrl-C而不是Esc?除其他外,这可以防止将更改应用于可视块选择的每一行。
tommcdo

那可能是造成混乱的主要原因!谢谢!
–poseid

Answers:


26

可视块选择:

<C-v>
jjl
c*
<Esc>

:normal

:,+2norm! cE*

替代:

:,+2s/^.\{2}/*

点公式:

cE*<Esc>
j.
j.

1
疯狂的方法:使用textobj-word-column.vim可以ciC*<esc>完成。注意:此插件是“按我的意思做”的插件,因此它在意外的地方和方式中均会失败,但是在诸如此类的一些简单情况下,该插件仍然有用。
彼得·林克

有趣的法线和点公式!
–poseid

3
请注意,对于可视块解决方案,您只会看到在第一行键入的文本。按下后<Esc>,它将填充剩余的行。
tommcdo

有什么建议可以记住c将替代吗?怎么样CTRL + d(自己)
约旦麦基

2
@JordanMackie c用于“更改”。
romainl

17

这是更有效的方法:

  1. 将光标放在第一项和第一个字母(0)上,进入“逐行”可视模式Ctrl+ v并选择当前段落的第一列,方式是}(如果列表以新行结束),否则请使用其他方法,例如箭头键(移动周围的选择),或模式搜索/c)c您的最后一个元素在哪里)。
  2. 通过kl(或使用箭头键)移动到列表的最后一个符号,因此将选择要更改的两列。
  3. 通过按c并选择项目符号(*)来更改选定的文本,然后按来结束Esc

更有效地工作,尤其是在较长的列表中。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.