如何使用vim删除每行的最后一个字符

57

我有一个文件:

12345a
123456b
1234567c
12345678d
123456789e

我该如何删除每行的最后一个字符。
文件内容如下:

12345
123456
1234567
12345678
123456789
4个回答

73
您可以使用:%s/.\{1}$//来删除每行末尾的一个字符。

47
你不需要 {1} − 只需 :%s/.$// 就可以了,;-) - Martin Tournoij
1
@Carpetsmoker,这里的 . 是什么意思? - SangminKim
根据 Vim 的文档,. 匹配任何字符。请参见 http://vimdoc.sourceforge.net/htmldoc/pattern.html。@SangminKim - jabalazs

40

:%normal $x

  • : 进入命令行模式
  • % 表示整个文件范围
  • normal 表示我们在运行正常模式命令
  • $x 删除行中的最后一个字符

与其他答案有些重叠,但对我来说,这是最简单易懂的一种阅读方式。


4
%norm%normal 的使用非常实用。你也可以在每行中附加 %norm A,并在前面添加 %norm I,加入你想要添加的字符。 - Jools
1
如何删除最后两个字符? - Ted
@Ted :%normal $x$x - tjstankus
1
:%norm $xx 用更少的字符实现相同的功能(最后2个字符用2个x表示)。 - chriz

13

TLDR: :%s/.$//

如需解释和更多示例,请继续阅读。

  • :%s/.$//
    • 删除所有行末的任意字符(或者更准确地说:将行末的任何字符替换为无)
    • s = 替换 命令
    • . = 任意字符
    • 如果要删除.(不是任意字符),请使用\.$代替.$
  • :'<,'>s/.$//g
    • 删除当前选择中所有行末的任意字符
    • '<,'> = 当前选择(通过SHIFT + V,然后选择行,最后按下:获得)
  • :%s/;$//
    • 删除所有行末的;
    • 如果你从需要使用分号的语言复制并粘贴到不需要使用分号的语言,则此命令非常有用

9

使用 :g 命令:

:g/^/norm $x
  • ^ 匹配要操作的每一行。
  • normnormal 的简写,位于你想执行的正常命令之前。
  • $x 移动到行尾并在正常模式下删除一个字符。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接