除换行符外,是否可以删除整行?


33

在vim中,对我而言,一个相当常见的操作是删除所有行的内容,而不是删除行本身(即不是换行符),因为我是强迫性的并且喜欢使文件中没有空格。

有内置的vim方法吗?也许是d<movement command>手术?

到目前为止,我所拥有的最好的是(在有关方面)0d$。有没有更快的方法?


2
作为手动修剪空白的替代方法,您可以使用vim-better-whitespace之类的插件,该插件突出显示尾随空白,提供了一次删除所有空白的命令,甚至可以在保存时自动将其删除。
2015年


3
即使没有插件,也可以使用搜索和替换来全局删除尾随空格,例如:%s/\s*$//
Kyle Strand'Aug

Answers:


34

您可以使用0D它将转到行的第一个字符并删除直到行末。请注意,^D如果您要保留任何前面的空白,则可以使用。另外,不能使用来重复这些操作.。如果您希望通过该.命令可以重复执行某项操作,请参阅David Lord的回答。

帮助主题:

  • :help 0
  • :help D
  • :help ^

4
虽然这是直接的,但(至少)击键次数最少,但是使用.命令不能重复执行。因此,如果您想重复,我认为cc<Esc>S<Esc>更有吸引力。
tommcdo 2015年

那是真实的。但是,您可以将其记录为宏,然后使用重复该操作.
EvergreenTree

通常,宏不能使用重复.。它们的工作方式就像是交互式输入的这些击键一样,因此单独对待各个命令。使用.将仅重复宏中的最后一个命令。
tommcdo

我测试了它,但这不是它对我有用的方法。如果记录了宏,则可以使用,然后再@{reg}重复使用.
EvergreenTree

1
您只是在重复宏的最后一个命令,即D。进行一次0D操作后,光标将保留在第0列中。如果光标已经在行的开头(移至另一行之后),则看起来宏已正确重复。尝试将光标向前移动并输入.-您会看到它只会重复D
tommcdo 2015年

20

cc <Esc>将按照您的要求进行操作,但击键次数多于0D。如果您以后要在该行中添加一些内容,则cc可能是最好的选择。


2
如果包含Shift,则相同且可能更容易。
Holloway

4
尽管这不是“最干净的”解决方案,但它具有一个优点:这只是一项操作,因此可以通过.命令重复执行。相反,0D(如所选答案中所建议)是两个动作:0运动和D命令。
tommcdo 2015年

@Trengot它可能比0D我更容易,因为我已经在vimrc中进行了jk映射<Esc>,因此我的手甚至不必离开主行。
EvergreenTree 2015年

1
参见@Nobilis的答案:S被记录为“的同义词cc
Volker Siegel

14

S然后Ctrl+CEsc似乎完成了完全相同的功能。

然后可以重复进行,.因为它只构成一个动作。


2
我只是想将其添加为答案,然后看到您的答案
sbell 2015年

7

0D可能就是您想要的。它将从光标删除到行尾,同时保留该行(以及光标之前的任何字符)。


虽然这个答案是almos一岁,但值得注意的是0D将从行的开头删除,而不是从光标位置删除
FliiFe

4

我通常使用ddOdd删除当前行,并O(添加大写字母o)添加新行。

这也是3次击键,但dd只算作1次半,我发现O键入比容易$

它与0D解决方案的不同之处在于它会自动缩进,例如使用以下代码(其中!···有一个制表符,而█则是光标:

def asd():
!···if foo:
!···!···foo()█
!···!···foobar()

0D 将使您拥有:

def asd():
!···if foo:
█
!···!···foobar()

并且ddO会留下您:

def asd():
!···if foo:
!···!···█
!···!···foobar()

而且,如果<Esc>在此之后立即按,Vim应该删除自动缩进,因此与相同0D

没有“正确”的方法,这将取决于您要确切执行的操作。我更喜欢ddO它,因为它更灵活,而且“在我的指尖” :-)


2
^D会留下空白。
EvergreenTree

由于O将您置于插入模式,因此等效于cc,除非没有自动缩进...。除非您的行已经自动缩进。
凯尔·斯特兰德

这在文件的最后一行上的行为将有所不同。
tommcdo

0

为了节省一个宝贵的按键,您可以使用0C它将删除当前行上的所有字符并将您置于插入模式。

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.