I was like you, trying to figure out a way to get a list of all available key bindings, which wouldn't override any preexisting function, and tried to write a plugin to get the info. It's not finished, and will probably never be.
By trying to find all the syntaxes which would produce "free" key sequences, I found way too many exceptions, and edge-cases where I wasn't sure whether a key sequence could be considered as free or not.
That being said, in case you're interested, you could have a look at it, it's on github.
It installs the custom command :FK
. I haven't used it for a long time, but IIRC, it accepts some optional arguments:
:FK -nomapcheck don't check whether the key sequences would override one of your
custom mapping, or cause lag (timeout)
:FK -noleader don't suggest key sequences using the leader key
:FK -nospecial don't suggest key sequences using special characters
:FK -mode normal suggest key sequences for normal mode
Inside a freekeys
buffer, it installs a few buffer-local mappings, which you can find by typing g?
.
It's only (somewhat) good for normal mode. The other modes haven't been really considered.
Again, it's not finished, and the code is a mess, so I suggest you remove the plugin once you've read and copied the information in which you're interested.