在 vim 中仅针对一行进行文本替换

在 vim 中仅针对一行进行文本替换

vi(m) 中是否有办法针对文件中的特定行进行字符串替换?

我需要经常将 Web 服务器的 SSL SHA 指纹添加到我的 Mercurial .hgrc 中。我可以通过双击挂锁并查看证书详细信息,轻松地从 Chrome 获取所需的签名,但我得到的签名带有空格分隔符,而不是 Mercurial 所需的冒号分隔符

06 32 1C C5 8A 49 77 85 C5 89 6F 67 75 96 F0 43 77 96 EB 90

示例来自Google 代码

有没有办法:

  1. 将所述指纹复制到我的剪贴板
  2. 使用 vi(m) 编辑我的 .hgrc
  3. 进入插入模式粘贴所述指纹
  4. 只针对该行

    :s/ /:/g

  5. 保存文件

现在我可以将指纹粘贴到新文件中,进行替换,然后使用:r 文件名,但这是一个额外的步骤,我不介意跳过。

答案1

弄清楚了:

将光标移到要修改的行,然后执行以下操作:

.s/ /:/g

替换命令前面的“。”告诉 vi(m) 您只想修改当前行。

参考:http://www.kingcomputerservices.com/unix_101/search_and_replace_with_vi_part_1.htm

答案2

如果要将其插入到第 N 行之后:

:N put =substitute(@+, ' ', '', 'g')

文件结束:N=$;文件开始:N=0。@+ 是剪贴板寄存器(当 GUI 运行时)。

答案3

简单:s/ /:/g就可以了。

:substitute命令默认只在当前行起作用。

全局修饰符/g表示替换指定范围内的所有匹配项,而不是整个文件。)

答案4

你是有意这么做吗?

echo "06 32 1C C5 8A 49 77 85 C5 89 6F 67 75 96 F0 43 77 96 EB 90" >> <filename>

相关内容