Я настроил свои отображения следующим образом:

"Set up mappings for LaTeX files 
let b:myEngine=0
let g:myEngineList=["pdflatex","texexec"] "pdflatex or context
function! ToggleEngine()
  if b:myEngine == "pdflatex"
        let b:myEngine = "context"
        execute "imap <F5> :! pdflatex %;<CR>"
        execute "map ;new \begin{document}<CR><CR>\end{document}"
  else
        let b:myEngine = "pdflatex"
        execute "imap <F5> :! context %;<CR>"
        execute "map ;new \starttext<CR><CR>\stoptext"
  fi
  echo "compilation engine:" g:myEngineList[b:myEngine]
endfunction

Однако это не ведет себя так, как я ожидаю; он отказывается переназначать ключи. Изначально ключи не сопоставлены, а после сопоставления они остаются сопоставленными. Как это исправить?

Я вызываю ToggleEngine() следующим образом: nmap <silent> <F7> :call ToggleSpell()<CR>

2 ответа2

1

когда вы call ToggleEngine()?

Предложение:

"Set up mappings for LaTeX files 
let g:myEngineList=["pdflatex","texexec"] "pdflatex or context
function! ToggleEngine()
  if b:myEngine == "pdflatex"
     let b:myEngine = "context"
  else
     let b:myEngine = "pdflatex"
  fi
  execute 'inoremap <F5> :!' . b:myEngine . ' %<cr>'
  echo "spell checking language: " . b:myEngine
endfunction
1

Основанное на lh-vim-lib, вот еще одно решение, которое определяет меню и команду (добавление сопоставления становится таким же простым, как вызов команды из сопоставления).

В вашем случае это будет выглядеть так:

function! s:getSNR()
  if !exists("s:SNR")
    let s:SNR=matchstr(expand("<sfile>"), "<SNR>\\d\\+_\\zegetSNR$")
  endif
  return s:SNR 
endfunction


function! s:UsePdfLaTeX()
  set makeprg=pdflatex\ $*
  inoremap <buffer> <localleader>new \begin{document}<CR><CR>\end{document}
endfunction

function! s:UseContext()
  set makeprg=context\ $*
  inoremap <buffer> <localleader>new \startext<CR><CR>\stoptext
endfunction

let s:Data = {
      \ "variable": "myengine",
      \ "values": [ 'pdflatex', 'context' ],
      \ "actions": [ function(s:getSNR()."UsePdfLaTeX"), function(s:getSNR()."UseContext") ],
      \ "menu": { "priority": '42.42', "name": '&LaTeX.&Engine'}
      \}
call lh#menu#def_toggle_item(s:Data)
nnoremap <silent> <F7> :Toggle LaTeXEngine<cr>

Примечание. Его можно расширить для поддержки любого количества альтернатив.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .