对于以lowercase_with_underscores
开头的行,我正在尝试将某些函数的方法名称从lowerCamelCase
更改为public function get_method_name()
。我很难一步完成这件事。
到目前为止,我使用了以下
:%s/\(get\)\([a-zA-Z]*\)_\(\w\)/\1\2\u\3/g
但是,这一次只能替换一个_
个字符。我希望它能够搜索和替换以下内容:
public function [gs]et
。:s/_\(\w\)/\u\1/g
(编辑:
假设我有行get_method_name()
和set_method_name($variable_name)
,我只想更改方法名称而不是变量名称,我该怎么做? get_method_name()
当然更简单,但我想要一个适用于单个命令的解决方案。我已根据下面列出的解决方案使用:%g/public function [gs]et/ . . .
来解决get_method_name()
案例,但遗憾的是不是set_method_name($variable_name)
案例。
答案 0 :(得分:4)
如果我理解正确,我不知道为什么你尝试过的东西没有用,但你可以使用g
在匹配模式的行匹配上执行普通模式命令。
您的示例如下:
:%g/public function [gs]et/:s/_\(\w\)/\u\1/g
更新
为了仅匹配方法名称,我们可以使用在第一个$
之前只有方法名称的事实,因为这看起来像是PHP。
为此,我们可以使用负面的后视,@<!
:
:%g/public function [gs]et/:s/\(\$.\+\)\@<!_\(\w\)/\u\2/g
对于任何@<!
,此后面会显示$
后跟任意数量的字符,如果找不到_\(\w\)
,则仅匹配$
。
奖励积分(?):
要对多个缓冲区执行此操作,请在bufdo
%g
答案 1 :(得分:0)
要让vi
在所有行中替换悲伤,请在文件中
:1, $ s/sad/happy/g
(:1, $
命令之前的sed
指示vi在文件的每一行上执行命令。)
答案 2 :(得分:0)
您想要使用带有表达式(:h sub-replace-expression
)
匹配您要处理的完整字符串,然后将该字符串传递给第二个替换命令以实际更改字符串
:%s/\(get\|set\)\zs_\w\+/\=substitute(submatch(0), '_\([A-Za-z]\)', '\U\1', 'g')
在
上运行上述内容get_method_name($variable_name)
set_method_name($variable_name)
返回
getMethodName($variable_name)
setMethodName($variable_name)