vim删除(字符/编号)和(字符编号)之间的单个空格

vim删除(字符/编号)和(字符编号)之间的单个空格,vim,Vim,我有一个包含四个变量(TA 000、TB 111、T2 333、T56 R88)的文本文件,它们之间用3个空格分隔,如: TA 000 TB 111 T2 333 T56 R88 是否可以使用vim擦除变量内的单个空格,保持分隔变量的3个空格完好无损 TA000 TB111 T2333 T56R88 当然可以。一种方法是捕获组,捕获单词+单个空格+数字,并仅使用单词+数字重新组合: :%s/\(\w\+\) \(\d\+\)/\1\2/g 另一种方法只匹配单个

我有一个包含四个变量(TA 000、TB 111、T2 333、T56 R88)的文本文件,它们之间用3个空格分隔,如:

TA 000   TB 111   T2 333   T56 R88   
是否可以使用vim擦除变量内的单个空格,保持分隔变量的3个空格完好无损

TA000   TB111   T2333   T56R88

当然可以。一种方法是捕获组,捕获单词+单个空格+数字,并仅使用单词+数字重新组合:

:%s/\(\w\+\) \(\d\+\)/\1\2/g
另一种方法只匹配单个空间(并将其替换为零),断言(但不匹配)其周围的内容:

:%s/\w\zs \ze\d//g
\zs
\ze
(您可以通过
:h/\zs
等在此处查找任何内容)特定于Vim。另一种变体(也适用于其他正则表达式引擎)将使用正向的lookahead和lookahead,但语法更复杂

如果这三个空格有特殊的含义(限制匹配的位置),您也可以将它们合并到这两种方法中。我把这件事留给你们,因为这些相对简单的问题提供了很好的学习经验:-)