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"]