1

То, что я хочу, это следующее:

  1. Нажатие клавиши TAB завершает текущее слово, которое я пишу, с самым длинным общим префиксом, и больше ничего. Я также не хочу переключаться между вариантами, повторное нажатие клавиши TAB должно вернуть меня к исходной строке, или ничего не делать, если это невозможно.

  2. При нажатии CTRL + SPACE должно появиться меню, отображающее все возможные завершения, такие как vim по умолчанию.

Это возможно? Я обнаружил, что циклическое переключение между вариантами / открытием меню чрезвычайно отвлекает меня во время программирования и поощряет поведение продолжать циклизацию и надеется, что завершение, которое я ищу, есть.

1 ответ1

1

Для самого длинного общего текста используйте

:set completeopt+=longest

Чтобы не показывать другие совпадения:

:set completeopt-=menu

<C-N> / <C-P> прежнему будут показывать другие совпадения; научитесь использовать <C-E> чтобы остановить завершение и вернуться к первоначально напечатанному тексту.

Для отображения:

function s:EnableCompleteMenu()
    set completeopt+=menu
    return ''
endfunction
inoremap <expr> <SID>EnableCompleteMenu s:EnableCompleteMenu()
inoremap <script> <C-Space> <SID>EnableCompleteMenu<C-N>

Вы также можете использовать <C-P> для отображения совпадений в другом направлении. Обратите внимание, что отображение <C-Space> вероятно, работает только в GVIM. Если вы хотите использовать это вместе с командами, указанными выше, вам нужно написать похожую оболочку (с помощью :set completeopt-=menu) и перегрузить ее другими командами завершения (<C-N> и т.д.).

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