如何删除Vim中每行的最后六个字符?

Ali*_*sha 37 vim

我在每行的末尾都重复了以下字符:

^[[00m
Run Code Online (Sandbox Code Playgroud)

如何使用Vim编辑器从每行中删除它们?

当我发出命令时:%s/^[[00m//g,它不起作用.

Con*_*ner 77

您可以使用:%s/.\{6}$//从字面上删除每行末尾的6个字符.

:启动前模式,它可以让你执行一个命令.%是一个范围,指定此命令应对整个文件进行操作.该s代表替代品,其次是图案和格式替换字符串s/pattern/replacement/.在这种情况下.\{6}$,我们的模式是指将任何字符(.)精确匹配6次(\{6})后跟行($)的末尾,并将其替换为替换字符串,这是什么都没有.因此,正如我上面所说,这匹配每行的最后6个字符,并替换它们.

  • @jottr肯定,请看我上面的更新. (2认同)

ACR*_*CRL 19

我会使用全局命令.

试试这个:

:g/$/norm $xxxxxx
Run Code Online (Sandbox Code Playgroud)

甚至:

:g/$/norm $5Xx
Run Code Online (Sandbox Code Playgroud)

我认为这个问题的关键是保持它的通用性,而不是特定于你想要删除的字符.这样,您学习的技术将适用于许多其他情况.

  • 很高兴知道如何从每一行中删除最后的#个字符,但我认为告知每个人你正在做什么很重要.像:`:g/$ /`(对于每一行)?,`norm`运行以下命令,`$`转到行尾,`xxxxxx`删除6个字符.最重要的是解释鲜为人知的"规范". (8认同)
  • 您根本不需要使用全局命令.你可以用`:%norm`替换`:g/$/norm`. (2认同)

Ing*_*kat 6

假设这是ANSI转义序列,则^[代表单个<Esc>字符.您必须在许多Windows Vim安装上按Ctrl+ V(或Ctrl+ Q)输入它,然后按Esc.注意这是如何以略微不同的颜色突出显示.


bry*_*mck 5

很容易将每行不可知的最后六个字符替换为那些字符,但它留下了相当大的错误空间,所以我不推荐它.另外,如果^[是一个转义字符,你真的在​​寻找五个字符.

逃脱代码

ga在角色上使用^[你可以确定它是否是转义码,在这种情况下会显示状态栏

<^[>  27,  Hex 1b,  Octal 033
Run Code Online (Sandbox Code Playgroud)

假设是,您可以使用替换所有内容

:%s/\%x1b\[00m$//gc
Run Code Online (Sandbox Code Playgroud)

\%x1b从上述的十六进制值的到来.另请注意,您必须转义括号([),因为它是Vim正则表达式中的保留字符.$确保它出现在一行的末尾,并且/gc标志将使其全局并确认每次替换(您可以按a来替换所有).

不是逃避代码

这是一个简单的逃避问题.您可以使用以下两种方法之一:

:%s/\^\[\[00m$//gc
:%s/\V^[[00m\$//gc
Run Code Online (Sandbox Code Playgroud)


Dan*_*l B 0

使用它来删除:

:%s/^[[00m//gc
Run Code Online (Sandbox Code Playgroud)