Чи можливо мати vim автоматичне завершення імен функцій, змінних тощо при використанні його для програмування?


56

Багато ідентифікаторів автоматично заповнюють імена функцій, змінних, назви методів тощо як типи користувачів. Найкращі заповнюють імена на основі вбудованої бібліотеки мови, а також того, що вже визначено в інших файлах тієї ж програми.

Наприклад, коли я набираю наступну програму Python:

hungy = True

def eatFood(food):
    pass

if hungry:
    eatF

рядок eatFавтоматично відображатиметься eatFood()як доступний варіант автоматичного завершення.

Чи має Vim цю можливість? Якщо так, то як я можу це включити?

Відповіді:


42

Існує багато різних ароматів автозаповнення in vim. Одним із способів може бути використання SuperTab . Це забезпечує спосіб використання вкладки табуляції більш-менш будь-коли. Це дозволить вам натиснути Tabпісля того, як ви частково набрали слово, щоб отримати список завершень. Наприклад, введення, eatFза яким Tabслід розгорнути наeatFood.

Зверніть увагу : ці фотографії посилаються на приклади gifs у дії.

доповнення доповнення

Vim має чудові інші варіанти. Ви повинні прочитати, :h ins-completionщоб побачити різноманітність вбудованих варіантів завершення. Використання vim's Ctrl- XCtrl- у Oпоєднанні з плагіном, відомим пітоном, як jedi, може надати смак завершення. Джедаї можна налаштувати, щоб надати документацію про завершення омні (це те, що Ctrl- XCtrl- Oробить). Тоді документація для кандидатів на завершення з’явиться у розділеному вікні.

завершення ctrlxctrlo

Використання подібних плагінів, але різних варіантів призводить до різного роду поведінки. Можливо, наприклад, не потрібно запрошувати автозавершення (якщо це ви хочете). Натомість, після введення деякої кількості букв (скажімо, 2 або 3) слова, плагін може спробувати інтелектуально запропонувати можливі доповнення в меню.

введіть тут опис зображення

Отже, коротка відповідь - так! Але процес налаштування може бути трохи складним. Я вважаю це кроком у довгій сходинці освоєння вим.


Я спробував їх усіх, і завжди повертаюся до SuperTab, це найменш настирливий.
craigp

1
Мені також дуже подобається плагін YouCompleteMe, оскільки він пропонує як-ви типу, і ви можете обирати або ігнорувати пропозиції. Так, візуально це важко ігнорувати, але це дуже не нав'язливо в моєму робочому процесі, оскільки воно вимагає меншої кількості натискань клавіш.
процвітає

3
Я змінив анімацію на "натискання", в тому сенсі, що вони пов'язані з анімацією gif.
davidlowryduda

1
Я не можу використовувати YouCompleteMe на своєму робочому комп’ютері, тому що у мене немає кореня для встановлення залежностей, SuperTab - це безумовно наступний найкращий вибір.
Чарльз Клейтон

@mixedmath У моєму випадку superTab не працює.
alhelal

24

Така функціональність, тобто пошук у поточному файлі (і всіх відкритих файлах) для автоматичного завершення, повинна бути включена за замовчуванням за допомогою Ctrl+P:

скріншот використовуваного автодоповнення

Ви можете перейти до н доб навіювання з Ctrl+N, в р revious пропозицію з Ctrl+Pі вибрати його, ввівши будь-яку букву (який буде додаватися відразу після навіювання).


1
Редактору (Джаспер): Я швидше за все хочу знову написати щось, що я написав недавно, а не те, що я напишу в майбутньому, або те, що знаходиться на початку файлу. Тому ^Pє більш природним ІМХО. Інакше дякую за редагування (сподіваюся, що я натиснув праву кнопку, і ви отримали свій +2).
йо '

1
Так, у мене є такі уявні точки в Інтернеті :) Я завжди думав, що список пропозицій буде відсортований за алфавітом ...
Джаспер

@Ясперський порядок зовнішнього вигляду це (принаймні, для мене, звичайно, також див. Вище: world,word,woodа не навпаки). Це ^Pостаннє використане завершення, яке дуже зручно (я рідко заходжу далі, ніж 3 пункти у списку, навіть у довгому файлі).
йо '

protip:inoremap <C-Space> <C-N>
wchargin

20

Vim має підтримку для завершення спочатку. Ви можете прочитати про різні різні доповнення, які підтримує Vim :h ins-completion.

Загалом, для всіх цілей, які я знайшов, для моїх сподобань цілком достатньо, проте є деякі додатки для завершення, які додають більше цінності, ніж те, що пропонує доповнення. NeoComplete , YCM (YouCompleteMe) - кілька для того ж. Вони більш досконалі в тому сенсі, що намагаються точніше поєднувати різні типи доповнень, а також мають вдосконалені механізми кешування, тому вони, як правило, швидше. YCM навіть йде настільки, щоб співпрацювати із зовнішніми компіляторами / утилітами, щоб забезпечити кращу IntelliSense.


9

Так, сценарії автоматичного завершення для vim існують. "Найкращий" вибір залежить від вашої мови програмування. Оскільки ваш приклад код - Python, я пропоную поглянути на джедаїв . Майте на увазі те, що ви закінчили мене, існує підтримка інших мов, але іноді сприймається як занадто велика. Для інших мов ви можете переглядати довгий набір сценаріїв vim .


7

У режимі вставки введіть перші пару символів слова, а потім натисніть:

Ctrl-N to insert the next matching word; or
Ctrl-P to insert the previous matching word. 

Це особливо корисно при введенні імен змінних у програму.

Параметр "завершити" керує тим, де шукаються ключові слова (включають файли, файли тегів, буфери тощо).

Параметр "завершення" керує тим, як відбувається завершення (наприклад, чи відображається меню).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.