Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 使用&;时如何消除空间间隙;vim中的符号_Linux_Vim_Substitution - Fatal编程技术网

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

Linux 使用&;时如何消除空间间隙;vim中的符号,linux,vim,substitution,Linux,Vim,Substitution,我想在所有以“w”结尾的单词后面加上“caps”。 例如,“下巴”应该变成“下巴”,而“吹气”应该变成“吹气帽” 下面的命令使用正则表达式来实现上面的要求 :%s/[A-Za-z][A-Za-z]*w[^A-Za-z]/&caps 但是当我使用上面的命令时,“jaw”将转换为“jaw caps”而不是“jawcaps” 如何删除位于“jaw”和“caps”之间的空格?您的正则表达式有问题,您的正则表达式将匹配值后的非字符。在您的情况下,匹配jaw[一个空格]而不是jaw :%s/[A-

我想在所有以“w”结尾的单词后面加上“caps”。 例如,“下巴”应该变成“下巴”,而“吹气”应该变成“吹气帽”

下面的命令使用正则表达式来实现上面的要求

:%s/[A-Za-z][A-Za-z]*w[^A-Za-z]/&caps
但是当我使用上面的命令时,“jaw”将转换为“jaw caps”而不是“jawcaps”


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

您的正则表达式有问题,您的正则表达式将匹配值后的非字符。在您的情况下,匹配
jaw[一个空格]
而不是
jaw

:%s/[A-Za-z][A-Za-z]*w[^A-Za-z]/&caps
                       ^^^ here match a space
我建议您使用capture正则表达式

:%s/\([A-Za-z][A-Za-z]*w\)\([^A-Za-z]\)/\1caps\2
应该使用更好的解决方案

这个怎么样:

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

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

  • 搜索“w”字符是单词最后一个字符的每个位置:
    /w\>

  • 但不要匹配“w”:只应匹配“w”后面的零宽度空格:
    /w\>\zs
    (或
    /w\zs\>

  • 将匹配项替换为单词“caps”:
    s/w\>\zs/caps/

  • 在每一行上这样做:范围是
    %
    ,在这些行上的每一次出现:标志是
    g

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

    • 匹配单词结尾
      :h/\>
    • 设置匹配开始
      :h\zs
    • 替换命令
      :h:s
    • 范围规格<代码>:h:范围
    • 替换标志
      :h:s_标志

    我认为这是目前为止最好的答案,但稍加解释会有所改进。
    :%s/w\>\zs/caps/g