Вот как мне этого добиться:
:nnoremap <f4> :setl <c-r>=&nu ? "rnu" : "nu"<cr><cr>
Более длинная версия, которая, вероятно, немного более понятна для будущих пользователей Google:
:nnoremap <f4> :setlocal <c-r>=&number ? "relativenumber" : "number"<cr><cr>
<C-r>=
говорит vim использовать регистр выражений для оценки оставшейся части строки как команды vim. Конечный двойник <cr>
необходим, поскольку первый вычисляет выражение, а второй выполняет команду :setlocal
.