Как приручить завершение ключевого слова 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) приятным шрифтом и несколькими отличными плагинами:
- Шрифт Consolas (или Inconsolata, или Anonymous Pro, или Droid)
- CtrlP средство поиска файлов - (вы можете настроить его для точного сопоставления, что я и сделал, просто закомментируйте несколько строк кода, которые делают сопоставление "нечетким", а это не то, что я хочу).
- Powerline, модная строка состояния
colorscheme evening
стандарт, я думаюset relativenumber
стандарт, но я просто не знал об этом:)