在VI上从光标删除到行尾


301

我知道我可能在阅读的所有VI文档中都进行了一百万遍的研究,但是似乎找不到从光标到行尾命令的删除。


3
您在这里输入有误-您在标题中说“行尾”,但在问题中说“字尾”。
卡斯卡贝尔

Answers:


449

该命令dw将从当前光标位置删除到下一个单词字符的开头。该命令d$(注意,这是一个美元符号,而不是“ S”)将从当前光标位置删除到当前行的末尾。D是的同义词d$


是的,我知道dw,但是我想我只是假设会有一个“删除此行的其余部分”命令。例如我行已ip=|10.1.1.1|作为光标位置。是否有一条命令将删除所有10.1.1.1
法尔玛里

3
@Falmarri-我很抱歉,我一定误会了您的问题。为此,有一个命令:d$
Tok

84
D(Shift + d)也是d $的同义词。
内斯,2010年

5
@Andy,工作是从光标删除到行尾。如果您考虑删除更多内容而不是 “完成工作”,则也可以只使用:!rm -f %然后:q!。那会删除整个文件。
通配符

2
@Amir只需使用d^('d'+插入符号)...基本上是d +我通常认为可以移动光标的任何字符,但是我自己正在学习Vim,因此我可能会犯错。
JakeD

41

正如其他人提到的那样:您可以使用d$Dshift- d)从光标位置删除直到行尾。

我通常会发现更多有用的c$Cshift- c),因为它会从光标位置,直到该行的末尾删除,并把你的[插入]模式。


2
不错!!! D在我看来,这比对大多数人来说要好得多,因为它不会使您在行尾移回一个空格。
伊利亚·林恩

为什么这个答案一直隐藏在这里?这是我来这里时真正想要的功能。
M_M

@ElijahLynn无论如何都不应该是一个问题。Vim有两种进入插入模式的主要方法,i即插入光标之前和a插入光标之后。如果光标位于该行的末尾,并且您想在该行的末尾插入,则可以使用a
Lie Ryan

1
目标是一次完成一项操作,而不是两项。额外的按键=额外的摩擦。
伊利亚·林恩

36

关于vi的优点之一是其逻辑命令结构。d紧随其后的是运动命令d到该运动的目标。$移动到该行的末尾(助记符:类似于regexps)。因此d$删除到该行的末尾。类似地,e移动到Ë当前字的Nd和w移动到下一个的开始瓦特 ORD; 因此de删除当前单词的结尾,并dw另外删除以下空格。


1
@gioele我<kbd>用于实际键,而不用于命令序列。例如<kbd>Ctrl</kbd>+<kbd>C</kbd>,但是d$
吉尔斯2014年

@吉尔斯你是对的。我刚刚尝试了d ^,它已从光标位置删除到行首。
ka3ak '16

我一直使用(d)elete(一)(W)ORD删除的话:)
Błażej米哈利克

20

您可能要使用D。将光标移动到要删除的第一个字符,然后按shift-D。一切都消失了。实际上,它位于默认的剪切缓冲区中,因此您可以P或p粘贴回去。

我使用Dp(删除到行的末尾,然后放回去),移至另一行的末尾,然后再次使用p将相同的文本粘贴到另一行的末尾。在配置文件中起作用,您需要在两个或多个位置放置一些复杂的URL。


无论如何,这可能是他使用的最小Vim。
polemon 2010年

0

我认为插入模式快捷方式可能会派上用场。

在插入模式下,开始更改直到行尾可能会更好(将其放在您的~/.vimrc):

inoremap <C-l> <C-o>C

如前所述,您已经D在普通模式下和Ctrl+ l在插入模式下。如您所见,您还将C开始更改直到行尾。

<C-o> ......... insert normal keystroke in insert mode

我选择了Ctrl- l因为l在您的指尖下。本Ctrl- k已经用来插入有向图。

我一直在寻找:h i_Ctrl一些免费的按键绑定,当涉及到创建新的快捷方式以在vim中执行操作时,这实际上是一个更大的问题。


0

要从光标位置后面删除一系列行,3D将删除光标直到该行的末尾以及接下来的两行(即删除光标位置之后的三行)。

例如,以下文本(以表示的光标|),

If there's a cursor |in the line
here
we
go

使用该命令3D将输出:

If there's a cursor
go
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.