为什么“ $ d”命令在vim的ex模式下不起作用?

时间:2019-01-24 13:27:59

标签: vim

我发现$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命令将其删除。

为什么?谁可以帮助我?

1 个答案:

答案 0 :(得分:1)

您可以只使用-c

vim -c '$d' -c 'w' file

您使用-s {scriptin}阅读手册页是什么意思。您应该将文件传递到-s,其中包含::$d^M:w^M^Mctrl-v ctrl-m

或:

vim file -s <(echo ':$d^M:w^M')

^M换行符的输入方式应与上述相同。