Это рефакторинг ответа @ kev, который не заставит вас использовать <C-v>F
и не затронет любые регистры:
inoremap <expr> F ((col('.')>1 && getline('.')[col('.')-2]=~#'^\d$')?(printf(' °F (%d °C)', float2nr((matchstr(getline('.')[:(col('.')-2)], '\d\+$')-32)/1.8))):('F'))
Обратите внимание, что вы не должны использовать imap
, если не знаете точно, почему.
Обновление:
Предполагая, что вы используете точку в качестве десятичного разделителя, не используйте научные обозначения или общие (для языков программирования) усечения, такие как .1==0.1
, 10.==10.0
:
inoremap <expr> F ((col('.')>1 && getline('.')[col('.')-2]=~#'^\d$')?(printf(' °F (%.1g °C)', (str2float(matchstr(getline('.')[:(col('.')-2)], '\v\-?\d+(\.\d+)?$'))-32)/1.8)):('F'))