3

タブキーでオートコンプリートポップアップリストを一周できるようにvimを取得しようとしています。タブでは正常に機能しますが、s-tab (シフトタブ) では機能しません。CPを適用する前に、Shift-Tabが何らかの形でオートコンプリートメニューをキャンセルするようです

誰でもアイデアはありますか?

function InsertTabWrapper(direction)
  if pumvisible()
    if "forward" == a:direction
      return "\<C-N>"
    else
      return "\<C-P>"
    endif
  endif
  let col = col('.') - 1
  if !col || getline('.')[col - 1] !~ '\k' 
    return "\<tab>"
  else
    return "\<c-x>\<c-o>"
  endif
endfunction

inoremap <tab> <c-r>=InsertTabWrapper("forward")<cr>
inoremap <s-tab> <c-r>InsertTabWrapper("backward")<cr>
4

1 に答える 1

8

マッピングの後<c-r>に等号「=」がありません。<s-tab>

ただし、次のようにすることをお勧めします。

function! InsertTabWrapper()
  if pumvisible()
    return "\<c-n>"
  endif
  let col = col('.') - 1
  if !col || getline('.')[col - 1] !~ '\k'
    return "\<tab>"
  else
    return "\<c-x>\<c-o>"
  endif
endfunction
inoremap <expr><tab> InsertTabWrapper()
inoremap <expr><s-tab> pumvisible()?"\<c-p>":"\<c-d>"
  1. <expr>マッピングを使用します。見やすく、明確です(多くの人は<c-r>=物事について知りません。
  2. このようにマッピング<s-tab>すると、挿入モードでインデントを解除できます。
于 2012-03-18T02:59:50.797 に答える