Основываясь на ответе Александра, у меня есть что-то вроде этих строк в моем .vimrc
"unix like completion - longest substring
set completeopt+=longest
"add command to retrigger longest substring
"Naive version... see below
inoremap <C-m> <C-e><C-n>
Таким образом, «самый длинный» бит выполняет большую часть работы, однако последующие нажатия <C-n>
просто начнут циклически переключать опции. Если вы нажмете <C-e>
то это (e) найдет автозаполнение, повторное включение его с помощью <C-n>
соответствует следующей самой длинной подстроке ... добавление ярлыка для этого останавливает необходимость нажимать две клавиши ....
Вы не хотите связывать это с <C-n>
как это остановит вас на велосипеде в привычной манере
Я выбрал M, так как он находится прямо рядом с N, и проверка (:h insert-index
) по умолчанию просто привязана к тому same as <CR>
.... потому что это vim, и нет ничего легкого, оказывается, что это означает, что На самом деле vim не может различить два нажатия клавиш !
Если вас не волнует использование <C-m>
просто выберите что-то другое, иначе читайте дальше ...
Основываясь на этом другом посте, я адаптировал ответ внизу и немного очистил синтаксис (основываясь на этом)
Я закончил с этим:
"add command to retrigger longest substring
inoremap <expr> <C-M> pumvisible() ? "\<C-e><C-n>" : "\<C-m>"
pumvisible() возвращает флаг, который говорит, открыто ли всплывающее меню. Это мешает нам изменить поведение клавиши ввода в режиме вставки, когда всплывающее меню не открыто.
К сожалению, я не могу найти документацию для? и: и почему мы должны передавать строки в.