6

Я настроил вкладку как Omnicompetion в VIM 7.3:

inoremap <Tab> <C-n>

Это удобно, но мне бы очень хотелось, чтобы в начале строки была обычная вкладка! Есть ли способ проверить, является ли предыдущий символ пробелом или началом строки, и если да, то вставить символ табуляции, а не заполнить его?

Спасибо!

2 ответа2

12

Я использую это в течение некоторого времени:

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 - вы можете изменить ее на <cn> для вашего использования, хотя я нахожу < cp> более полезно.

[Хотя я изменил его, первоначальная идея, вероятно, пришла из списка рассылки Vim Users, но я не сохранил никаких записей о том, где я его получил.]

2

Я могу вспомнить несколько запутанные функции, которые возвращаются на один шаг назад, сравнивают символы и действуют соответственно, но я бы предпочел обратиться к старому:«Что вы действительно пытаетесь сделать?"вопрос:

Я предлагаю вам использовать Ctrl+T для отступа строки в режиме вставки, если это все, для чего вы хотите использовать кнопку табуляции. Я лично нахожу семантически очень запутанным иметь такой ключ, зависящий от позиции.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .