如何在使用&amp ;;时消除空隙vim中的符号

时间:2015-10-12 04:21:33

标签: linux vim substitution

我想在以“w”结尾的所有单词的末尾添加“大写字母”。 例如,“jaw”应成为“jawcaps”,“blow”应成为“blowcaps”

以下命令使用正则表达式来达到上限要求。

SELECT * INTO #TempTable
FROM TableG

ALTER TABLE #TempTable
DROP COLUMN a

SELECT * FROM #TempTable

DROP TABLE #TempTable

但是当我使用上面的命令时,“jaw”会转换成“jaw caps”而不是“jawcaps”

如何删除位于“jaw”和“caps”之间的空间?

3 个答案:

答案 0 :(得分:2)

这个怎么样:

:%s/w\>\zs/caps/g

答案 1 :(得分:1)

你的正则表达式有问题,你的正则表达式会匹配值 w后的非字符。在您的情况下,请匹配jaw[one space]而不是jaw

:%s/[A-Za-z][A-Za-z]*w[^A-Za-z]/&caps
                       ^^^ here match a space

我建议您使用捕获正则表达式。

:%s/\([A-Za-z][A-Za-z]*w\)\([^A-Za-z]\)/\1caps\2

更好的解决方案应该是使用look behind

:%s/\w\w*w\w\@!/&caps

答案 2 :(得分:0)

Sato Katsura的回答:%s/w\>\zs/caps/g的作用如下:

  1. 搜索" w" character是单词的最后一个字符:/w\>

  2. 但是不能匹配" w":" w"之后只有一个零宽度的空间。应匹配:/w\>\zs(或/w\zs\>)。

  3. 将该匹配替换为"大写":s/w\>\zs/caps/

  4. 在每一行都这样做:范围为%,并且在这些行的每次出现时:标志为g

  5. 把它放在一起::%s/w\>\zs/caps/g

    • 匹配单词结束:h /\>
    • 设置匹配开始:h \zs
    • 替换命令:h :s
    • 范围说明:h :range
    • 替换标志:h :s_flags