1

vimでsupertabプラグインを使用しています。
これらは私のデフォルト設定です(_vimrc内)

let g:SuperTabDefaultCompletionType = '<c-x><c-k>'  -->(dictionary)  
let g:SuperTabRetainCompletionDuration = "completion"  
let g:SuperTabLongestEnhanced = 1  
let g:SuperTabLongestHighlight = 1  

オンザフライでスーパータブを使用してオムニコンプリートを選択するために、このスクリプトを作成しました。

function! SuperTabFunction()
  if !exists("WhatSuperTab")
    let WhatSuperTab = "SuperTab function?"
  endif
  if !exists("MenuSuperTab_choices")
    let MenuSuperTab_choices = "&Current page\n&Spellchecker\nSentence\nCode"
  endif
  let n = confirm(WhatSuperTab, MenuSuperTab_choices, "Question")
  if n == 1
    let g:SuperTabDefaultCompletionType = '<c-x><c-m>'
    so $VIM/vimfiles/plugin/supertab.vim
  elseif n == 2
    let g:SuperTabDefaultCompletionType = '<c-x><c-k>'
    so $VIM/vimfiles/plugin/supertab.vim
  elseif n == 3
    let g:SuperTabDefaultCompletionType = '<c-x><c-l>'
    so $VIM/vimfiles/plugin/supertab.vim
  elseif n == 4
    let g:SuperTabDefaultCompletionType = '<c-x><c-o>'
    so $VIM/vimfiles/plugin/supertab.vim
  else
    return ''
  endif
endfun 

  nmap <silent> <C-S-tab> :call SuperTabFunction()<CR>
  imap <silent> <C-S-tab>  <esc>:call SuperTabFunction()<CR>a

上記の関数を呼び出して pe "Sentence" を選択すると、スーパー タブを使用して文を完成させることができます 上記の関数を再度呼び出して pe "Spellchecker" を選択すると、正しい値が g:SuperTabDefaultCompletionType に割り当てられますが、それでも文が置き換えられます。

この関数で何が間違っていましたか?

4

1 に答える 1

1

グローバル変数を直接変更する代わりに、提供された関数を呼び出してみましたか?

" SuperTabSetDefaultCompletionType(タイプ) {{{
" ユーザーがデフォルトを設定するために使用できるグローバルに利用可能な機能
" ftplugin のように、現在のバッファの完了タイプ。
関数!SuperTabSetDefaultCompletionType(タイプ)
于 2012-03-15T07:45:30.343 に答える