0

我是一名 .Net 开发人员,但最近开始涉足 Vim(或在我的实例中为 GVim),以便在需要执行重复的文本编辑器类型任务时使用。

我的经验基本上是不存在的。所以请多多包涵。此外,我意识到我可以在 Visual Studio 中使用 GUI 工具或东西,但我正在尝试 Vim 路线,因为我想时不时地掌握一个新的实用程序/应用程序。

假设我有一个文本文件,其中包含很多属性(尽管可以是任何文本),如下所示:

    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/public\ string\ //
  • 3) :%s/\{\get;\set;\}/,/

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

我意识到 ^ 字符表示行首,而(我认为) \s 表示空格,但这就是我的知识结束的地方。

我在想类似的东西?

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

4

3 回答 3

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/ 
于 2013-04-11T12:32:04.787 回答
2

我想出了这个,

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

准确地说,这条线不知道哪个词是你的“财产”。它只是将第三个单词留在该行中,删除其他任何内容。

于 2013-04-11T12:34:35.097 回答
1

在这种情况下,使用:normal将是宏的替代方法或宏::s

:%norm 03dwelD

您可能想要使用除整个文件之外的其他范围,%. 我建议使用Vthen execute直观地选择行:norm 03dwelD。键入后,:您的提示将如下所示:'<,'>。这是对的。

如需更多帮助,请参阅:

:h :norm
于 2013-04-11T13:24:13.350 回答