Swapping Caps and Escape has changed my life to the extent I would consider carrying little stickers around for all the keyboards I remap. Unsurprisingly, I'm a fairly heavy vim user...
If you swap caps with control, then in vim you can use Control-[ for escape, which is also a pretty good option. (That's what I do.)
On Gnome 3, I have recently switched from using xmodmap to setting org.desktop.gnome.input-sources.xkb-options to ['caps:swapescape'] in dconf-editor. Much easier.
The problem I had was I wanted to map the CapsLock key to Control, and the LeftCtrl key to Hyper. There are built-in xkb rules for doing both, but they don't work right when you try to combine them, and the documentation available for xkb is hard to understand, to say the least. I finally got it working by hacking one of the rules definitions in the system-provided definition files to do what I wanted -- I gave up trying to figure out how to do it the "right" way.