我有一些这样的文字行:
firstName
lastName
email
现在我private readonly string
在第一行的开头添加内容。我该如何对其他行重复此编辑?(当然不是手动访问每一行)(顺便说一句,我确实意识到这可以用正则表达式来完成,但如果可能的话,我正在寻找一种“vi 方式”)
为了以防万一,我正在使用维姆
答案1
firstName
在正常模式下导航至并输入
qaIprivate readonly string <ESC>jq
a
这将记录您在行首添加“private readonly string ”的宏(在寄存器中),然后向下移动一行。如果您想重复此宏两次(从而重复下两行的命令),请在命令模式2@a
下在该行上键入lastName
,这将再执行两次宏。
这种方法满足了您的“不手动访问每一行”的要求;但是对于您的应用程序来说,它有点重量级。
如果private readonly string
您反对输入,一个快速解决方案是在第一行进行编辑,然后向下移动到要进行编辑的每一行并.
在正常模式下使用。这将重复您的最后一个命令(在本例中是将文本添加到行中),而不会造成任何麻烦。
答案2
另一种方法是使用视觉块模式:
- 将光标放在第一行的开头。
- 按Ctrl+v进入 Visual Block 模式。
- 按下j向下移动,扩大选择范围以包含您想要的行。
- 按下I即可进入(前置)插入模式。
- 类型
private readonly string
。 - 按Esc。这将使您返回命令模式,并且您输入的文本将被重复每行在您的可视块选择开始之前(在本例中,是在每行的开头,因为这是您开始选择的地方)。
答案3
:normal 也很棒 (而且更短):
:.,+2norm Iprivate readonly string
.,+2
- 从这里到下面的两行(或者你可以使用视觉模式shift+选择这些行v,然后输入:以进入 ex 模式)norm
- 像在正常(命令)模式下输入一样输入这些命令I(...)
- 在行首插入以下字符串
答案4
为了以交互方式执行此操作而不需要太多的思考和准备(如果您已经在第一行输入了文本,但后来发现您需要在几行中输入它):
按照通常的方式
I
在第一行插入文本。v
按或V
或打开视觉模式<c-v>
。抓取所有要应用更改的行。在本例中,
jj
这样做就行了。按下
:norm .
然后回车。