我是.Net开发人员,但最近开始涉及Vim(或我的实例GVim),因为我需要进行重复的文本编辑器类型任务。
我的经验基本上不存在。所以请耐心等待。另外我意识到我可以在Visual Studio中使用GUI工具或东西,但我正在尝试使用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; }
我希望使用字符串替换方法删除属性名称之后的所有内容。
e.g。结束于:
AccountNumber,
CustomerName, ... etc.
到目前为止,我已经取得了成功
- 1)Alt +左键单击+拖动选择前面所有的空格&删除
- 2):%s / public \ string \ //
- 3):%s / \ {\ get; \ set; \} /,/
纯粹出于好奇,我想知道是否有可能更新我的第二步,包括删除空白区域。
我意识到^字符意味着行的开头而且(我认为)\ s意味着空白,但那是关于我的知识结束的地方。
我在想什么?
:%s / ^ \ s + string //
答案 0 :(得分: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/
答案 1 :(得分:2)
我想出了这个,
%s/^\v\s*(\s*\w+){2}\s?(\w+).*/\2/g
确切地说,这一行不知道哪个词是你的“财产”。它只是将第3个单词留在那里,删除其他任何东西。
答案 2 :(得分:1)
在这种情况下,使用:normal
可以替代:s
或宏:
:%norm 03dwelD
您可能希望使用除整个文件%
以外的其他范围。我建议用V
直观地选择行,然后执行:norm 03dwelD
。输入:
后,您的提示会显示为:'<,'>
。这是正确的。
如需更多帮助,请参阅:
:h :norm