omnicomplete в VIM с Shift-Tab не работает? - PullRequest
2 голосов
/ 17 марта 2012

Я пытаюсь получить vim, чтобы я мог просматривать всплывающий список автозаполнения клавишей табуляции. Он отлично работает для вкладки, но не для s-tab (shift-tab). Кажется, что shift-tab как-то отменяет меню автозаполнения перед применением C-P

У кого-нибудь есть идеи?

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>

1 Ответ

6 голосов
/ 18 марта 2012

Вы пропустили знак равенства "=" после <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>, как это, и вы можете сделать отступ в режиме вставки.
...