vim用变量替换多行(在寄存器中)

时间:2017-05-31 10:50:53

标签: vim replace

我正在使用Vim并且已将${HOME}保存在注册表中,这是将../../..替换为${HOME}的最快方法吗?

LDFLAG = -L../../../libs
         -L../../../libs

结果

LDFLAG = -L${HOME}/libs
         -L${HOME}/libs

3 个答案:

答案 0 :(得分:1)

假设您的光标位于<div style="display:none"> spam text and links</div> .的第一个../../../,并且您的文字存储在注册a中...

使用视觉块选择

  1. <C-v>进入可视屏幕模式,
  2. 将选择范围水平扩展到/的最后../../../
  3. 垂直扩展选择
  4. "ap从注册a
  5. 重复

    1. v进入可视模式,
    2. 将选择范围水平扩展到/的最后../../../
    3. "ap从注册a
    4. 将光标移动到下一个../../../
    5. .重复。
    6. 替换

      1. :,+s@\.\./\{3}@<C-r>e<CR>

答案 1 :(得分:1)

如果您有${HOME},请勾选"u,然后按ctrl+v,选择../../../,然后按s,然后按ctrl+R (应显示")和您的注册信(我们的示例中为u)。

答案 2 :(得分:0)

我不知道“我有${HOME}保存在寄存器上”意味着但最简单的解决方案是

:%s#\M../../..#${HOME}#

它正在用../../..替换所有${HOME},或者如果您真的使用了注册表(例如@a),那么您可以使用\=@a代替{{1}使用寄存器${HOME}的内容替换匹配。

解释

  • a:打开命令提示符
  • ::整个缓冲区......
  • %:...替换(substitute)匹配...
  • s:... non-magic pattern(例如文字字符串)
  • \M:使用sharp而不是大多数使用的斜杠(#)作为分隔符,因为模式包含斜杠
相关问题