a humble software engineer
0,0
рейтинг
13 июня 2013 в 18:15

Разработка → Настройка поддержки русского языка в GVim (windows) из песочницы tutorial

VIM*


Привет, Хабр!

Хочу поделиться с сообществом опытом допиливания поддержки русского языка в GVim под Windows 7. GVim — очень мощный текстовый редактор, но в текущей Windows-реализации без тонких настроек он выглядит гадким утёнком по сравнению c GVim под Linux или MacVim.

Что будет в данной статье? Исправление локализации для Unicode в Windows-версии GVim, настройка переключения раскладки клавиатуры, включение проверки орфографии. Предполагается, что вы владеете азами работы в Vim. На хабре уже есть статья, затрагивающая тему поддержки русского языка, и хотя она всё ещё остаётся полезной, но на данный момент немного устарела.

В принципе русский язык в интерфейсе Windows версии GVim работает «из коробки», но есть небольшой нюанс: при выставленном Unicode редактор не отображает кириллицу в сообщениях и меню, поэтому либо приходится переключать GVim на английскую локализацию, либо мириться с этими «кракозябрами» в меню и «ять»-ями в приветствии программы. И это в наше время, когда подавляющие большинство программ и даже стандартный блокнот в Windows по умолчанию работает с Unicode текстом! Ситуация усугубляется ещё тем, что в сети просто нет руководств, как исправить эту проблему. Словно прекрасная девушка, танцующая красивый танец и громко пускающая газы при каждом новом па.

Исправим же это недоразумение!

Исправление отображения русского языка в интерфейсе GVim


Сначала починим отображение внутренних сообщений на русском языке (текст на экране приветствия, информационные сообщения, сообщения об ошибках).


(Великий и ужасный GVim «из коробки» при переходе на UTF-8)

