2012-01-05 47 views
6

字,冒號和一個逗號,我經常有這樣的一段代碼:如何有效地刪除VIM

it "should do something", :focus do 
    ... 
end 

當我想刪除, :focus我通常做

  1. 前往路線1:1G
  2. 轉到冒號:f:
  3. 刪除冒號(周圍使用的話,所以我可以再說一遍):daw
  4. 刪除focus(重複前面的):.
  5. 刪除逗號(向左移動並用空格替換):hr<SPACE>

有什麼辦法可以更有效地實現步驟3-5?

+2

不是直接問你的問題,而是第1步的快捷方式:'gg',即。按兩次相同的按鍵,而不是按兩個不同的按鍵... – Nigu 2012-01-05 09:43:38

+0

是的,當然。感謝那。我使用f來強調代碼不會在第一行。它只是在這裏,在問題:) – 2012-01-05 11:57:22

回答

8

你可以去:

  1. 1G去第一行
  2. f,要去逗號
  3. dE要刪除,直到WORD的下一個結尾(大寫字母WORD是不是空格的任何字符序列)。
+0

'dE'works在這裏驚人的好。甚至更好,然後@rejj建議。但我真的不明白爲什麼'E'跳過逗號,冒號和單詞。希望你能解釋一下。還有什麼與'E'相反(向相反方向移動)? – 2012-01-05 08:31:55

+1

'E'和'B'結束(向前)並開始(向後)WORD。 'gE'和'W'到前一個WORD的末尾和下一個WORD的開始。 ':help E',':help B',':help gE',':help W'會告訴你!請注意,沒有大寫字母('w','b','ge'和'e')的命令完全相同,因此單詞的定義是不同的(標點符號不是單詞的一部分:'' :help word'和':help WORD')。 – Benoit 2012-01-05 08:40:27

3

隨着光標放在,你可以做vēēd

d,,ē

+0

哦,這麼簡單:)!出於某種原因,我很少想到逗號和冒號是文字:)非常感謝! – 2012-01-05 08:26:56

0

你最好顯示光標所在,但假設它的 「結束」 後,我應該這樣做:

?",<CR>ldt<space>. 
+0

我顯示了光標所在的位置。它在冒號上。請參閱問題中的第2步。搜索是一個非常不尋常的運動,打破了我的流程。什麼是'ldt '在做什麼? – 2012-01-05 08:25:02

+0

我看到了什麼'ldt '是。起初沒有抓到它。使用'ldt ',您仍然需要退回並刪除逗號。這與我在問題中所做的相似。 – 2012-01-05 08:34:57

1

隨着光標或結腸,你可以做d˚FdêdF,部分將向後刪除幷包括逗號。然後dE將刪除到下一個空格字符。關於這一點的好處是,如果沒有前面的逗號,這仍然會做同樣的事情。因此,與代碼

if :focus, "should do something" do 

如果光標在結腸這個宏將刪除只是:focus,一部分,儘管它會留下兩個空格後面。

+0

不錯!不過,類似於@Benoit的建議。 – 2012-01-05 09:07:41

+0

我應該更頻繁地刷新:P – 2012-01-05 09:23:18