我在每一行的末尾都重复了以下字符:
^[[00m
如何使用Vim编辑器从每一行中删除它们?
当我发出命令:%s/^[[00m//g
时,它不起作用。
答案 0 :(得分:74)
您可以使用:%s/.\{6}$//
逐字删除每行末尾的6个字符。
:
启动ex模式,允许您执行命令。 %
是一个范围,指定此命令应对整个文件进行操作。 s
代表替换,后跟一个模式,并以s/pattern/replacement/
格式替换字符串。在这种情况下,我们的模式是.\{6}$
,这意味着匹配任何字符(.
)正好6次(\{6}
)后跟行尾($
)并替换它用我们的替换字符串,这没什么。因此,正如我上面所说,这匹配每行的最后6个字符,并将其替换为空。
答案 1 :(得分:19)
我会使用全局命令。
试试这个:
:g/$/norm $xxxxxx
甚至:
:g/$/norm $5Xx
我认为这个问题的关键是保持它的通用性,而不是特定于你想要删除的字符。这样,您学到的技术将适用于许多其他情况。
答案 2 :(得分:6)
假设这是ANSI转义序列,^[
代表单个<Esc>
字符。您必须在许多Windows Vim安装上按 Ctrl + V (或 Ctrl + Q )输入它,然后是 Esc 。注意这是如何以略微不同的颜色突出显示。
答案 3 :(得分:5)
很容易将每行不可知的最后六个字符替换为那些字符,但是它留下了相当大的错误空间,所以我不推荐它。此外,如果^[
是转义字符,那么您实际上是在寻找五个字符。
在字符^[
上使用 ga ,您可以确定它是否为转义码,在这种情况下状态栏会显示
<^[> 27, Hex 1b, Octal 033
假设是,您可以使用
替换所有内容:%s/\%x1b\[00m$//gc
\%x1b
来自上面的十六进制值。另请注意,您必须转义括号([
),因为它是Vim正则表达式中的保留字符。 $
确保它出现在一行的末尾,/gc
标志会将其设为全局并确认每次替换(您可以按a
替换所有替换。)
这是一个简单的逃避问题。您可以使用以下两种方法之一:
:%s/\^\[\[00m$//gc
:%s/\V^[[00m\$//gc
答案 4 :(得分:4)
如果它们都是对齐的,您可以选择视觉块并将其删除。
否则,如果您的序列未知如何输入,您可以通过按v
直观地选择它,然后标记并将其y
(默认为注册"
)。然后键入:%s/<C-R>"//g
将其删除。
注意:
<C-R>"
将寄存器"
的内容放在光标位置。"ay
(猛烈注册a
- 就像我所说的那样,把你的药片放在一边,并忘了你把它放在哪里,你可以看一下您的注册号为:reg
。<C-R>
是Vim代言 Ctrl + R 答案 5 :(得分:1)
当行超过5个字符时,这似乎工作正常:
:perldo $_ = substr $_, 0, -5
但当该行长度为5或更少时,它什么都不做。 也许在perl中有一种简单的方法可以删除字符串的最后5个字符,但我真的不知道它:)
答案 6 :(得分:0)
使用此删除:
:%s/^[[00m//gc