/ vim

Sharing Vim Configuration Between Machines

I do most of my development on my MacBook Pro, however I have a nice 27" iMac at home, and it is refreshing to use it for development when I can. It's fast and has a huge screen. The only downside is all my custom development configurations are on my MacBook Pro!

There are a number of options you can use to share settings between
machines, but I'm a fan of using Dropbox (referral link). Any change I make, on either machine, will get automatically synchronized for me.

Since my Vim configurations were already present on my MacBook Pro, the first step was to copy them over to a Dropbox folder:

    mkdir ~/Dropbox/vim
    cp -R ~/.vim ~/Dropbox/vim
    cp ~/.vimrc ~/Dropbox/vim
    cp ~/.vimrc.local ~/Dropbox/vim
    cp ~/.gvimrc ~/Dropbox/vim

The next step was to come up with an installer script that would symlink these files on a new machine. I made sure to move existing vim files to a temporary filename so that I wouldn't lose anything accidentally.

    set -o errexit

    function confirm()
    {
        echo -n "$@ "
        read -e answer
        for response in y Y yes YES Yes Sure sure SURE OK ok Ok
        do
            if [ "_$answer" == "_$response" ]
            then
                return 0
            fi
        done

        # Any answer other than the list above is considerred a "no" answer
        return 1
    }

    function link_file() 
    {
      echo "symlinking $1"
      ln -s "$PWD/$1" "$HOME/$1"
    }

    echo "This will remove any existing vim configuration files and simlink them with the files here."
    confirm "Are you sure?"
    if [ $? -eq 0 ]
    then
      for file in ~/.vimrc ~/.vimrc.local ~/.gvimrc
      do
        if [[ -f $file ]]; then
          echo "Moving $file to $file.bak"
          mv $file $file.bak
        fi
      done

      for dir in ~/.vim
      do
        if [[ -d $dir ]]; then
          echo "Moving $dir directory to $dir.bak"
          mv $dir $dir.bak
        fi
      done
    fi

    echo "symlinking"

    for file in .vim .vimrc .vimrc.local .gvimrc
    do
      link_file $file
    done

    echo "Done.  Check that it works.  If so, you can remove the .bak files, if any"

Make sure the script is executable by running:

    chmod +x setup.sh

Then run this script on any new machine that you want to use Vim on. It will symlink these files from your Dropbox folder to your home folder:

  • .vim/
  • .vimrc
  • .vimrc.local
  • .gvimrc

After it's done, check that it is working. Remove any .bak files that you don't need anymore.

And that's it. You have an automatic Vim configuration synching system between machines. It works great for your shell configuration as well!