GVim/Vim。如何删除某个单词之前的所有空白

GVim/Vim。如何删除某个单词之前的所有空白,vim,Vim,我是一名.Net开发人员,但最近开始涉猎Vim(或在我的实例GVim中),以了解何时需要执行重复的文本编辑器类型任务 我的经验基本上是不存在的。所以请容忍我。我还意识到在VisualStudio中有一些GUI工具或东西可以使用,但我正在尝试Vim路线,因为我想时不时地掌握一个新的util/app 假设我有一个文本文件,其中包含很多属性(可以是任何文本),如下所示: 我想使用stringreplace方法删除属性名之前和之后的所有内容 e、 g.以以下内容结束: AccountNumber,

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

我的经验基本上是不存在的。所以请容忍我。我还意识到在VisualStudio中有一些GUI工具或东西可以使用,但我正在尝试Vim路线,因为我想时不时地掌握一个新的util/app

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

我想使用stringreplace方法删除属性名之前和之后的所有内容

e、 g.以以下内容结束:

 AccountNumber, 
 CustomerName, ... etc.
到目前为止,我在这方面取得了成功

  • 1) Alt+左键单击+拖动选择前面的所有空白并删除
  • 2) :%s/public\string\//
  • 3) :%s/\{\get;\set;\}/,/
这纯粹是出于好奇,我想知道是否有可能更新我的第二步,包括删除空白

我意识到,^字符意味着行的开始,而(我想)s意味着空白,但这就是我知识的终点

我在想什么

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


解决此问题的一种方法是录制宏

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/ 

解决此问题的一种方法是录制宏

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/ 
我想到了这个

%s/^\v\s*(\s*\w+){2}\s?(\w+).*/\2/g
准确地说,这一行不知道哪个词是你的“财产”。只需在第三行中留下第三个字,删除其他任何内容

我想到了这个

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

准确地说,这一行不知道哪个词是你的“财产”。只需在第三行中留下第三个字,删除其他任何内容

在这种情况下,使用
:normal
可以替代
:s
或宏:

:%norm 03dwelD

您可能需要使用整个文件以外的其他范围,
%
。我建议用
V
目视选择行,然后执行
:norm 03dwelD
。键入
后,提示看起来像
:“使用
:normal
可以替代
:s
或宏,在这种情况下:

:%norm 03dwelD

您可能需要使用整个文件以外的其他范围,
%
。我建议用
V
目视选择行,然后执行
:norm 03dwelD
。键入
后,您的提示看起来像是
:“我也设法用宏实现了这一点,但是,我可能应该澄清一下,我特别想看看使用可用的脚本是否可以做到这一点?@Kent-jupp,这个问题似乎有非常明确的字符串。但我同意,你的正则表达式更为通用和简单better@FredrikPihl我以为OP没有解释。所以这将是一个OP的问题,而不是对答案的评论。我不想挑剔……:)现在是对你的答案的评论..挑剔?^ u^。。OP的示例在每行的开头都有空格,我不知道这些空格是否在文本中,如果是,则
d2w
将不起作用(如果光标位于col0
。如果不是这样,则在
d2w
之后,
w`将跳过
之前的所有空格{
,因此不适合
删除所有内容,直到
…在我们弄清楚这一点后,我会+1您的答案…您很挑剔:-)但是,是的,如果行以ws开头,我更新了答案,加入了
0w
,移动到宏工作的单词的第一个定义。我也设法用宏来完成这项工作,但是,我可能已经澄清了,我特别想用可用的脚本看看这是否可行?@Kent-jupp,问题s似乎有很好的定义字符串。但我同意,你的正则表达式更一般,更简单better@FredrikPihl:)我以为OP没有解释它。所以这将是OP的问题,而不是对答案的评论。我不想挑剔…:)现在是对你的答案的评论。挑剔?^ ^ OP的例子在每行的开头都有空格,我不知道如果这些空格在文本中,如果是,
d2w
将不起作用(如果光标位于col0
。如果不是这样,在
d2w
之后,您将跳过
{
之前的所有空格,因此不适合
删除所有小于或等于
的内容…在我们弄清楚这一点后,我将+1您的答案…您很挑剔:-)但是是的,如果行以ws开头,我更新了答案以包含一个
0w
移动到宏的单词的第一个定义。行总是以
public string
开头?这可能会使答案更简单。。也总是匹配模式
public string TARGET{trashhere}
?在我的示例中,是的,但我只是想看看我必须如何处理这类基本想法。我发现整个vim非常有趣。因此它肯定在我的学习列表中。(因为它也有助于改进我的正则表达式)行总是以
公共字符串开始吗?
?这会使答案更简单。。也总是匹配模式
公共字符串目标{trashhere}
?在我的示例中,是的,但我只是想看看我必须如何处理这类基本想法。我发现整个vim非常有趣。因此它肯定在我的学习列表中。(因为它也有助于改进我的正则表达式)我希望我能接受这两个答案。但是谢谢你和弗雷德里克比。我希望我能接受这两个答案。但是谢谢你和弗雷德里克比