2011-09-11 21 views
2

template-file-loader vim 스크립트를 사용하여 p.x를 만들 때 템플릿 파일을로드합니다. 새로운 라텍스 파일.vim에서 자동 기능을 사용하지 않음

템플릿 파일 로더 스크립트가 나는 새로운 TEX 파일을 편집 할 때 사용자 정의 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 

문제는 침묵으로 함수를 호출 플러그인 템플릿 파일 - 로더입니다.

플러그인을 변경하지 않고 내 맞춤 기능을 "무결점"으로 유지하려면 어떻게해야합니까?

+0

좋아요. vim에서 unsilent 기능을 찾았지만 확인 기능과 함께 사용하는 방법을 알지 못합니다. "무결성 확인"만 쓰면 작동하지 않습니다. – Kungi

답변

3

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

사용자 입력 수신에 문제가 없습니다. 적절한 문자를 입력하면 올바른 사용자 입력이 나타납니다. ** 단 정치없는 에코 **는 내가 원하는 것입니다. 고맙습니다. 나는 선택 전에 가능한 선택을 되풀이 할 수있다. 그것이 나를위한 가장 쉬운 방법 인 것 같습니다. – Kungi

+0

@Kungi 내 시스템에서''(그리고'O',하지만 테스트하지 못했습니다)을 제외한 모든 입력을 무시하고 프롬프트를 표시하면서 내 시스템의'자동 무음 에코 확인 (Description \ n & choice1 \ nc & hoice2 \ n " 나는 이것이 문제라는 것을 짐작했다. (나는 지금 도움을 다시 읽으며'조용한 무결 한 반향 확인 ("Description", "& choice1 \ nc & hoice2")')을 써야한다는 것을 깨달았다. 마지막 변형에서 confirm은 정상적으로 작동합니다. 비록이 함수를 테스트하지 않았습니다. – ZyX

+0

흠 마지막 하나는 작동하지만 값을 반향하지 않으므로 함수에 랩핑하는 방법을 얻지 못합니다. 나는 이런 식으로하려고 할 때 :'선택의 여지가 = 무결성의 확인 (...)'을하면 아무 것도 출력하지 않는다. 그래서 나는 "echo"Choices "; 선택 = 확인 (...)'하자. 이것은 약간 확인의 목적을 패배 시키지만 나를 위해 일합니다 :-). – Kungi

0

이것은 또 다른 템플릿 확장이지만, 여전히 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') 
관련 문제