我发现$d
命令不能在vim的ex模式下工作,但是可以在vim的命令行模式下工作。如下:
我有一个名为foo的文件,其内容如下:
$ cat foo
line1
line2
line3
line4
line5
我试图在ex的vim模式下删除foo文件的最后一行。 最后一行是第5行所在的行。
$ vim -E -s foo <<-EOF
> $d
> w
> EOF
但是,foo文件的内容没有改变,最后一行仍然存在:
$ cat foo
line1
line2
line3
line4
line5
以下是我使用vim的命令行模式执行$d
命令的信息:
1 line1
2 line2
3 line3
4 line4
5 line5
~
~
1 foo 0x6C 1,1 all
:$d
结果是:
$ cat foo
line1
line2
line3
line4
最后一行已成功删除。
除了使用$d
命令之外,我还使用了1d
命令和1,2d
命令,这两个命令都可以正常工作。
更新:添加示例
foo文件的内容如下:
$ cat foo
line1
line2
line3
line4
line5
我在bash中以vim的ex模式处理了该文件:
$ vim -E -s foo <<-EOF
> 1d
> 2,3d
> $d
> w
> EOF
结果是:
$ cat foo
line2
line5
我期望的结果是仅保留line2所在的行。
但是第5行所在的行仍然保留,应使用$d
命令将其删除。
为什么?谁可以帮助我?
答案 0 :(得分:1)
您可以只使用-c
:
vim -c '$d' -c 'w' file
您使用-s {scriptin}
阅读手册页是什么意思。您应该将文件传递到-s
,其中包含::$d^M:w^M
(^M
是ctrl-v ctrl-m
)
或:
vim file -s <(echo ':$d^M:w^M')
^M
换行符的输入方式应与上述相同。