You could use the `maparg()` function. To test if the user mapped something to `<C-c>` in normal mode, you would write: if !empty(maparg('<C-c>', 'n')) If the user mapped something, to store the `{rhs}` in a variable, you would write: let C-c_rhs_save = maparg('<C-c>', 'n') If you want to have more information about the mapping, like: - is it silent? - is it buffer-local? - does it use the `<expr>` argument? - ... You could give a third and a fourth argument: `0` and `1`. `0` because you're looking for a mapping and not an abbreviation, and `1` because you want a dictionary with a maximum of information and not just the `{rhs}` value: maparg('<C-c>', 'n', 0, 1) ---------- To restore the mapping, you would write: exe 'nnoremap <C-c> ' . C-c_rhs_save