Как приручить завершение ключевого слова Vim (не omni) для файлов Perl?

[Обновление 06/2013: как заметил пользователь doubleDown, у меня неверная терминология: удобный C-p а также C-n нажатия клавиш - это не полное завершение (omnicompletion),а завершение ключевых слов. Я думаю, что терминология Vim здесь несколько неудачна:omni - это латынь для всех, тогда как ключевое слово кажется более ограниченным выбором. Путь C-pа такжеC-n Работа по умолчанию состоит в том, чтобы завершить каждое слово прозы, а не только ключевые слова. Это заставило меня подумать, что они должны быть завершены, а не только дополнены ключевыми словами.]

Ну...:-) ... просто набрав в заголовке моего вопроса, очень эффективный ответ появился в каталоге вопросов с похожими названиями. (Который просто показывает, насколько хорош этот сайт!) Я все равно задам вопрос - может быть, у кого-то есть еще более полезный ответ в магазине... Итак, вот так:

Ключевое слово Vimomni complete(по умолчанию привязано кC-p а такжеC-n в режиме редактирования) - Intellisense для бедняков, что по моему опыту почти так же хорошо. Он ищет в буферах подходящие строки.

Однако некоторые скрипты файловых типов выходят за рамки того, что ключевое слово omni complete выполняет рекурсивный поиск включенных файлов. (Обновление: поиск по включенным файлам на самом деле по умолчанию, как это видно из :help 'complete' с Vim 7.3; просто с некоторыми типами файлов включается много вещей, что приводит к замедлению, возможно усугубляемому неоптимальными алгоритмами.) Так что для сценария Perl он начнет поиск в списке модулей. Рекурсивный. Это может быстро перерасти в серьезное сканирование, вы знаете, дисковый ввод-вывод и все эти уродливые вещи.

В результате я скорее воздерживаюсь от использования этой функции, потому что теряю время и удобство, которые я получаю, прерывая поиск с помощью C-c, что оставляет некоторую случайную строку в выводе, который я затем должен удалить.

Поэтому лучшее решение на данный момент - просто отключить использование включенных файлов при завершении по умолчанию, сказав:

:set complete-=i    # remedy
:help 'complete'    # documentation

Есть что добавить к этому?

3 ответа

Решение

Если вы хотите быть немного более хирургическим, вы можете использовать:

autocmd FileType perl set complete-=i

так что вы просто влияете на поведение Perl-кода.

Вы должны использовать perlomni, написанный c9s.

https://github.com/c9s/perlomni.vim

http://www.vim.org/scripts/script.php?script_id=2852

Вы можете посмотреть видео, как использовать.

http://www.youtube.com/watch?v=hZ7871WcIv0

для простоты, чтобы завершить метод, наберите что-нибудь и "->", затем.

#!perl
use strict;
use warnings;
use DateTime;

my $dt = DateTime->new;

$dt->ye # type <c-x><c-o>, you'll get $dt->year

Я полагаю, что в этом вопросе нет ничего более того, что я уже сказал в своем вопросе:

:set complete-=i    # remedy
:help 'complete'    # documentation

Просто для того, чтобы добавить некоторые новости Vim к этому избыточному ответу, я недавно приправил свою конфигурацию Vim (в основном с помощью GVim в Windows) приятным шрифтом и несколькими отличными плагинами:

GVim на Win7 со всеми вышеперечисленными вариантами

Другие вопросы по тегам