【问题标题】:why does the “$d” command not work in the ex mode of vim?为什么“$d”命令在 vim 的 ex 模式下不起作用?
【发布时间】:2019-01-25 21:12:54
【问题描述】:

我发现$d命令在vim的ex模式下不能工作,但是在vim的命令行模式下可以工作。如下:

我有一个名为 foo 的文件,其内容如下:

$ cat foo
line1
line2
line3
line4
line5

我试图在 vim 的 ex 模式下删除 foo 文件的最后一行。 最后一行是line5所在的那一行。

$ 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所在的行。 但是line5所在的那行还在,应该用$d命令删除。

为什么?谁能帮帮我?

【问题讨论】:

    标签: vim


    【解决方案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 linebreak 的输入方式与上述相同。

    【讨论】:

    • “-E”和“-e”意思一样进入ex模式吗?如果是这样,“-s”是否意味着它进入静默ro批处理模式?
    • 关于“-s {scriptin}”, {scriptin} 是否只能包含普通模式的命令?它还可以包含 ex 命令吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-08
    • 1970-01-01
    • 2011-12-07
    • 2011-01-25
    • 1970-01-01
    • 1970-01-01
    • 2019-03-04
    相关资源
    最近更新 更多