Вставка вкладки в Vim через привязку работает только один раз - PullRequest
0 голосов
/ 01 мая 2018

Я сделал привязку режима вставки (открывающая фигурная скобка + Enter), которая вводит вкладку (4 пробела) на следующей строке и закрывающую фигурную скобку после.

inoremap {<Enter> {<Enter><Enter>}<Up><Tab>

Пример:

fn foo() {
    // Some code
}

Работает нормально, но когда я пытаюсь использовать привязку снова, вкладки больше не вставляются, только новая строка и скобка.

fn bar() {
    if condition {
    loop {
    // Some more code
    }
    }
}

Ответы [ 3 ]

0 голосов
/ 02 мая 2018

Лично я бы порекомендовал использовать вместо этого сокращение, чтобы у вас не было странной задержки.

Следующее использует "rails.vim" как функция RailsExpand. Поместите внутрь vimrc файла:

function! RailsExpand(root, good, ...)
  let c = nr2char(getchar(0))
  echom c
  if c == "" || c =~ (a:0 ? a:1 : "\t")
    return a:good
  else
    return a:root . c
  endif
endfunction

iabbrev { <c-r>=RailsExpand('{', "{\<lt>cr>}\<lt>c-o>O\<tab>", '\r')<cr>

Лично я предпочитаю расширять <tab> вместо <cr>, чтобы вы могли использовать:

iabbrev { <c-r>=RailsExpand('{', "{\<lt>cr>}\<lt>c-o>O\<tab>")<cr>
0 голосов
/ 02 мая 2018

Вам не нужно вставлять это <Tab> самостоятельно:

inoremap {<CR> {<CR>}<C-o>O

O откроет новую строку над текущей строкой с нужным количеством и типом отступа.

0 голосов
/ 01 мая 2018

Это не красиво, но я думаю, что это может достичь вашей цели:

inoremap {<Enter> {<Enter><Tab><Enter>}<Esc><<<Up>A

Редактировать : ранее в моем решении была опечатка. Попробуйте еще раз, если изначально не сработало

...