如何向后删除内容直到上一行的“ =”?


9

我使用一个JavaScript代码示例:

1        var a = 1;
2        var b = |{};

光标位于|(当光标形状为块时,在字符“ {”上的位置)上,我发现我a应该被分配一个对象,因此我想如下进行修改:

1        var a = {};

所以我想知道当光标在“ {”上时,如何快速删除“ {”之前的所有内容,直到第1行中“ =“”之后的空白?

在其他普通编辑器中,我将按Backspace键删除代码。但是我不怎么在vim中实现这一目标。


您还可以按i并使用退格键。没有人会为此射击你。我认为。
elyashiv 2015年

1
但退格键不会删除以上行的字符
Aaron Shen

3
@AaronShen这取决于您的“退格”设置。如果包含,eol则退格键删除换行符。您还需要start包含在设置中。(请参见:help backspace)。但是不要使用此方法!下面的答案中详细介绍了几种更快的方法。
Rich

Answers:


20

不知道我是否完全理解这个问题,但是如果您要删除直到只有 var a = {};,您可以从光标位置使用d?1Enter

d进行动作,您可以为其提供搜索模式,/以进行正向搜索或?向后搜索。

这是一个小gif演示:

在此处输入图片说明


1
可能值得一提的是,您需要Enter在输入后点击d?1
Rich

@Rich的确感谢,我已经更新了答案,以包括该答案。
akshay

1
该外壳使用什么字体?
克里斯·伯特·布朗

@ ChrisBurt-Brown:总站
akshay

10

如果您使用的是vim(而不是经典的vi),那么在您的示例中您可以这样做vkd(或vkx)。

  • v 将其置于“可视”(选择)模式
  • k 将向上移动一行以将光标置于“ 1”上,选择要删除的部分
  • dx将删除选择

5

删除

对于此特定示例,这dgk是最快的方法之一。

dAkshay所解释的,该命令后可以有一个动作,删除光标开始到动作进行之间的所有字符。

在您的代码中,您希望删除光标位置和同一列之间的所有内容,并将其进一步向上移动一排,因此,随着gk运动向上移动光标(与操作符一起使用时,它是非线性的)将达到您的目标。

编辑: BobH 在注释中指出该方法仅在'wrap'设置时有效。因此,除非您始终具有换行设置,否则最好使用dvkvkd,如本页其他答案所建议的那样。

向后删除单词

您也可以使用:d5bd4B,这将分别向后删除5个单词或4个单词。(1;是一个单词,但是两个常规单词)。


为什么dk会同时删除当前行和上一行?
Aaron Shen

@AaronShen Nope。尝试一下。
Rich

1
@Rich(如果它对您有用),则您具有一个启用删除动作的设置。我刚刚使用进行了测试,vim -u NONE -U NONE并且删除了这两行。
Vitor

@Vitor你是对的。现在尝试找出是哪个设置。
丰富

1
顺便说一句,事实证明,使用gk显然符合字符要求:set wrap(有点神秘)。我无法弄清楚为什么这似乎对其他人有用,但对我却不有用,当时gk对它的帮助似乎暗示它应该有用。唯一的线索是的主要含义gk与换行有关。一旦我尝试设置包裹(有点奇特),瞧,它就起作用了。
BobH 2015年

1

我无法发表评论,因此我需要重新回答。d k即使使用nocompatible选项,Rich给出的键对我也不起作用。原因可能是kvim认为运动是逐行的,在这种情况下,两行都被删除。来自:help d

d {motion}命令的例外情况:如果运动不是逐行的,则运动的开始和结束不在同一行,并且在运动的开始之前和结束之后只有空格,删除将变为逐行 这意味着删除操作还会删除您可能希望保留的空白行。使用| o_v | 操作员强迫动作符合特征

它还显示了解决方法:dvk用于强制动作符合角色要求。这对我有用。

我以前不认识o_v,所以这里是:help o_v

v

当在操作员之后,运动命令之前使用时:强制操作员按照特征进行工作,也包括沿直线运动。如果运动是直线运动,它将变为| exclusive |。如果动作已经按照角色进行,则切换包含/排除。这可以用来使排他性议案包括在内,也可以使排他性议案包括在内。


“不兼容”的事情是完全的红鲱鱼。我在做测试时搞砸了,因为我是个白痴。
Rich

我们也可以使用dgk,其中gk也​​是排他的,不是逐行的。
MS.Kim,2016年
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.