Автозаполнение в Vim


258

После долгой «тренировки» я наконец перешел на Vim; но у меня есть некоторые проблемы с автозаполнением. Как я могу предложить код во время набора текста?

Я обычно разрабатываю PHP, Ruby, HTML, C и CSS.

Ответы:


144

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

Редактирование 2015: я лично использую YouCompleteMe сейчас.


10
Это настоятельно рекомендуется. Принимает усилия из набора CX CO, CP или CN.
Амжит

Я пробовал это, но, похоже, не работает .. возможно, есть конфликт с другими сценариями ..
diegocstn

1
Вы помещаете файлы в указанные каталоги в ~ / .vim?
Майкл Майкл,

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
Это то, что Майкл Майкл говорил вам с плагином, который он упомянул. Кроме того, вы можете посмотреть на SuperTab.
projecktzero

4
Для поддержки CSS добавьте черту для встроенного автозаполнения, добавив 'set iskeyword + = -' в свой .vimrc
mahalie

3
Это наиболее полный и родной способ сделать это :-)
Srikant

5
@ Привет-Ангел 'auto' часть состоит в том, что он автоматически определяет варианты завершения слова и автоматически конкурирует слово при выборе варианта.
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значит? Спасибо.
ч.т.д.

Хорошо, я понял, это значит setlocal. Но зачем нам нужен setlocal здесь?
ч.т.д.

Посмотрите, как это вас раздражает, когда вы открываете другой файл в том же буфере.
Ernix

2
@ernix По вашей ссылке: буфер в Vim - это ... открытый экземпляр файла ... я знаю о буферах, окнах и вкладках; но я не знаю об открытии другого файла в том же буфере. Мне кажется, что когда вы открываете файл, он всегда будет открываться в новом буфере и добавлять этот буфер в список буферов. Я знаю, что существуют другие способы использования буферов, например, список быстрых исправлений, но я не знал об изменении файла в буфере. :h buffersговорит: буфер - это файл, загруженный в память для редактирования. Тем не менее, я только серьезно использовал Vim для 3 мес. и я, безусловно, открыт для исправления.
JakeD

1
@JakeD Ах, да. Ты прав. Я взял «экземпляр», означающий неправильный путь. Я неправильно понял, что вы говорили о процессах с разными PID. Извини, просто забудь о том, что я сказал.
Эрник

6

Существует также https://github.com/Valloric/YouCompleteMe, и он включает в себя такие вещи, как джедай, а также имеет нечеткое совпадение. До сих пор я обнаружил, что YCM самый быстрый из всех, что я пробовал.

Изменить: также существуют некоторые новые, такие как https://github.com/maralla/completor.vim


6

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

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

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


32
для меня весь смысл vim в использовании терминала ... если бы я хотел использовать электронное приложение, я бы просто использовал vscode с расширением vim ..
Мохамед Бенкедадра,

2
@MohamedBenkedadra Но разве это действительно даст тебе всю мощь Vim? Я, например, большой поклонник его системы поиска и замены шаблонов, и я был бы приятно удивлен, если бы плагин vim-emulation поддерживал это.
Серебряный Волк - Восстановить Монику

3

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

На предыдущей ссылке на странице проекта есть множество скриншотов. Neocomplcache также имеет множество опций конфигурации, из которых также есть основные примеры на странице проекта.

Если вам нужно больше глубины, вы можете посмотреть соответствующий раздел в моем vimrc - просто найдите слово neocomplcache.


1

Вот ссылка ! для PHP.

нажмите клавиши Ctrl + x, а затем клавиши Ctrl + o при написании некоторых функций PHP.

Спасибо Oseems Solutions за учебник


1

Если вы хотите только автозаполнение из кеша ваших текущих буферов, supertab проще установить, чем neocomplete , он может работать на Mac с предустановленным vim без необходимости в MacVim.

Вы можете проверить другие альтернативы на Vim Awesome .


0

Для PHP, падаван с Deoplete большие решения , имеющие надежный PHP автозаполнения в Neovim. Я много чего перепробовал и падаван работает как шарм!

Для Vim вы можете использовать Neocomplete вместо Deoplete.

Я написал статью, как сделать Vim PHP IDE, если кому-то интересно. Конечно, падаван является частью этого.


0

Другой вариант - coc.nvim .

Это действительно быстро, и завершение отлично, так как использует intellisense то же самое автозаполнение, что и VScode. У этого также есть способности линтинга. Так что это показывает, что вы могли иметь ошибку. Он поддерживает множество языков.

Для установки и настройки может потребоваться некоторое время, но я считаю, что это лучший механизм автозаполнения для vim.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.