在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中没有实际的重构支持。 当重组的意图进行重命名时,我通常采取以下的认识。
- 限制更改我使用标记的范围。
- input正则expression式时,用\ <和>括起名字。 这将使它匹配整个单词,减less将发生不正确的重命名的types。
- 不要多行replace,以减less更换不良的可能性
- 仔细查看代码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式。