Сделать тихую функцию не тихой в VIM - PullRequest
2 голосов
/ 11 сентября 2011

Я использую сценарий template-file-loader для загрузки файла шаблона при создании px нового латексного файла.

Сценарий template-file-loader способенвыполнить пользовательский TemplateFileFunction_tex при редактировании нового текстового файла ..

fun! TemplateFileFunc_tex()
    let tex_templates = "$HOME/.vim/templates/tex/"
    let choice = confirm("Which template should i load", 
                \ "&presentation\n" .
                \ "&hd-presentation\n" .
                \ "&paper\n" .
                \ "hd-pape&r\n" .
                \ "&xelatex-default\n")
    if choice == 1 " presentation
        execute "0r "  . expand(tex_templates . "presentation.tex")
" [...]
endfun

Проблема заключается в том, что плагины template-file-loader вызывают функцию без вывода сообщений.

Как мне без "unsilent"Моя пользовательская функция без изменения плагина?

Ответы [ 2 ]

3 голосов
/ 11 сентября 2011

Я не вижу способа заставить confirm получать пользовательский ввод в режиме без звука. Но вы можете использовать getchar вместо:

let variants=['&presentation', '&hd-presentation', ...]
echohl MoreMsg
unsilent echo "Which template should I load\n".join(variants, "\n")
echohl None
let reply=getchar()
if type(reply)==type(0)
    let reply=nr2char(reply)
endif
if reply is# "\n"
    let choice=1
else
    let replkeys=map(copy(variants), 'tolower(v:val[stridx(v:val, "&")+1])')
    let choice=index(replkeys, reply)+1
endif
if choice==1
    ...
0 голосов
/ 12 сентября 2011

Это еще один шаблон-расширитель, но все же, mu-template правильно обрабатывает вопросы для конечного пользователя.например,

VimL: " @file {rtp}/templates/tex.template

VimL: " way 1:
VimL: " instructions continued on several lines are not supported
VimL: let s:tex_kind = CONFIRM("Which template should i load", "&presentation\n&hd-presentation\n&paper\nhd-pape&r\n&xelatex-default\n", 1)
VimL: " include {rtp}/templates/tex/internals/presentation.template ?
VimL: if s:tex_kind == 1  | call s:Include('presentation', 'tex/internals') | endif
VimL: " include {rtp}/templates/tex/internals/hd-presentation.template ?
VimL: if s:tex_kind == 2  | call s:Include('hd-presentation', 'tex/internals') | endif
...

VimL: " Way 2
VimL: let s:tex_kind = WHICH("CONFIRM", "Which template should i load", "&presentation\n&hd-presentation\n&paper\nhd-pape&r\n&xelatex-default\n", 1)
VimL: let s:tex_kind = substitute(s:tex_kind, '&', '', 'g')
VimL: call s:Include(s:tex_kind, 'tex/internals')
...