在Vim中更改variables名称

我想通过包含许多单字母variables名称的vim读取大量的c / perl代码。

当我正在阅读代码的过程中,有一些命令可以帮助我将variables的名称更改为更有意义的命令,以便更快地读取其余部分。
在vim中有一些命令可以让我快速的做到这一点。

我不认为正则expression式会起作用
1)在不同的范围块中,相同的单个字母名称可能有不同的用途
2)相同的字母组合可能是另一个更大的var名称的一部分,或者在一个string或注释中。不想修改这些

任何已知解决scheme

以下是如何重命名在当前范围{}定义的variables。

将光标移动到variables用法。 按gd 。 这意味着 – 将光标移动到定义。 现在按[{ – 这将使您开始范围。 按V – 将打开视觉线select。 按% – 将跳转到相反的}因此将select整个范围。 按:s/ – 替代命令的开始。 <CR>/ – 将插入与variables名称相匹配的模式(在按gd之前,你的名字是)。 /newname/gc<CR> – 将开始search,并在每场比赛中进行确认。

现在你必须logging一个macros,甚至更好 – 映射一个键。

这里是最终的映射:

 " For local replace nnoremap gr gd[{V%::s/<CR>///gc<left><left><left> " For global replace nnoremap gR gD:%s/<CR>///gc<left><left><left> 

把这个放在你的.vimrc或者直接执行。 在这个局部variables的按下之后,你可以input:s命令,你只需要inputnew_variable_name ,然后回车即可

AFAIK,VIM中没有实际的重构支持。 当重组的意图进行重命名时,我通常采取以下的认识。

  1. 限制更改我使用标记的范围。
  2. input正则expression式时,用\ <和>括起名字。 这将使它匹配整个单词,减less将发生不正确的重命名的types。
  3. 不要多行replace,以减less更换不良的可能性
  4. 仔细查看代码diff,看看是否有其他变化。

我的最终变化看起来像这样

 :'a,'bs/\<foo\>/bar 

我很想在VIM中没有重构工具,但我没有看到它。

把它放在你的.vimrc里

 " Function to rename the variable under the cursor function! Rnvar() let word_to_replace = expand("<cword>") let replacement = input("new name: ") execute '%s/\(\W\)' . word_to_replace . '\(\W\)/\1' . replacement . '\2/gc' endfunction 

调用它:call Rnvar()

expand("<cword>")获取光标下的单词。 searchstring使用%作为文件范围, \(\W\)模式在要replace的单词边界处寻找非单词字符,并将它们保存在variables\1\2中,插入replace模式。

您可以在全局search中使用'c'修饰符,并replace它会要求您确认每个replace。 这将花费更长的时间,但它可能适用于非庞大的代码文件:

 %s/\$var/\$foo/gc 

c代表确认。

在c中,你可能可以使用cscope取得一些进展。 它试图理解语法,所以有可能知道这个字母是一个variables。

如果这是跨多个文件,你可以考虑看看sed。 使用find来抓取你的文件和xargs加sed来replace。 假设你想在所有匹配* .c的文件中用a_better_namereplace,你可以这样做

找 。 -name“* .c”| xargs sed -i -e's / a / a_better_name / g'

请记住,这将取代所有出现的,所以你可能想要一个更强大的正则expression式。