3

В настоящее время я использую superTab для дополнений в Vim. Тем не менее, я хотел бы, чтобы завершения были больше похожи на bash. Например, если я печатаю

st

и возможные дополнения

struct, string

Я бы хотел, чтобы он был завершен, если я нажму клавишу tab, и в идеале отобразил бы меню возможных завершений.

Плагины в порядке.

3 ответа3

2

Я думаю, что следующий плагин делает то, что вы просите:
Ты дополняешь меня

Из описания:

YouCompleteMe - это быстрое, незаметное поисковое средство для завершения кода для Vim. Он имеет два механизма завершения: механизм на основе идентификатора, который работает с каждым языком программирования, и семантический механизм на основе Clang, который обеспечивает завершение семантического кода для C/C++/Objective-C/Objective-C++ (отныне именуемый « языки семейства С »).

1

Положив set completeopt=menu,longest получается, в основном. К сожалению, вводя еще немного текста, затем снова нажимая клавишу табуляции, пытаемся выполнить полное завершение вместо того, чтобы дать следующий самый длинный общий префикс.

0

Основываясь на ответе Александра, у меня есть что-то вроде этих строк в моем .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() возвращает флаг, который говорит, открыто ли всплывающее меню. Это мешает нам изменить поведение клавиши ввода в режиме вставки, когда всплывающее меню не открыто.

К сожалению, я не могу найти документацию для? и: и почему мы должны передавать строки в.

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