如何使用vi删除文件中的所有行?

Col*_*old 348 vi

如何使用vi删除文件中的所有行?

目前我使用这样的方法来删除文件中的所有行:

echo > test.txt
Run Code Online (Sandbox Code Playgroud)

如何使用 删除所有行vi

注意: 使用dd不是一个好的选择。可以有很多行。

Ant*_*hon 585

vi

:1,$d
Run Code Online (Sandbox Code Playgroud)

删除所有行。

:引入了一个命令(和将光标移动至底部)。
1,$是指示哪些行的以下命令(d)应努力。在这种情况下,从第一行到最后一行的范围(由 表示$,因此您不需要知道文档中的行数)。
最后d代表删除指定的行。

有一个更短的形式 ( :%d) 但我发现自己从未使用过它。的:1,$d可以更容易地“适应”例如:4,$-2d仅离开第一3和最后2行,删除其余部分。

  • 专家提示。不再有`ESC+dd+dd+dd+dd+dd+dd+dd+dd+dd+dd+dd+dd+dd+dd+dd+dd...` (16认同)
  • @rdev5 下次尝试`.` 重复一个命令 (3认同)
  • 即使使用`:%d`并输入,它的笔划也太多了。我正在尝试进入 vim,但没有 vim ctrl + a 和 del 按钮比 vim 提供的要简单得多。只需两笔(ctrl+a,del),与`:%d`不同,它有 4 笔(包括 Enter 命令) (2认同)

Arc*_*mar 229

在vi中我使用

:%d
Run Code Online (Sandbox Code Playgroud)

在哪里

  • : 告诉 vi 进入命令模式
  • % 意味着所有的行
  • d : 删除

在命令行中,

> test.txt
Run Code Online (Sandbox Code Playgroud)

也会做。

dd 有什么问题?

dd if=/dev/null of=test.txt
Run Code Online (Sandbox Code Playgroud)

在哪里

  • /dev/null 是一个特殊的 0 字节文件
  • if 是输入文件
  • of 是输出文件

  • 你需要区分 `dd` vi 命令(OP 的意思)和 `dd` 实用程序,你举了一个例子。此外,`> test.txt` 在非 bash shell(例如 zsh)中可能无法按预期工作。 (11认同)
  • 或者`: >test.txt` 只是稍微长一点。 (2认同)

Chr*_*own 62

我建议你这样做(应该在任何符合 POSIX 的 shell 中工作):

> test.txt
Run Code Online (Sandbox Code Playgroud)

如果你真的想用 vi 来做,你可以这样做:

  • 1G(去第一行)
  • dG(删除到最后一行)

  • @冷:...一次? (30认同)
  • `gg` 是特定于 vim 的。它是传统 vi 中的“1G”。 (6认同)
  • `G` 代表最后一行。如果你在第一行 (`gg`),`dG` 告诉 vi 删除从当前行(第一行)到最后一行的所有行。所以,你一次就能做到。 (5认同)
  • 您的 shell 语法取决于某些 shell 的配置。bash 和 zsh(默认为 zsh)交互式 shell 都可以在收到该命令后等待 STDIN 上的输入,并且需要额外的 <CTRL>+D 才能实际清除文件。运行的能力也取决于 CLOBBER 设置。`>| test.txt < /dev/null` 更加健壮,因为它总是会破坏文件并避免等待交互式终端上的输入。 (2认同)
  • @Caleb:就像我说的,在任何 *POSIX 兼容的* shell 中。:-) 这两种情况都不符合 POSIX 标准。 (2认同)

ken*_*orb 36

如果您的光标在第一行(如果不是,请键入:gg1G),那么您只需使用dG. 它将删除从当前行到文件末尾的所有行。因此,为了确保您将从文件中删除所有行,您可以将两者混合在一起,这将是:(ggdG在命令模式下)。

或者%d在 Ex 模式下,命令行示例:vim +%d foo.bar.

相关:如何在 VIM 中删除从当前行到文件末尾的所有文本?

  • +1 比 :1,$d 更符合人体工程学。无论如何,并不是说我们的手指现在没有一直用于输入冒号;) (3认同)
  • 赞成。`dG` 是我一直使用的。 (2认同)

Tan*_*ash 32

我是一个懒惰的家伙,我喜欢保持简单。ggdG是五个按键,包括Shift

gg转到文件中的第一行,ddelete 动词的开头,G是转到文件底部的移动。详细地说,它会转到文件的开头并删除所有内容,直到磁贴结束。

  • `:%d` 是不错的选择,因为你也只使用 5 次按键。 (3认同)
  • @TankorSmash `gg` 是一个 `vim` 命令,而不是 `vi`。 (2认同)

小智 13

转到文件的开头并按dG


yeg*_*gle 5

我总是用 ggVG

  • gg 跳转到当前编辑文件的开头
  • V(大写的 v)将选择当前行。在这种情况下当前编辑文件的第一行
  • G(大写的 g)将跳转到文件的末尾。在本例中,由于我选择了第一行,因此G将选择此文件中的整个文本。

然后您只需按dx即可删除所有行。