我尝试用VIM作为编辑器给一个java类添加一个属性。因此我想我可以用一个命令来简化我的工作。例如:所有包含"atributeA"的行,如以下行
this.attributeA=attributeA //basic constructor
应该变成
this.attributeA=attributeA //basic constructor this.attributeB=attributeB //basic constructor
有可能吗?
kxkpmulp1#
要求解决方案是一行程序似乎有点奇怪,因为如果愿意,您可以在Vim中为按键分配任何击键序列或任何函数或命令。话虽如此,这类事情是Vi的面包和黄油。
:g/attributeA/ copy . | s//attributeB/g
其中
:g/pattern/ command1 | command2 | ...
在与pattern匹配的每一行上执行命令(参见:help :global),
pattern
:help :global
copy .
将与:g匹配的当前行(参见:help :copy)复制到地址.(表示当前行)之后,以及
:g
:help :copy
.
s/pattern/replacement/g
然后在当前行执行一个替换(参见:help :substitute),也就是你刚刚做的拷贝。末尾的g标志导致对行中所有匹配的模式执行替换,而不仅仅是第一个。还要注意,我把搜索模式留空了:为了方便起见,Vim将记住上一个:global或:substitute命令中使用的最后一个搜索模式。
:help :substitute
g
:global
:substitute
2izufjch2#
您的精确样品很容易获得:
yy p :s/A/B/g
但是你完全有可能想要一些更一般的问题,如果是这样的话,你可能需要修改一下你的问题。
1yjd4xko3#
看看这个函数:
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键就可以添加这一行。
call AddAttribute()
:map <F5> :call AddAttribute<CR>
如果你想复制所有带有attributeA的行(我觉得这没什么意义),你可以使用下面的Map(^M是CTRL + v,然后回车):
attributeA
^M
:map <F5> :call inputsave()\|let newAttribute=input('new attribute: ')\|:call inputrestore()\|:g/attributeA/exe "normal! yyp"\|exe ":s/attributeA/" . newAttribute . "/g"^M
按F5键时,系统将提示您输入新属性,并且包含attributeA的所有行都将被复制并替换为您的输入。
3条答案
按热度按时间kxkpmulp1#
要求解决方案是一行程序似乎有点奇怪,因为如果愿意,您可以在Vim中为按键分配任何击键序列或任何函数或命令。
话虽如此,这类事情是Vi的面包和黄油。
其中
在与
pattern
匹配的每一行上执行命令(参见:help :global
),将与
:g
匹配的当前行(参见:help :copy
)复制到地址.
(表示当前行)之后,以及然后在当前行执行一个替换(参见
:help :substitute
),也就是你刚刚做的拷贝。末尾的g
标志导致对行中所有匹配的模式执行替换,而不仅仅是第一个。还要注意,我把搜索模式留空了:为了方便起见,Vim将记住上一个:global
或:substitute
命令中使用的最后一个搜索模式。2izufjch2#
您的精确样品很容易获得:
但是你完全有可能想要一些更一般的问题,如果是这样的话,你可能需要修改一下你的问题。
1yjd4xko3#
看看这个函数:
当你调用函数
call AddAttribute()
时,你会被提示输入一个新的属性,这个属性将像你的例子一样被添加,你可以用:map <F5> :call AddAttribute<CR>
这样的东西绑定一个键,所以你只需按F5键就可以添加这一行。编辑
如果你想复制所有带有
attributeA
的行(我觉得这没什么意义),你可以使用下面的Map(^M
是CTRL + v,然后回车):按F5键时,系统将提示您输入新属性,并且包含
attributeA
的所有行都将被复制并替换为您的输入。