我正在尝试使用VIM作为编辑器向java类添加属性。 因此,我认为我可以使用命令来简化我的工作,使用所有样板代码。 例如:

所有包含“atributeA”的行,就像这一行一样

this.attributeA=attributeA //basic constructor

应该变成

this.attributeA=attributeA //basic constructor
this.attributeB=attributeB //basic constructor

可能吗?

#1楼 票数:6 已采纳

将解决方案作为一个单线程作为要求似乎有点奇怪,因为如果您愿意,您可以将任何按键序列或任何函数或命令分配给Vim中的按键。

话虽如此,这种类型的东西是Vi的面包和黄油。 尝试:

:g/attributeA/ copy . | s//attributeB/g

哪里

:g/pattern/ command1 | command2 | ...

在每个匹配pattern行上执行命令(参见:help :global ),

copy .

复制当前行(请参阅:help :copy )匹配:g到地址后面. (意思是当前行),和

s/pattern/replacement/g

然后在当前行上执行替换(请参阅:help :substitute ),即您刚刚创建的副本。 最后的g标志导致对行中的所有匹配模式执行替换,而不仅仅是第一个。 另请注意,我将搜索模式留空:Vim将记住上一个:global:substitute命令中使用的最后一个搜索模式,以方便使用。

#2楼 票数:0

您的确切样本很容易实现:

yy
p
:s/A/B/g

但是你完全有可能想要更通用的东西。 如果是这种情况,您应该编辑您的问题。

#3楼 票数:0

看看这个功能:

function AddAttribute()
    exe "/this.attributeA=attributeA;"
    exe "normal yyp"
    exe "s/attributeA/" . input('New attribute: ') . "/g"
endfunction

当您调用函数call AddAttribute() ,系统将提示您输入一个新属性,该属性将在您的示例中添加。 您可以使用以下内容绑定密钥:map <F5> :call AddAttribute<CR>这样您只需按F5即可添加此行。

编辑

如果你想复制带有attributeA所有行(这对我来说没有意义),你可以用这个映射做到这一点( ^MCTRL + v然后回车 ):

:map <F5> :call inputsave()\|let newAttribute=input('new attribute: ')\|:call inputrestore()\|:g/attributeA/exe "normal! yyp"\|exe ":s/attributeA/" . newAttribute . "/g"^M

当您按F5时 ,系统会提示您输入新属性,并且包含attributeA等效行将被复制并替换为您的输入。

  ask by sdaniel translate from so

未解决问题?本站智能推荐:

2回复

如何在VI中复制不相邻的行?

在下面的示例中,我要复制第1,2,4和5行(没有第3行): 因此,当我粘贴拉线时,我将得到:
3回复

如何评论与VIM中的搜索模式匹配的所有行

我想评论与特定字符串匹配的所有行。 我正在进行汇编编程,因此使用“;”进行注释。 字符。 字符串(模式)可以存在于行内的任何位置。 评论应该添加到行的开头(显然)。
2回复

如何在vi中以可视模式将光标跳转到特定行?

当我使用vi我将使用:<line number>跳转到新行。 然后当我尝试突出显示某些内容时,我将进入可视模式,并尝试相同的命令:<line number> 。 但它没有跳到我问的行号,而是做了一些奇怪的行为。 在可视模式下如何跳转到特定线?
2回复

如何删除与vi中请求权限的模式匹配的所有行

你好我是vi的新手,我有一个问题,让vi问我允许删除所有带有模式的行。 我的文件看起来像这样: 我想删除包含字符串'GLY'的所有行 这就是我的目标: 但这绝对是错的
4回复

如何从当前位置复制vim中的特定行?

如何从当前位置复制vim中的特定行,而不移动到该特定行? 假设,在下面的代码中,如果我的光标在行号中。 891我想要复制一行,比如说行号。 899.如果没有实际移动到899行,按yy并返回到891,我该怎么做?
8回复

在Vim中隐藏所有(不)匹配的行

是否可以在 vi 或 Vim 中显示/隐藏所有匹配的行? 不突出显示,只显示那些行。 例如,我有一个带有单词ERROR的文本。 如何让它只显示包含ERROR行以及如何只显示没有ERROR行? 有没有不删除所有匹配行然后撤消它的解决方案?
1回复

如何搜索然后复制vi/vim中的行?

我想最好用一个例子来解释一下,所以这里是: 在这个例子中,我正在搜索字符串“有用”。 所以,我想将第1,4和5行复制到剪贴板。 我怎么能用vim做到这一点?
2回复

一行中的vi多个命令

我想在vi中实现以下目标: 删除前几列 删除以特定单词开头的行 删除第一个单词后的所有内容。 关于上述要求,我有以下命令 :%s/new page //g删除前两列。 :g/abc/d , :g/xyz/d , :g/ddd/d删除以特定单词开头的行。 :%s/