Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在vim中删除非空格?_Vim_Whitespace - Fatal编程技术网

如何在vim中删除非空格?

如何在vim中删除非空格?,vim,whitespace,Vim,Whitespace,我正在寻找一个命令,从光标删除到同一行的第一个非空白字符。我在谷歌上搜索了一段时间,尝试了几种可能性。没有快乐。有人知道怎么做吗?dw应该可以工作。序列dw将删除光标中的所有字符,直到下一个单词。这意味着,如果你在一个单词的中间执行命令,它将删除该单词的剩余部分和后续的空白。可能是也可能不是您想要的。您可能想试试dW。这将按“单词”移动(单词和单词请参见帮助),这看起来更适合您的问题 dw无法满足您的需求,例如: array[1] = 5 在a中定位时点击dw,将为您留下: [1] = 5

我正在寻找一个命令,从光标删除到同一行的第一个非空白字符。我在谷歌上搜索了一段时间,尝试了几种可能性。没有快乐。有人知道怎么做吗?

dw应该可以工作。

序列dw将删除光标中的所有字符,直到下一个单词。这意味着,如果你在一个单词的中间执行命令,它将删除该单词的剩余部分和后续的空白。可能是也可能不是您想要的。

您可能想试试dW。这将按“单词”移动(单词和单词请参见帮助),这看起来更适合您的问题

dw
无法满足您的需求,例如:

array[1] = 5
a
中定位时点击
dw
,将为您留下:

[1] = 5
但是使用
dW
将导致:

= 5

要删除单词,无论光标位于哪个字母上,请使用daw(助记符“删除单词”)与其他命令配合使用,例如caw“更改单词”。f和t是其他可以与d一起使用的优秀命令。例如,要从光标中删除并包括第一次出现的字母“t”,请使用dft。要使“t”保持不变,请改用dtt

这里的许多答案并没有直接回答这个问题。询问者想知道如何删除最多第一个空白字符。一些答案在技术上是可行的,但是让我们来看看如何明确地做到这一点。 以下示例演示了如何在正常模式下执行此操作,并说明了光标起始位置的变化。u̲下划线c̲字符表示光标位置:


数据仓库: 富吧 → foob̲ar

在其他答案中描述的delete-word命令可以很好地将光标放在目标之前时删除到下一个非空白字符


db: foob̲ar → b̲ar

当然,我们希望尝试与dw相反的方式向后删除光标前的第一个非空白字符。但是,如上所示,deletebackword命令删除的单词比我们预期的要多,它也会删除上一个单词。在这种情况下,我们应使用:

dT: foob̲ar → foob̲ar

…其中是光标前的第一个非空白字符。delete back till命令将删除所有内容,包括但不包括字符,在本例中,字符是“foo”结尾的字符o


dt: 富吧 → foob̲ar

与前面的命令类似,我们可以使用delete-until(带小写字母“t”)向前删除字符,直到下一个字符(本例中为“bar”中的b)。就本问题而言,这与dw的结果相同


diw: 富吧 → foob̲ar

如果光标位于空白区域的中间,我们可以使用Delphi内部单词命令从两侧删除空白。


d/↵: foo\ucode>\n条 → foob̲ar

如果我们要删除的空白包含换行符,我们可以使用上面显示的命令删除,直到匹配的模式,这里的模式只是第一个非空白字符。如图所示,按Enter键完成此命令

当第一个非空白字符出现在中断后的行的开头时,Vim将删除空白,但将目标保留在下一行。我们需要在上面的命令中添加J来连接这些行(大写字母“J”)

d/↵J: foo\ucode>\n条 →
foob̲ar

就是这样。这有点违反直觉——我希望dw的意思是“从光标开始删除当前单词”。但它起作用了,它起作用了。谢谢。准确地说,
w
意味着“移动到下一个单词的开头”,并且
d
从移动带你到的当前位置删除。要删除一个单词,无论光标在哪个字母上,请使用
daw
(助记符“删除一个单词”)与其他命令一起使用,例如
caw
“更改一个单词”
daw
也会删除单词前的空格(如果有)。一个更好的组合是
diw
,它在word中是delete。无论光标在单词中的位置如何,它都可以工作。多行呢?我知道这不是问题所在,但是多行的内容会更有用。谢谢你解决换行问题!您的答案似乎是
是匹配第一个非空白字符的模式。然而,我不得不使用
\S
作为模式。因此,我的整个命令是
d/\S↵。这可能是你在回答中的意思,但我并不马上明白。@Micah很抱歉不清楚。我在这个答案中使用了
作为占位符,表示某个字符。我的目的是让读者用编辑文本中的特定字符替换
,而不是按字面意思输入这些按键。对于最后一个示例,您选择输入
\S
来代替模式
确实会产生最佳的通用命令来删除换行符中的空白。我更喜欢键入实际字符(
b
,在本例中),因为它通常更容易找到。