VIM: табуляция как полная, но не в начале строки
Я настроил вкладку как Omnicompetion в VIM 7.3:
inoremap <Tab> <C-n>
Это удобно, но мне бы очень хотелось, чтобы в начале строки была обычная вкладка! Есть ли способ проверить, является ли предыдущий символ пробелом или началом строки, и если да, то вставить символ табуляции, а не всеполноту?
Спасибо!
2 ответа
Я использую это в течение некоторого времени:
function! InsertTabWrapper()
let col = col('.') - 1
if !col || getline('.')[col - 1] !~ '\k'
return "\<tab>"
else
return "\<c-p>"
endif
endfunction
inoremap <tab> <c-r>=InsertTabWrapper()<cr>
Это позволяет вам использовать клавишу табуляции обычно, когда курсор находится в начале строки или не находится на слове, в противном случае он выполняет клавишу завершения control-p - вы можете изменить ее на
[Хотя я модифицировал его, первоначальная идея этого, вероятно, пришла из списка рассылки Vim Users, но я не сохранил никаких записей о том, где я его получил.]
Я могу вспомнить несколько запутанные функции, которые возвращаются на один шаг назад, сравнивают символы и действуют соответственно, но я бы предпочел обратиться к старому "что вы на самом деле пытаетесь сделать?" вопрос:
Я предлагаю вам использовать Ctrl+T для отступа строки в режиме вставки, если это все, для чего вы хотите использовать кнопку табуляции. Я лично нахожу семантически очень запутанным иметь такой ключ, зависящий от позиции.