Автозавершення у Vim


258

Після тривалого «тренування» я нарешті перейшов на Vim; але у мене є проблеми з автозавершенням. Як я можу запропонувати код під час введення тексту?

Я зазвичай розробляю PHP, Ruby, HTML, C та CSS.

Відповіді:


143

Ви можете використовувати плагін типу AutoComplPop, щоб отримати автоматичне завершення коду під час введення.

2015 Редагувати: Я особисто зараз використовую YouCompleteMe .


10
Це дуже рекомендується. Докладає зусиль для введення CX CO, CP або CN.
Амджіт

Я спробував це, але, здається, не працює. Ймовірно, конфлікт з іншими сценаріями ..
diegocstn

1
ви поміщаєте файли у вказані каталоги в ~ / .vim?
michaelmichael

1
@dieguitoweb ACP не працює з усіма типами файлів за замовчуванням. Ви повинні "зламати" це, щоб він працював з JavaScript, ActionScript і PHP. Тут я пояснюю, як це роблю. І ось ще одна підказка для PHP.
romainl

тепер це працює :) всі файли вже були у потрібних каталогах .. Я лише замінив скрипт новим завантаженням із сховища git і тепер це добре. велике спасибі
diegocstn

438

Використовувати Ctrl- Nщоб отримати список пропозицій щодо слів у режимі вставки. Введіть, :help i_CTRL-Nщоб переглянути документацію Vim про цю функціональність.

Ось приклад імпорту словника Python у Vim.


15
дякую, це чудово, але як я можу мати цей список в автоматичному режимі, не натискаючи <ctrl + N>?
diegocstn

5
Ось що вам розповідав michaelmichael згаданим плагіном. Також ви можете подивитися на SuperTab.
projecktzero

4
Для підтримки CSS додайте тире для вбудованого автозаповнення, додавши "set iskeyword + = -" до свого .vimrc
mahalie

3
Це найповніший і
найрідніший

5
@ Привіт-Ангел 'авто' частина полягає в тому, що вона автоматично визначає варіанти завершення слова і автоматично конкурує слово при виборі параметра.
CJBS


11

Можна почати з вбудованої omnifuncнастройки.

Просто поставте:

filetype plugin on
au FileType php setl ofu=phpcomplete#CompletePHP
au FileType ruby,eruby setl ofu=rubycomplete#Complete
au FileType html,xhtml setl ofu=htmlcomplete#CompleteTags
au FileType c setl ofu=ccomplete#CompleteCpp
au FileType css setl ofu=csscomplete#CompleteCSS

внизу .vimrc, а потім наберіть <Ctrl-X><Ctrl-O>у режимі вставки.

Я завжди покладаюся на це завершення CSS.


що setlозначає? Дякую.
qed

Гаразд, я це зрозумів, це означає сетлокал. Але навіщо нам тут потрібні місця?
qed

Погляньте, як це дратує вас, коли ви відкриєте інший файл у тому ж буфері.
ernix

2
@ernix З вашого посилання: Буфер у Vim - це відкритий екземпляр файлу ... Я знаю про буфери, вікна та вкладки; але я не знаю про відкриття іншого файлу в тому ж буфері. Мені здається, що коли ви відкриєте файл, він завжди відкриється в новому буфері і додасть цей буфер до списку буферів. Я знаю, що існують інші способи використання буферів, наприклад, список швидкого виправлення, але я не знав про зміну файлу в буфері. :h buffersкаже: Буфер - це файл, завантажений у пам'ять для редагування. Це сказав, що я лише серйозно використовую Vim для 3 міс. і я, безумовно, відкритий для виправлення.
ДжейкД

1
@JakeD Ага так. Ти маєш рацію. Я взяв "екземпляр", що означає неправильний шлях. Я неправильно зрозумів, що ви говорили про процеси з різними PID. Вибачте, просто забудьте про те, що я сказав.
ernix


6

Нещодавно я відкрив проект під назвою OniVim , який є електронним фронтальним пристроєм для NeoVim, який має дуже гарне автозаповнення для декількох мов поза коробкою, і оскільки це в основному просто обгортка навколо NeoVim, ви маєте всю потужність vim у вашому розпорядженні, якщо графічний інтерфейс не відповідає вашим потребам. Він ще в ранньому розвитку, але він швидко вдосконалюється, і навколо нього дійсно активна спільнота. Я використовую vim більше 10 років і почав давати тест-драйв Oni кілька тижнів тому, і, хоча у нього є деякі помилки тут і там, він не став на моєму шляху. Я настійно рекомендую це новим користувачам vim, які все ще отримують свої vim-пальці!

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

OniVim: https://www.onivim.io/


32
для мене вся точка vim використовує термінал ... якщо я хотів би скористатися електронним додатком, я просто використаю vscode з розширенням vim ..
Мохамед Бенкедадра

2
@MohamedBenkedadra Але чи справді ти отримаєш всю повноту влади Віма? Я, мабуть, є величезним шанувальником його схеми пошуку та заміни шаблонів, і я був би приємно здивований, якби плагін vim-emulation підтримував це.
SilverWolf -

3

Я використовував neocomplcache близько півроку. Це плагін, який збирає кеш слів у всі ваші буфери, а потім надає їх для автоматичного завершення.

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

Якщо вам потрібна більша глибина, ви можете переглянути відповідний розділ у моєму vimrc - просто шукайте слово neocomplcache.


1

Ось посилання ! для PHP.

натискаючи клавіші Ctrl + x, а потім клавіші Ctrl + o під час запису деяких функцій PHP.

Завдяки Oseems Solutions для навчального посібника


1

Якщо ви хочете лише автоматично заповнити з кешу ваших поточних буферів, супертаб простіший в установці, ніж неокомплектований , він може працювати на Mac, попередньо встановлений vim поза коробкою, без необхідності MacVim.

Ви можете перевірити інші варіанти на vim awesome .


0

Для PHP, падаван з Deoplete великі рішення , які мають надійний PHP автозаповнення в Neovim. Я спробував багато речей, і Падаван працює як шарм!

Для Vim ви можете використовувати Neocomplete замість Deoplete.

Я написав статтю, як зробити Vim PHP IDE, якщо когось цікавить. Звичайно, Падаван є його частиною.


0

Інший варіант - coc.nvim .

Це дуже швидко, і завершення чудово, оскільки воно використовує те саме автозавершення, що і VScode. Він також має можливості підшивки. Так це свідчить про те, що ви, можливо, мали помилку. Він підтримує безліч мов.

Налаштування та налаштування може зайняти трохи, але я думаю, що це найкращий двигун автодоповнення для vim там.

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