2013-04-11 28 views
0

我是一个.Net开发人员,但最近开始涉足Vim(或者在我的实例GVim),因为我需要做重复的文本编辑器类型的任务。GVim/Vim。如何删除所有空白到某个字

我的经验基本上是不存在的。所以请耐心等待。我也意识到有些GUI工具或者我可以在Visual Studio中使用的东西,但是我正在尝试Vim路线,因为我现在想要掌握一个新的util/app。

说我有里面包含了很多属性的文本文件(可以是任何文字虽然),像这样:

public string AccountNumber { get; set; } 

    public string CustomerName { get; set; } 

    public string ExpiryDate { get; set; } 

    public string IdentityNumber { get; set; } 

    public string OfferDate { get; set; } 

我想利用字符串替换的方法删除所有属性名称后面的内容。

例如结束与:

AccountNumber, 
CustomerName, ... etc. 

到目前为止,我已经成功与

  • 1)Alt +左​​键点击并拖动选择所有前面的空格&删除
  • 2):%s的/公共\串\ //
  • 3):%S/\ {\得到; \集; \} /,/

这纯粹是出于好奇,我想知道是否有可能更新我的第二步,包括删除空白。

我意识到^字符意味着行的开始,并且(我认为)\意味着白色空间,但那是关于我的知识结束的地方。

我在想什么?

:%s/^ \ S +字符串//

+0

的线总是与'公共string'开始?这可以使答案更简单..也总是匹配模式'公共字符串目标{trashhere}'? – Kent 2013-04-11 12:39:27

+0

在我的例子中,是的,但我只想看看我将如何去做这个基本的想法。我发现这个vim非常有趣。所以这绝对是我的学习清单。 (因为它也会帮助我改进我的正则表达式) – 2013-04-11 12:45:08

回答

2

我想出了这个,

%s/^\v\s*(\s*\w+){2}\s?(\w+).*/\2/g 

准确地说,这行不知道哪个字是你的“财产”。它只是将第三个单词留在那里,删除其他任何东西。

+0

我希望我可以接受这两个答案。但是谢谢你和@FredrikPihl – 2013-04-11 12:47:55

3

一个解决这种方式录制宏

qq   # start recording macro into register q 
0w   # move to first non-whitespace caracter. Omit this if no WS at start of line 
d2w   # delete 2 words 
w   # move a word forward 
D   # delete to en of line 
q   # quit macro recording 

站在一条线的开始,做@q 对于后面的行,使用.

重复宏或尝试以下替换

:%s/^\s*public string\s*\([a-zA-Z]*\).*$/\1/ 
+0

我已经设法用宏来做到这一点,但是,我可能应该明确说明我正在专门查找是否可以使用脚本可用? – 2013-04-11 12:35:24

+0

@Kent - jupp,问题似乎有相当定义的字符串。但我同意,你的正则表达式更通用,更好 – 2013-04-11 12:38:06

+0

@FredrikPihl :)我认为OP没有解释它。所以这将是OP的问题,而不是对答案发表评论。我不想挑剔... :) – Kent 2013-04-11 12:41:47

1

使用:normal会在这种情况下:s替代或宏:

:%norm 03dwelD 

您可能需要使用比整个文件,%等不同的范围。我建议在视觉上选择V,然后执行:norm 03dwelD。输入:后,您的提示将会显示为:'<,'>。这是对的。

如需更多帮助,请参见:

:h :norm 
+0

谢谢,会做! – 2013-04-11 15:02:50

相关问题