2011-08-07 48 views
46

我正在尋找一個命令,將光標從同一行刪除到第一個非空白字符。我谷歌搜索了一段時間,並嘗試了幾種可能性。沒有快樂。有人在那裏知道如何做到這一點?如何刪除vim中的非空白字符?

回答

79

該序列dw將刪除光標中的所有字符,直到下一個單詞。這意味着如果您在站在單詞中間的位置執行命令,它將刪除該單詞的剩餘部分和隨後的空格。可能或不可能是你要找的東西。

+1

這確實它。這有點違反直覺 - 我期望dw的意思是「從光標開始刪除當前單詞」。但它的作品,它的作品。謝謝。 – Singlestone

+0

按照通常的方案,您也可以通過d2w,d3w和c來刪除所有字符,直到光標後面的第二個或第三個字。如果這個答案解決了你的問題,請接受它是正確的。 – richardolsson

+17

+1。確切地說,'w'的意思是「移動到下一個單詞的開頭」,並且從當前位置刪除到移動到達的位置。 – orip

14

你也許想試試dW。這將通過「WORD」(請參閱​​WORD和Word的幫助)來移動,這看起來更適合您的問題。

dw將不能滿足您的需求,例如:

array[1] = 5 

擊中dw而定位在a你會留下:

[1] = 5 

但使用dW將導致:

= 5 
6

要刪除一個詞,無論光標處於哪個字母上,使用daw(助記符「刪除一個詞」)也可以與其他命令一起使用,例如, caw「改變一個詞」。 ft是可以與d一起使用的其他優秀命令。例如。從光標刪除幷包括第一次出現的例如字母「t」,使用dft。要使「t」完好無損,請改爲使用dtt

4

這裏的許多答案並不直接解決問題。提問者想知道如何刪除最多第一個-空白字符。一些答案技術上的工作,但讓我們看看如何明確地做到這一點。

以下示例說明如何在正常模式下執行此操作,其變體佔光標的起始位置。在U̲ nderlined C̲ haracters指示光標的位置:


        d 瓦特:  foo_          酒吧   →   foob& #x0332; ar

d elete瓦特 ORD命令,在其他的答案中所述,只是正常刪除直到下一個非空字符,當我們的光標目標之前定位


        db:  FOO             B̲ AR   →   B̲ AR

當然,我們會想嘗試d的逆W¯¯光標之前刪除向後的第一個非空格字符。但是,如上所示,d elete b ack-word命令刪除超出我們預期的—它也會刪除前一個單詞。對於這種情況,我們應該使用:

        d牛逼<? >:  富            B&#x0332; AR   →   foob&#x0332; AR

...其中<? >是光標前的第一個非空白字符。該d elete回未牛逼 IL命令清除一切直到但不包括字符<? >,在這種情況下,它是在「foo」末尾的字符


        d<? >:  foo_          酒吧   →   炸彈&#x0332; AR

到前面的命令類似,我們可以使用d elete未 IL(用小寫「T」)刪除字符向前直到下一個<? >字符(b在 「棒」,對於本例)。這實現了相同的結果ð瓦特對這個問題的目的。


        d我瓦特:  顏色      _      酒吧   →   炸彈&#x0332; AR

如果我們的光標定位在空白的中間,我們可以使用d elete nner瓦特 ORD命令從兩側刪除空格。


        d/<? >&#x21b5;:  foo_       \n      酒吧   →   炸彈&#x0332; AR

如果我們要刪除的空白包括線制動器,我們可以使用上述d中所示的命令 elete直到<匹配的模式?>,其中模式在這種情況下只是第一個非空白字符。如圖所示,按輸入即可完成此命令。

當中斷後的第一個非空白字符出現在行首時,Vim將刪除空格,但將目標留在下一行。我們需要添加J到上述命令到J oin行(大寫字母「j」)。

        d/<? >&#x21b5;Ĵ:  foo_           \n酒吧   →   foob&#x0332; AR