如何取代emacs恶魔中的第二个出现?

时间:2014-11-11 03:06:03

标签: emacs

我有以下文字

tset "abc" "123" kk
test "xyz" "345" zz

如何在双配额内替换第二个字符串?所以结果应该是

tset "abc" "replaced" kk
test "xyz" "replaced" zz

2 个答案:

答案 0 :(得分:1)

Evil模式解决方案是使用此命令:

:g/".*".*".*"/norm 3f"lct"replaced

这意味着:

  • g/".*".*".*" - 包含正则表达式(与两个引用的字符串匹配)的任何行
  • norm - 正常模式
  • 3f"lct"replaced - 转到第三个",向右移动一个字符,然后将文字更改为下一个"至"替换为"

它还需要范围,因此如果您愿意,可以在行的子集上使用它。

答案 1 :(得分:0)

我假设你想在常规的emacs缓冲区中这样做。 我还假设您希望第二个字符串始终替换为相同的值。 然后,您可以在emacs中使用replace-regexp命令,如下所示:

M-x replace-regexp <RET> \(tset "[^"]*"\) "[^"]*" <RET> \1 "replaced" <RET>

<RET>表示键盘上的Enter / Return键。

此命令搜索符合文件中正则表达式的字符串,并将其替换为您想要的任何内容。第一部分设置为一组,括号内的所有内容,您要保留。在替换字符串中表示为\1