Це давнє запитання, але я постійно повертаюся до нього з проблиском згасаючої надії, думаючи, що одного разу я знайду правильну комбінацію плагінів, щоб дати мені ідеальне автодоповнення у Vim. Пошук триває, але це все дослідження, які я робив протягом кількох років.
Перш за все, ви повинні зрозуміти, що Vim - це текстовий редактор, а не редактор коду. Редактори коду, IDES - такі інструменти, як набір інструментів Jetbrains, Visual Studio Code, Eclipse тощо.
Vim принципово не може точно "заповнити" код. Автодоповнення вимагає інтроспекції вашого вихідного коду та аналізу AST. Подумайте, що Vim не міг робити асинхронні операції, поки Vim 8 не вийшов у 2016 році, тому спроба запустити будь-яке програмне забезпечення для введення коду у плагіні Vim було б кошмаром. Це вписано в історію екосистеми Vim, щоб цього не робити. І всі, хто намагається це зробити, як Tern For Vim - справді кошмари.
Найкраще, що текстовий редактор може зробити, - це фрагменти та доповнення тих же слів / рядків / тощо, про які він знає. Якщо ви шукаєте автоматичне заповнення коду, вам слід скористатися редактором коду, а не текстовим редактором.
Це ваші варіанти, з яких я спробував усі:
Дві корисні комбінації клавіш Ctrl- це n, які автоматично заповнять слово лише на основі відкритих у вас буферів (без введення коду) і Ctrl- xCtrl- lякі автоматично заповнять повний рядок коду, якщо ви хочете його дублювати. Ви, мабуть, знаєте Ctrl- xCtrl- f, який автоматично заповнить ім'я файлу, включаючи шлях, відносно поточного :pwd
. Модель-повний модуль може бути злегка корисно , якщо ви не шукайте з /\v
.
Вбудований у Vim " Omnicompletion ", ініційований Ctrl- x, Ctrl- o(це те, що автори Vim хочуть, щоб ви вводили кожен раз) разом із купою мовних специфічних плагінів, якщо вони існують. Ви можете :echo &omnifunc
у файлі, щоб побачити, чи вже у вас вибраний файл Omnicompletion, встановлений Vim.
AutoComplPop для автоматичного відкриття вищевказаного меню Omnicompletion при наборі тексту.
SuperTab, який дозволяє натиснути, Tabщоб запустити вбудований Vim.
NeoComplCache, що є ключовим словом завершення (чим він не відрізняється від вбудованого завершення Vim, не вказано), складною .vimrc
установкою та NeoSnippet для завершення фрагменту.
Чудовищна комбінація exuberant-ctags
та DoctorJS
(проект Mozilla, який уже мертвий рік), TagBar та домашня річ , яка отримує завершення з файлів тегів.
SnipMate , базовий плагін для завершення тегів, разом із фрагментами , і самостійно придумайте, як додати фрагменти, оскільки це трохи складно.
UltiSnips разом з UltiSnips-Snippets, які відрізняються від вищезазначених фрагментів.
Tern for Vim - багатообіцяюча бібліотека, яка робить власне самоаналіз коду, щоб отримати правильне автозаповнення. Однак він баггі, дуже повільний, має витоки пам’яті, що призведе до аварії Vim, і, можливо, це залишення програмного забезпечення.
YouCompleteMe - нечітке завершення типу, яке працює із сервером у фоновому режимі, а також функція для домашнього завершення фрагменту.
Eclim - шляхетна спроба запустити сервер Eclipse у фоновому режимі і повідомити Vim про автоматичні завершення, які він вводить вперед . Це працює так само, як і Терн.
Нарешті, Closetag або delimitMate або AutoClose або доморощений bananagram для автоматичного закриття тегів і дужки автоматично при введенні.
Майже кожен плагін у цьому списку буде конфліктувати з майже будь-яким іншим плагіном у цьому списку.
YouCompleteMe, здається, є лідером пакету, але мені ніколи не вдалося змусити його працювати належним чином із заповненням тегів, і його завершення самоаналізу коду ще мало довести потужність.
Моя особиста думка , що сучасний стан світу автозавершення Vim знаходиться в поганій формі. Для невеликих проектів вам може бути добре, використовуючи одне з вищезазначених рішень. Якщо ви маєте справу з простим API, який ви можете тримати в голові, завершення введення без коду, ймовірно, буде нормальним. Якщо ви маєте справу з великим проектом або потребуєте переваги безпеки типу під час програмування, повноцінний IDE ( Eclipse , Visual Studio , WebStorm ) підійде вам набагато краще, ніж буде Vim.
Мінусом IDE, звичайно, є те, що у вас більше не буде сили Віма. Я не використовував жодної IDE, яка має прийнятний режим Vim.
Vim має помірний ухил до нетипізованих С-подібних мов, і в іншому випадку очікує, що будь-які особливості мови будуть додані користувачами як плагіни. На жаль, це призвело до розбитої екосистеми автозавершення. Деякі варіанти пристойні, але нічого не ідеально, і рідко є керівник більшості / найкраща практика.
let g:acp_behaviorSnipmateLength=-1
див.:help autocomplpop
), Які ви повинні додати до свого .vimrc, ви додали його?