vim - 在 VIM 中自动插入之前

标签 vim

我想快速修改文档

00
01
10
11

看起来像
000
001
010
011
100
101
110
111

当然,我可以用蛮力来完成(如上所示),但我想快速完成,因为我发现我正在做很多这样的事情。到目前为止,我的方法是猛拉和粘贴 4Y 4j 4P
00
01
10
11
00
01
10
11

那么是否有命令在每行之前插入 0 4 次?我知道它类似于 4, 0, i, 0, esc ~~我希望它是 4 轮 0(移动到行的左侧),插入模式,插入 0,重新输入命令模式。

谢谢

最佳答案

  • 使用视觉块模式:
    y3j
    <C-v>3j
    I0<Esc>
    '>
    p
    <C-v>3j
    I1<Esc>
    

    可以从 1 开始填充和使用 P跳过 '> :
    y3j
    <C-v>3j
    I1<Esc>
    P
    <C-v>3j
    I0<Esc>
    
  • 仅使用 Ex 命令:
    :,+3y<CR>
    :,+3norm! I0<CR>
    :put
    :<Up> "use commandline history to save some typing
    <Backspace>1<CR>
    
  • 混合使用替换和正常模式命令:
    y3j
    :,+3s/^/0<CR>
    p
    :<Up>
    <Backspace>1<CR>
    

  • 如果你经常这样做,在宏中记录它可能是最好的策略。在这一点上,实际的填充是如何完成的并不是真正相关的,因为您所做的唯一输入是 @x无论如何,宏可能是即时的。

    你在录制过程中做了什么并不重要,这是一个例子:
    qx
    y3j
    :,+3s/^/0<CR>
    p
    :,+3s/^/1<CR>
    q
    

    假设你有这个:
    [0]0
    01
    10
    11
    

    @x把上面的变成:
    000
    001
    010
    011
    100
    101
    110
    111
    

    您的宏已保存到寄存器 x并且仍可用于您的下一个 Vim session 。

    而且我敢肯定有人可以想出一个不错的单衬。

    编辑

    以上宏的分步说明:
  • qx , 在寄存器中开始录音 x (它可以是任何可用的寄存器)。
  • y3j , 猛拉当前行和接下来的三行。
  • : ,无需解释。
  • ,+3 ,这是我们正在研究的范围。定义此范围的更正确方法是 .,+3 .范围的开始行和结束行由逗号分隔。

    起始行是当前行,我们可以省略它以节省一些输入,所以我们留下了昏迷,然后是结束行,相对于当前行表示,+3 .
  • s/^/0<CR> ,这是一个简单的替换。
    ^在搜索模式中的意思是“行的开头”。它不匹配第一个字符,所以它非常适合这样的情况,我们想在一行中添加一些东西。

    所以,基本上我们在行前面加上 0 .它可以是任何你想要的。

    当您对某个范围执行替换时,会在该范围的每一行上执行替换。在这里,我们有四行,所以每行前面都带有 0 .
  • <CR> ,是,嗯…… <Enter>用于执行替换的键。
  • p ,将我们之前猛拉的四行粘贴到当前行下方。
  • :,+3s/^/1<CR> , 与之前相同,但带有 1 .
  • q , 结束录音。

  • 而且,为了回答您的评论,您可以通过以下方式解决这个问题:
    00
    01
    10
    11
    

    成:
    00 0.0
    01 0.0
    10 0.0
    11 0.0
    

    您需要使用另一个“ anchor ”。 ^是“行的开始”,$是“行尾”,所以替换变成:
    :,+3s/$/ 0.0
    

    关于vim - 在 VIM 中自动插入之前,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15106402/

    相关文章:

    vim - 有什么方法可以将Vim中的语法彩色文件复制为HTML?

    c - 如何从 VIM 运行 C 程序?

    vim - 在 Sublime Text 复古模式下如何重新映射转义?

    vim - 移动到vim行中给定字符的最后一个实例?

    Vim 可视化地选择一个 Bash 变量

    vim - 如何在 vim 的 shell 命令输出中滚动?

    vim - 如何关闭所有选项卡和窗口但保持 vim 打开

    rspec - 为什么我只在 VIM 中的某些项目中获得 RSpec 的语法高亮显示?

    Vim - 改变当前 quickfix 行的高亮显示。 (快速修复线)

    vim - 当文件已经垂直打开时,在 vim 中水平打开不同的文件(不关闭文档)