交换行中的 1 和 0

Kar*_*lsD 4 vim

我有以下几行: 0110101010

需要将1转换为0,0转换为1,即得到: 1001010101

有没有办法用 vim 做到这一点?

mat*_*ttb 8

只使用临时变量怎么样:

:s/0/x/g | s/1/0/g | s/x/1/g

允许|按顺序执行多个命令(请参阅:help :command-bar)。

因此,我们首先更改0x(这样我们就不会在第二个命令中得到全零),然后更改10,最后将x(以前的0)更改为1

  • @Ivan 我更新了答案来解释。 (2认同)

Lie*_*ers 5

您可以使用匹配项在替换语句中对其应用一些逻辑

:s/\v(0|1)/\=submatch(0)==0?1:0/g
Run Code Online (Sandbox Code Playgroud)

分解为

\v(0|1)                   search for either a 0 or 1
\=submatch(0)==0?1:0      if match equals 0 replace with 1, otherwise with 0
Run Code Online (Sandbox Code Playgroud)

寻找:h \=:h submatch寻求额外的帮助。

将cudo编辑为 BEn C

或者,使用一些巧妙的算术来缩短命令

:s/\v(0|1)/\=1-submatch(0)/g
Run Code Online (Sandbox Code Playgroud)

  • 您可以使用 `:s/\v(0|1)/\=1-submatch(0)/g` 的算术来保存一些字符 (2认同)