Renaming Variables Across Files
- To: mathgroup at smc.vnet.net
 - Subject: [mg113610] Renaming Variables Across Files
 - From: Chris Degnen <degnen at cwgsy.net>
 - Date: Thu, 4 Nov 2010 04:01:27 -0500 (EST)
 
I needed to rename a variable across numerous files and so put
together a short script to do this which makes use of Vim.
It works ok for replacing unique strings, although the altered
notebooks complain that they "appear to have been edited outside of
Mathematica", but that doesn't affect use.
I wondered if anyone had other suggestions for renaming or refactoring
across files.
In case anyone should find it useful, the script I use, called
"BatchS.nb" is listed below.  To set up, all the relevant files
including BatchS.nb are expected to be in directory
"sourcedirectory".  The modified versions are written to
"targetdirectory", which should exist in advance.  (Both are first-
level subdirectories off the working directory.)  Vim should also be
installed of course.
In the example "var1" is replaced by "var2".  I run the script as
separate cells, indicated by the line spacing.  Enjoy.
(* BatchS.nb *)
SetDirectory["sourcedirectory"]
allfiles=FileNames[];
files=DeleteCases[allfiles,"BatchS.nb"];
Short[files,9]
createEditScripts[file_]:=Module[{},
commands="%s/var1/var2/g
write ../targetdirectory/"<>file<>"
quit
";
Export[file<>".vim",commands,"Text"]];
Map[createEditScripts,files];
batchfile={};
createBatchFile[file_]:=Module[{},
AppendTo[batchfile,
"vim -E -s -c \"source "<>file<>".vim\" "<>file]]
Map[createBatchFile,files];
Map[Run,batchfile]
Run["del *.vim"]
Run["del *.sw? /a"]