Привет, коллеги. Про возможность автодополнения я уже рассказывал: Вим может дописать за вас строку или слово, используя содержимое текущего файла, или соседних, или особые файлы словарей, или проверку орфографии, файл тегов и ещё что-то. Давайте поподробнее поговорим про автодополнение по словарю.
Поиск слова в этом же файле или файлах в том же каталоге хорош для программирования, потому что это ключевые слова и идентификаторы. Естественно их искать где-то рядом. Для той же цели удобны теги или дополнение целой строки. А вот для текстов нужны другие инструменты.
Например, словари, тезаурусы и проверка орфографии. Это всё, конечно, словари, но разные. Про орфографию был материал, там особые словари. Автодополнение по ней позволит также найти слово, если вы не знаете точно, как оно пишется. Надо включить проверку и потом использовать сочетание <C-X>s.
Тезаурус — это специальный словарь синонимов. О них поговорим детальнее отдельно. А сейчас — про словари.
Словарем называется файл, в котором на отдельных строчках стоят слова. По одному слову или несколько через пробел. Например, в Linux словари обычно лежат в каталоге /usr/share/dict: у меня их там несколько, включая британский и американский. А русского нет.
Но я нашел русский словарь. Вы можете взять его или отыскать другой, это несложно.
Найдя словари для языков, с которыми вы работаете (русский и английский, видимо, это суровый минимум), укажите Виму, где они лежат: задайте опцию dictionary. В ней должны быть имена файлов (с путями), разделенные запятыми. Лучше использовать команду set+=, которая добавит файл словаря корректно и может его потом удалить (set-=). Например:
:set dictionary+= /usr/share/dict/british-english/words
:set dictionary+= ~/dict/russian.txt
Сделать это лучше из .vimrc и можно забыть. Вим будет всегда в курсе, где лежат словари.
Само автодополнение довольно громоздко, но его можно навесить на удобную клавишу. Сочетание такое: в режиме вставки нажимаете <C-X>, включая режим автодополнения, затем <C-K>, выбирая автодополнение по словарю. Вим берет начало слова, которое вы начали вводить, и предлагает варианты. Листать можно стрелками или сочетаниями <C-N> и <C-P>.
Слово "сервера" легче самому набрать, так как "серве" уже почти слово целиком, а "сер" слишком много свободы выбора дает. Но для какого-нибудь "экзистенциализма" это может быть полезно. Или для языка, которым вы не владеете настолько блестяще, чтобы не задумываться о правописании.
Вы можете завести свой словарь, сложив туда то, что часто надо. Имена своих подруг, например. Или марки товаров, о которых часто пишете. Или фамилии, которые часто упоминаются. Математику стоит сделать подборку Гаусса-Лагранжа-Эйлера-Коши-Ньютона, без которых не обходится ни один текст.
Давайте попробуем. Создадим файлик:
Исаак Ньютон
Жозеф Луи Лагранж
Огюст Коши
Даниил Бернулли
Якоб Бернулли
Зигмунд Фрёйд
Альберт Эйнштейн
Сохраним, зададим его имя опции dictionary. Навесим комбинацию на qq (см. ниже). Пишем: Альйй и получаем "Альберт" — единственное совпадение. Ставим пробел и продолжаем: Эйй и получаем "Эйнштейн". Можно добавить в словарь ещё и падежные формы: Эйнштейна, Эйнштейну, Эйнштейном, и тогда можно их выбирать из списка. Удобно.
Переопределить клавишу очень просто:
:imap <F7> <C-X><C-K>
Или не F7, а <TAB>, например. Или что хотите вообще, например йй:
:imap qq <C-X><C-K>
Клавишу или последовательность надо в английской раскладке, конечно. Вместо нотации <C-X> лучше вставить коды через <C-K>: нажимаем <C-K> и затем дважды <C-X>. Потом опять <C-K> и дважды <C-K> (да, всего три раза). Почему-то так это срабатывает лучше. У меня на стареньком ноуте с Убунтой.
Дополнение по <C-N> работает по нескольким источникам. Их можно задать в опции complete, в которой довольно разумное значение по умолчанию: данный файл, другие файлы в каталоге и всё в таком роде, но дополнения по словарю там нет. Можно добавить:
:set complete+=k
Вы можете также использовать распознавание типа файла и загружать подходящий словарь.
au FileType * execute 'setlocal dict+=~/.vim/words/'.&filetype.'.txt'
Это автокоманда, на событие FileType, опция задается локально, имя словаря зависит от типа файла (опция &filetype).
Это удобно для программиста, так как тип файла легко определить по расширению, но ведь Вим может определять тип по содержимому или по форме имени файла. То есть вы можете научить его отличать диссерт от любовной лирики или рецептов коктейлей.
Далее рассмотрим подробнее тезаурус, орфографию и собственное дополнение по своим правилам.
Удачи, коллеги.