Mapeamentos de alternância do Vim

0

Eu configurei meus mapeamentos da seguinte maneira:

"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

No entanto, isso não está se comportando como espero; recusa-se a remapear as chaves. Inicialmente, nenhuma chave é mapeada e, uma vez mapeadas, elas permanecem mapeadas. Como faço para corrigir isso?

Eu chamo ToggleEngine () da seguinte forma: nmap <silent> <F7> :call ToggleSpell()<CR>

    
por EricR 22.11.2010 / 16:19

2 respostas

1

quando você call ToggleEngine() ?

Sugestão:

"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
    
por 22.11.2010 / 17:21
1

Com base no lh-vim-lib , aqui está outra solução que define um menu e um comando (adicionar um mapeamento se torna tão simples quanto chamar o comando do mapeamento).

No seu caso, seria parecido com:

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>

Observação: ele pode ser estendido para suportar quantas alternativas você desejar.

    
por 24.11.2010 / 17:33

Tags