Создаём файл vim.mo из utf-версии русской локализации po-файла (формат файла GNU gettext для поддержки мультиязычности). В windows для создания mo-файла я использовал свободную программу Poedit. Помещаем созданный mo-файл в папку $VIMRUNTIME/lang/ru_RU.UTF-8/LC_MESSAGES. Если у вас нет папок ru_RU.UTF-8 и LC_MESSAGES (по-умолчанию в windows-версии GVim'а их нет), создаём их. Если вам лениво создавать и править файлы, можете скачать мои: mo-файл для версии 7.4, mo-файл для версии 7.3, файл локализации меню. Вот теперь у нас есть все необходимые файлы для поддержки UTF-8.

Теперь надо разобраться с меню. Возникает резонный вопрос: почему меню не исправляется корректным mo-файлом? Всё очень просто — меню в GVim реализуется с помощью плагинов, поэтому для исправления кодировки надо исправлять рантайм-файл. Заходим в папку $VIMRUNTIME/lang, создаём дубликат файла menu_ru_ru.vim переименовываем его в menu_ru_ru.utf-8.vim и комментируем или удаляем 20-ую строку:

scriptencoding utf-8


Внимательный читатель при поиске файла, скорее всего, заметит, что там есть некий похожий файл, а именно menu_ru.utf-8.vim (без одной «ru»). Мы его не трогаем, потому что его использует GVim по умолчанию (в Windows 7) и если его исправить то при необходимости возврата на cp1251 мы получим «кракозябры».

Дело осталось за малым: надо установить в системе переменную окружения LANG. В создании новой переменной нет ничего сложного, но на всякий случай привожу инструкцию. Заходим в настройки системы Win+Break -> дополнительные параметры системы -> Дополнительно -> Переменные среды -> Создать… Вводим имя переменной LANG, значение ru_RU.UTF-8.
Если по каким-то причинам вы не можете создавать переменные окружения, тогда можно добавить несколько строк в _vimrc:

" Отображение кириллицы во внутренних сообщениях программы
lan mes ru_RU.UTF-8

" Отображение кириллицы в меню
source $VIMRUNTIME/delmenu.vim
set langmenu=ru_RU.UTF-8
source $VIMRUNTIME/menu.vim


Если вы ещё не включили Unicode, самое время сделать это. Открываем _vimrc и добавляем строку set encoding=utf-8. Теперь при запуске GVIM с установленным UTF-8 все сообщения будут отображаться на нормальном русском языке.


(Великий и ужасный GVim после внесения исправлений)

Настройка переключения раскладки в GVim


Зачем что-то делать с переключением раскладки и отказываться от любимого Ctrl+Shift / Alt+Shift? Ответ прост — это не удобно.

Простой пример: пусть мы пишем что-нибудь на русском языке в GVim, предварительно клацнув Alt+Shift, и вдруг увидели ошибку в начале предыдущего абзаца. В этом случае нам надо нажать «ESC» и "{", чтобы перейти к началу прошлого абзаца для внесения исправлений, но это не сработает, так как у нас включена русская раскладка и вместо фигурной скобки мы отправим редактору твёрдый знак. То есть после выхода из режима вставки нам надо снова переключаться на английскую раскладку, чтобы заработали стандартные команды редактора. GVim предоставляет собственный механизм переключения раскладок, чтобы избежать этого неудобства. Для того, чтобы его включить добавим в _vimrc строки:

" Включение поддержки русского языка
set keymap=russian-jcukenwin
set iminsert=0
set imsearch=0
highlight lCursor guifg=NONE guibg=Cyan


После внесения изменений при нажатии Ctrl+^ у нас будет переключаться раскладка, при этом в режиме ввода русского языка курсор будет гореть синим цветом. (За разъяснениям, что делает каждая из команд обращайтесь к статье, которая упоминалась в самом начале)


(Тюнингованный GVim в режиме ввода русского языка)

Также совсем недавно появился замечательный плагин, позволяющий упростить работу с несколькими языками.

Настройка проверки орфографии в GVim


Проверка орфографии включается с помощью команды:

:setlocal spell spelllang=ru_ru,en_us


При первом запуске из интернета загружаются все необходимые словари, после загрузки сразу включается проверка орфографии.



Ранее для корректной проверки слов, содержащих «ё», необходимо было дополнительно устанавлить словарь ru_yo, сейчас достаточно одного ru_ru. Но после подключения ru_yo, слова в которых «ё» было заменено на «е» будут подчёркиваться синим цветом.



Отключается проверка орфографии с помощью команды:

:setlocal spell spelllang=


Вуаля! Теперь можно наслаждаться полноценной поддержкой русского языка в GVim.

Надеюсь, что статья вышла простой для понимания и окажется кому-нибудь полезной.

P. S. Запостил баг о необходимости перевода windows-версии GVim с дефолтной cp1251 на utf-8, пока никаких комментариев не было; думаю, что в готовящимся Vim 7.4 UTF-8 займет своё законное место.

P. P. S. Если кому-то понравилась моя иллюстрация, можете забирать (лицензия cc-by-sa 3.0).
Александр Мышов @Myshov
карма
95,2
рейтинг 0,0
a humble software engineer
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Разработка

Комментарии (4)

  • 0
    По-моему, GVim без конфига в любой операционке выглядит как гадкий утёнок. С unicode проблемы не встречал, проверку орфографии и прочие плюшки добавляю в конфиг сразу после установки, как и в Linux. Переключалку раскладки запилил свою, чтоб не привыкать к новому хоткею.
    • 0
      Согласен с вами, но если под Mac OS X и Linux он выглядит ещё более менее, то в Windows он особенно выделяется вырвиглазными шрифтами. С Unicode проблемы только в Windows. За ваш плагин отдельное спасибо, уже рассказал про него в топике.
  • +1
    ИМХО, даже с Cygwin или MSYS посикс-стэк под виндой дико ущербен… После многих попытом этим пользоваться — плюнул, поставил виртуалку с Ubuntu Server и наслаждаюсь жизнью с нормальной консолью, tmux'ом и всеми плюшками.
  • +1
    Спасибо за веселую иллюстрацию и интересную статью. Всем консольный vim.
    :wq

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