使用单个命令从vi编辑器中删除100行


33

我正在使用Ubuntu,并试图从vi编辑器中删除所有100行,但是我遇到了在一个命令中执行此操作的面试问题。


不是VI解决方案,而是从命令行:echo -n > <file>从文件中删除所有行(实际上只是用“”覆盖文件)。
azz

3
@Der完全不需要使用echo它;> $file效果很好。
CVn

4
那是一家什么样的公司,vi在面试中问有关问题?
CVn

2
基本的vi知识很容易回答这个问题。在安装了vim的计算机上(在Ubuntu上,我建议您使用该vim-gtk软件包,因为它使您可以访问vim中的xclipboard),vimtutor在命令行中(而不是在vim中)键入以获取基础知识的交互式教程。它不应该花费超过半小时的时间,它是您可能会发现的使用vi / vim的最佳入门指南。
evilsoup

1
@MichaelKjörling我可以想象,如果申请人曾经提到vi(口头或通过简历)以前的经验,或者如果问题的开头是“好的,作为系统管理员,您必须了解一些命令行编辑器,对吗?你用过vi吗?
通配符

Answers:


62

在正常模式下,

100dd

dd删除当前行。给该命令加上前缀100会使它重复100次。

如果从当前行开始的文件中少于100行,则根据vi实现的不同,它要么无法删除任何行,要么删除尽可能多的行。对于vim,取决于cpaka compatible选项是否打开。


错误的答案仅删除当前行
Mayur Mehta

我想一次使用一条命令删除100行
Mayur Mehta

13
100dd是正确的答案。我想知道你在做什么。
ott--

1
@mayurMehta不知道哪个公司在问这样的问题,也不知道他们期望什么作为答案。但是,任何VI新手都将知道100dd是正确的答案。
Munim

1
@vgoff我不知道..如果他们不是在寻找测试您的基本vim技能的通用解决方案,那么这就是让受访者感到困惑的一个难题。我会说100dd是答案。如果访问者问“如果文件距当前光标少于100行,会发生什么?”,我会回答:“该命令将从当前光标删除它能执行的操作。” 那是完全合理的。除非访问员澄清,否则为什么光标不会位于第一行?我讨厌这样的技巧问题。
Munim 2013年

44
  1. 从当前(包括)中删除100行

    • 重复dd(删除当前行)100次:

      100dd
      
    • 从当前行删除到99行

      d99j
      
  2. 从当前行(包括)中向后删除100行

    d99k
    
  3. 按行号删除特定范围内的行

    :1,100d
    
  4. 删除以当前行开头的范围内的行

    :.,.+99d
    

等等等


2
数字4将删除当前行(0),直到第101(0 + 100)行,因此是101行而不是询问的100行。试试:.,+99d
Olivier Dulac

德拉特,我的动作正确了!谢谢。
没用的2013年

100dd没有工作对我也-但以上优良工程#4我VI的Solaris 10下
DemiSheep

8

如果要删除文件中的所有行,则此vi命令指定删除范围:

:1,$d

1表示第一行, $表示最后一行


:%d (在“:”上下文中,“:%...”是“:1,$ ...”的快捷方式)
Olivier Dulac

也很好:d G键&rarr; 杀死所有从实际[例如顶线]到底线的内容
erch 2013年

3

您要删除文件中的所有行吗?使用打开文件vi。而在第一线的开始-光标时,你只是打开文件的默认位置-按下Esc之后dG

仅需注意,该操作d指示删除,并G指示文件的最后一行。因此,在您按任意行的同时dG,它会删除从当前行到最后一行的所有行。

如果您知道要删除的连续几行(例如,从101行到200行),请输入以下按键序列: Esc:101,200d


如果您刚刚打开文件并且位于文件的开头,则无需按Escape键。您自动(默认情况下)进入普通模式。
vgoff

3

无论您在文件中的何处,都可以 ggdG

:%d减少按键次数会更好。好了,算上shiftenter键,实际上比上面多了两次按键。

进行类似操作100dd只会从您所在的位置删除多达 100行,并且可能不会从文件中删除所有行,具体取决于您当前的行位置。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.