Wenn in einer Datei nur ein Objekt gespeichert ist, kannst du es so herauslesen:
Code:
objekt = File.open("./data/bla.vxdata") {|io| Marshal.load(io)}
Bei mehreren Objekten in einer Datei (z.B. Savedateien) holst du die Objekte so heraus
Code:
objekte = File.open("./data/bla.vxdata") {|io|
  objs = []
  objs << Marshal.load(io) until io.eof?
  objs
}
Das Abspeichern funktioniert eigentlich ähnlich:
Code:
File.open("./data/bla.vxdata") {|io|
  Marshal.dump(mein_objekt, io)
}
Zum Bearbeiten brauchst du dir eigentlich nur die Helpfile anschauen. Dort sind die Datentypen und ihre Attribute erklärt.

Die Messagebefehle kannst du natürlich erweitern. In deinem Fall würde das so aussehen:

Code:
class Window_Message < Window_Selectable
  alias convert_special_characters_without_varname convert_special_characters
  def convert_special_characters
    @text.gsub!(/\\VN\[(\d+)\]/i) {$data_system.variables[Integer($1)]}
    @text.gsub!(/\\SN\[(\d+)\]/i) {$data_system.switches[Integer($1)]}
    convert_special_characters_without_varname
  end
end
Danach kannst du in der Message die Befehle \vn[4] den Namen der Variable 4, und mit \sn[7] den Namen des Switchs 7 ausgeben.