2012-01-05 46 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