Search code examples
fileserializationvimbinarysave

How do I serialize a variable in VimScript?


I wish to save a random Vim dictionnary, let's say:

let dico = {'a' : [[1,2], [3]], 'b' : {'in': "str", 'out' : 51}}

to a file. Is there a clever way to do this? Something I could use like:

call SaveVariable(dico, "safe.vimData")
let recover = ReadVariable("safe.vimData")

Or should I build something myself with only textfiles?


Solution

  • Thanks to VanLaser (cheers), I've been able to implement these functions using string, writefile and readfile. This is not binary serialization but it works well :)

    function! SaveVariable(var, file)
        " turn the var to a string that vimscript understands
        let serialized = string(a:var)
        " dump this string to a file
        call writefile([serialized], a:file)
    endfun
    
    function! ReadVariable(file)
        " retrieve string from the file
        let serialized = readfile(a:file)[0]
        " turn it back to a vimscript variable
        execute "let result = " . serialized
        return result
    endfun
    

    Use them this way:

    call SaveVariable(anyvar, "safe.vimData")
    let restore = ReadVariable("safe.vimData")
    

    Enjoy!