Причина, по которой это не работает, в том, что вы пытаетесь выполнить команду в выражении - это разные вещи. Используемая вами конструкция ?
заставляет vim отображать значение параметра; это не то же самое, что функция, возвращающая значение. Чтобы было ясно: проблема не в том, что вы вызываете команду ex из функции - каждая другая строка функции является командой ex - это то, что вы вызываете команду ex в выражении.
Но это не правильный способ выполнить задачу, которую вы здесь пытаетесь. Вот кратчайший путь, благодаря комментарию rampion:
set paste!
Теперь, если вам когда-нибудь понадобится что-то умнее, чем просто инвертирование логического значения, вы можете использовать &
, чтобы превратить имя опции в пригодную для использования переменную. Вот два способа использовать это:
" still a function, good for taking extra action (here, printing notification)"
function TogglePaste()
if (&paste)
set nopaste
echo "paste off"
else
set paste
echo "paste on"
endif
endfunction
" just set the variable directly"
let &paste = !&paste