РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ VIM - Брам Мооленаар

Vim может выводить сообщения на нескольких языках. Эта глава объясняет как изменить язык вывода сообщений. Кроме того, здесь поясняются различные операции, необходимые при работе с файлами на различных языках.

45.1    Язык сообщений
45.2    Язык меню
45.3    Использование других кодировок
45.4    Редактирование файлов в другой кодировке
45.5    Ввод текста на других языках

Следующая глава: Установка Vim
Предыдущая глава: Собственные правила подсветки синтаксиса
Содержание: Руководство пользователя Vim


45.1 Язык сообщений

При запуске Vim, он сверяется с окружением, чтобы выяснить каким языком вы пользуетесь. Чаще всего это ему удаётся, и вы будете получать сообщения на своём языке (если они, конечно, переведены). Чтобы посмотреть текущий язык, воспользуйтесь командой:

:language

Если команда отвечает "C", то используется язык по умолчанию, то есть английский.

Замечание: Использование нескольких языков доступно только в том случае, если Vim был скомпилирован с поддержкой других языков. Для проверки введите команду ":version" и проверьте наличие особенностей "+gettext" и "+multi_lang". Если эти особенности включены, то Vim поддерживает другие языки. Если вы увидите в выводе команды "-gettext" или "-multi_lang", то вам потребуется найти другой Vim.

Что если вы хотите использовать сообщения на другом языке? Возможно несколько способов осуществить желаемое, в зависимости от возможностей вашей системы.

Первый способ требует установки окружения в соответствии с желаемым языком до запуска Vim. Например, на Unix:

env LANG=de_DE.ISO_8859-1  vim

Это работает только в том случае, когда язык доступен на вашей системе. Преимущество этого способа в том, что все сообщения графического интерфейса и библиотеки будут использовать правильные настройки языка. К сожалению, установку переменной окружения необходимо делать до запуска Vim. Если вы хотите изменить язык сообщений во время работы Vim, то можно использовать второй метод:

:language fr_FR.ISO_8859-1

Этот способ позволяет попробовать разные названия языка. Если язык не поддерживается на этой системе, то вы получите сообщение об ошибке. Если сообщения не переведены на этот язык, то вы не получите сообщений об ошибке, Vim просто будет пользоваться английским языком.

Чтобы посмотреть, какие языки поддерживаются на вашей системе, найдите каталог, в котором они расположены. На моей системе это "/usr/share/locale". На некоторых системах это "/usr/lib/locale". Подробнее читайте в справочнике man, страница setlocale.

Будьте внимательны: имя языка необходимо вводить в точности так, как оно указано. Важен регистр символов, и следите за тем, чтобы не перепутать символы '-' и '_'.

Вы можете настраивать язык отдельно для сообщений, редактируемого текста и для формата вывода времени. См. |:language|.

КАК СДЕЛАТЬ ПЕРЕВОД СООБЩЕНИЙ

Если сообщения ещё не переведены на ваш язык, то вы можете написать их самостоятельно. Для этого найдите исходный текст Vim и пакет GNU gettext. Дальнейшие инструкции содержатся в каталоге src/po/README.txt в архиве с исходным кодом Vim.

Перевод выполнить не очень сложно, для этого не требуется быть программистом. Конечно, вы должны хорошо знать английский и тот язык, на который должны быть переведены сообщения.

Если вы будете удовлетворены переводом, то подумайте о том, чтобы поделиться им с другими. Загрузите перевод на сайт vim-online (https://vim.sf.net) или отправьте перевод координатору проекта Vim <Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.;. Или сделайте и то, и то.


45.2 Язык меню

Стандартный язык меню -- английский. Чтобы иметь возможность пользоваться своим языком в меню, они должны быть переведены. Обычно, перевод сообщений происходит автоматически, если окружение настроено соответствующим образом, в точности так же, как и с выбором языка для сообщений. Для этого вам не требуется предпринимать каких-либо дополнительных усилий. Всё это, конечно, при условии, что меню переведены на ваш язык.

Предположим, вы находитесь в Германии, ваш язык -- немецкий, но вы предпочитаете видеть в меню "File" вместо "Datei". Чтобы переключиться на использование английских меню, введите команду:

:set langmenu=none

Вы также можете указать язык:

:set langmenu=nl_NL.ISO_8859-1

Как и в предыдущем разделе, важно не перепутать "-" и "_". Однако, в этом случае различия в регистре не имеют значения.

Опция 'langmenu' должна быть настроена до загрузки меню. После загрузки меню изменение значения опции 'langmenu' не оказывают прямого действия. Поэтому, поместите команду установки языка меню в ваш файл vimrc.

Если вам действительно необходимо поменять язык меню на ходу, то это можно сделать следующим способом:

:source $VIMRUNTIME/delmenu.vim
:set langmenu=de_DE.ISO_8859-1
:source $VIMRUNTIME/menu.vim

При этом все меню, которые вы определили сами будут удалены и вам придётся переопределять их заново.

КАК СДЕЛАТЬ ПЕРЕВОД МЕНЮ

Чтобы посмотреть, для каких языков существуют переводы меню, взгляните в каталог:

$VIMRUNTIME/lang ~

Файлы с переводом текста меню называются menu_{язык}.vim. Если вашего языка нет, то вы можете сделать собственный перевод. Самый простой способ это сделать - скопировать файл для одного из уже существующих языков и внести необходимые изменения.

Прежде всего вам потребуется выяснить имя вашего языка с помощью команды ":language". Пользуйтесь этим именем, но набирайте все буквы строчными. Затем скопируйте файл в каталог с вашими настройками Vim, в начале списка, хранящегося в опции 'runtimepath'. Например, на Unix можно пользоваться командой:

:!cp $VIMRUNTIME/lang/menu_ko_kr.euckr.vim \
~/.vim/lang/menu_nl_be.iso_8859-1.vim

Ряд полезных советов для переводчиков содержится в файле "$VIMRUNTIME/lang/README.txt".


45.3 Использование других кодировок

Vim догадывается о том, что ваши файлы представляют собой текст в кодировке для вашего языка. Для многих европейских языков такой кодировкой является "latin1". В этом случае каждый байт представляет собой один символ. Иными словами, у вас есть возможность выбора из 256 символов. Для восточных языков этого явно недостаточно, и в них чаще всего используется двухбайтовое кодирование символов, предоставляя возможность выбора из более чем десятка тысяч символов. Тем не менее, этого также недостаточно в тех случаях, когда текст набран на нескольких языках. На помощь приходит Unicode. Unicode был создан специально с той целью, чтобы включить все возможные символы во многих языках мира. Это "кодировка, которая заменяет все остальные кодировки". К сожалению, Unicode еще пока недостаточно распространён.

Vim  поддерживает все три типа кодировок. С некоторыми ограничениями вы сможете пользоваться ими даже в тех случаях, когда ваше окружение настроено на использование языка, отличного от используемого в тексте.

Так или иначе, если вы редактируете файлы только на своём языке в родной кодировке, вам не потребуется предпринимать какие-либо дополнительные действия: настройки по умолчанию должны прекрасно справляться со своей задачей. Приведённая в этом разделе информация необходима лишь тогда, когда вы сталкиваетесь с редактированием файлов на других языках.

Замечание: Использование различных кодировок работает только в тех версиях Vim, которые собраны с соответствующей возможностью. Обратитесь к выводу команды ":version" и проверьте особенность "+multi_byte". Если эта особенность выключена, т.е. в выводе указано "-multi_byte", то вам потребуется найти другой Vim.

ИСПОЛЬЗОВАНИЕ UNICODE В ГРАФИЧЕСКОМ ИНТЕРФЕЙСЕ

Что хорошо в Unicode, так это способность преобразовывать тексты в других кодировках в Unicode и обратно без потери информации. Если Vim будет использовать Unicode в качестве внутренней кодировки, то вы сможете редактировать файлы в любой кодировке.

К сожалению, количество систем, которые поддерживают Unicode, до сих пор ограничено. Поэтому, ваш язык скорее всего не использует Unicode. Чтобы внутренней кодировкой Vim был Unicode, вам потребуется сообщить ему об этом и объяснить используемый при этом способ взаимодействия с системой.

Начнём с версии Vim с графическим интерфейсом, которая позволяет показывать символы Unicode. Для этого потребуется ввести команды:

:set encoding=utf-8
:set guifont=-misc-fixed-medium-r-normal--18-120-100-100-c-90-iso10646-1

Опция 'encoding' указывает Vim на используемую вами кодировку символов. Это относится к тексту в буферах (файлы, которые вы редактируете в Vim), регистрам, файлам сценариев Vim и т.д. Опция 'encoding' это настройка для всех внутренних систем редактора.

Наш пример предполагает, что ваша система имеет указанный шрифт. Имя, указанное в нашем примере, относится к X Window System. Этот шрифт содержится в программном пакете, который позволяет xterm поддерживать Unicode. Если у вас нет этого шрифта, то его можно загрузить из интернета по адресу: https://www.cl.cam.ac.uk/~mgk25/download/ucs-fonts.tar.gz

В MS-Windows некоторые шрифты также имеют определённый набор символов Unicode. Попробуйте использовать шрифт "Courier New". Вы можете воспользоваться меню Редактировать/Выбор шрифта... для экспериментов с фонтами. Учтите, что в Vim можно использовать только моноширинные шрифты. Пример:

:set guifont=courier_new:h12

Если у вас не получается, попробуйте загрузить пакет с дополнительными шрифтами. Если только опять Microsoft не перепрятала этот пакет, то его можно найти по этому адресу: https://www.microsoft.com/typography/fontpack/default.htm

Теперь вам нужно указать Vim, что нужно использовать для всех внутренних целей Unicode и отображать текст с использованием шрифта Unicode. Дело в том, что вводимые вами символы поступают в Vim в кодировке для вашего языка. Vim должен конвертировать их в Unicode. Кодировка, из которой Vim переводит символы, указывается с помощью опции 'termencoding'. Настроить эти опции можно так:

:let &termencoding = &encoding
:set encoding=utf-8

Это позволяет присвоить старое значение опции 'encoding' опции 'termencoding' до установки значения опции 'encoding' равным utf-8. Попробуйте, получится ли это на вашей системе. Особенно хорошо это должно работать в тех случаях, когда вы пользуетесь методом ввода для восточного языка или когда вы редактируете текст в кодировке Unicode.

ИСПОЛЬЗОВАНИЕ UNICODE В ТЕРМИНАЛЕ С ПОДДЕРЖКОЙ UNICODE

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

Прежде всего убедитесь, что ваш xterm скомпилирован с поддержкой Unicode. Чтобы это проверить, обратитесь к разделу |UTF8-xterm| и, если потребуется, то перекомпилируйте xterm.

Запустите xterm с аргументом "-u8". Вам также может потребоваться указать необходимый фонт. Например:

xterm -u8 -fn -misc-fixed-medium-r-normal--18-120-100-100-c-90-iso10646-1

Теперь вы можете запустить в терминале Vim. Установите 'encoding' равным "utf-8", как и раннее. Это всё, что вам потребуется.

ИСПОЛЬЗОВАНИЕ UNICODE В ОБЫЧНОМ ТЕРМИНАЛЕ

Предположим, что вам нужно работать с файлами в формате Unicode, но ваш терминал не поддерживает Unicode. Vim позволяет делать и это, но символы, которые не могу быть показаны на вашем терминале, отображаться не будут. Общий вид текста будет сохранён.

:let &termencoding = &encoding
:set encoding=utf-8

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

Для этого должно быть возможно преобразование между 'termencoding' и 'encoding'. Vim всегда способен выполнять перекодировку из latin1 в Unicode. Для других преобразований Vim должен быть скомпилирован с особенностью |+iconv|.

Попробуйте редактировать файл с символами Unicode. Обратите внимание, что на месте тех символов, которые не могут быть отображены на вашем терминале, Vim помещает знак вопроса (или символ подчёркивания, или ещё какой-либо символ). Подведите курсор к такому знаку вопроса и введите команду:

ga

Vim покажет код этого символа в нижней строке. Это должно дать вам представление о том, что это за символ. Вы можете, например, посмотреть этот символ в таблице Unicode. Если вам больше нечем заняться, то можете просмотреть так весь файл.

Замечание: Поскольку 'encoding' используется для текста внутри Vim, то изменение этого значения приведёт к тому, что весь не-ASCII текст будет изменён. Вы заметите это также при использовании регистров и файла 'viminfo', например в истории шаблонов поиска. Поэтому, рекомендуется настроить опцию 'encoding' в файле vimrc и оставить её в покое.


45.4 Редактирование файлов в другой кодировке

Предположим, вы настроили Vim для использования Unicode и хотите редактировать файл, который содержит 16-битный Unicode. Вроде бы все просто? Однако, Vim использует в качестве внутренней кодировки utf-8, поэтому 16-битная кодировка нуждается в преобразовании. Иными словами, существует различие между набором символов (Unicode) и кодировкой (utf-8 или 16-бит).

Vim будет пытаться определить кодировку файла, с которым вы работаете. При этом он пользуется кодировками, указанными в опции 'fileencodings'. При использовании Unicode значением по умолчанию является "ucs-bom,utf-8,latin1". Это означает, что Vim проверяет файл на соответствие одной из следующих кодировок:

ucs-bom Файл должен начинаться с отметки порядка байта (Byte Order Mark, BOM). Это позволяет определять 16-битные, 32-битные и utf-8 кодировки Unicode.
utf-8 utf-8 Unicode. Эта установка отвергается, если последовательность байтов недопустима для utf-8.
latin1 Старая добрая 8-битная кодировка, работает во всех случаях.

Когда вы начинаете редактирование 16-битного файла Unicode, в котором есть BOM, то Vim это определит и преобразует файл в кодировку utf-8 при чтении. Опция 'fileencoding' (без s на конце) будет установлена в определённое редактором значение. В данном случае это будет "ucs-2le": Unicode, двухбайтная кодировка, little-endian. Этот формат наиболее популярен в MS-Windows, например в файлах реестра.

При записи файла Vim сравнивает 'fileencoding' и 'encoding'. Если они отличаются, то текст будет преобразован назад при записи.

Пустое значение 'fileencoding' означает, что преобразования выполняться не будут. В этом случае предполагается, что кодировка текста указана в 'encoding'.

Если вам не нравится значение 'fileencodings' по умолчанию, то укажите в нём список тех кодировок, которые должен пытаться определить Vim. Следующее значение в списке используется только тогда, когда предыдущее не работает. Поэтому нельзя помещать "latin1" в начало списка, ведь эта кодировка всегда будет работать. Вот пример для японского языка, в тех случаях, когда в файле нет BOM и файл не является текстом с кодировкой utf-8:

:set fileencodings=ucs-bom,utf-8,sjis

См. список кодировок в справочнике, раздел |кодировка-значения|. Также, в зависимости от доступных на вашей системе преобразований, могут работать и другие значения.

НАСИЛЬНАЯ УСТАНОВКА КОДИРОВКИ

Если автоматическое определение кодировки не срабатывает, то вы должны вручную указать Vim, в какой кодировке записан файл. Пример:

:edit ++enc=koi8-r russian.txt

Аргумент "++enc" сообщает имя кодировки, которая будет использоваться редактором только для редактирования данного файла. Vim преобразует файл из указанной кодировки, в данном случае из кодировки koi8-r, в кодировку, указанную в 'encoding'. Кроме того, нужное значение будет присвоено и опции 'fileencoding', чтобы при записи файла было произведено обратное преобразование.

Такой же в точности аргумент можно использовать и при записи файла. Вы можете преобразовать файл из одной кодировки в другую с помощью Vim. Например:

:write ++enc=utf-8 russian.txt

Замечание: Преобразование может вести к потере информации. Преобразование из какой-либо кодировки в Unicode и обратно почти не обнаруживает такой проблемы, если только в тексте не содержатся символы, которых нет в той или иной кодировке. Преобразование из Unicode в другие кодировки часто приводит к потере информации в тех случаях, когда в файле представлено несколько языков.


45.5 Ввод текста на других языках

Клавиатура компьютера обычно имеет сто с небольшим клавиш. В некоторых языках имеются тысячи символов, в Unicode их десятки тысяч. Как можно вводить все эти символы?

Прежде всего, если вы используете совсем немного специальных символов, можно использовать диграфы. Подробнее об этом читайте в 24.9 Диграфы.

Если вы набираете текст на языке, который использует намного больше символов, то вам потребуется использование так называемого Метода Ввода (Input Method, IM). Для этого вам придётся изучить каким образом нажатие кнопок преобразуется в символы в том или ином методе ввода. Если вам требуется использование метода ввода, то он скорее всего уже есть в вашей системе. Метод ввода должен работать в Vim так же, как и в любой другой программе. Подробности смотрите в соответствующих разделах справочника: |mbyte-XIM| для X Window System и |mbyte-IME| для MS-Windows.

РАСКЛАДКИ КЛАВИШ

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

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

:set keymap=hebrew

Vim постарается найти требуемый файл с раскладкой. Это зависит от значения опции 'encoding'. Если соответствующий файл не найден, то вы увидите сообщение об ошибке.

Теперь вы можете вводить текст на иврите в режиме вставки. В Обычном режиме и при наборе ":"-команды Vim автоматически переключается на английский. Для переключения между ивритом и английским можно использовать команду:

CTRL-^

Это работает только в режиме вставки и в Командном режиме. В Обычном режиме эта команда выполняет совершенно иную функцию (переходит к соседнему файлу).

Использование раскладки клавиатуры отражается в режимном сообщении (если у вас включена опция 'showmode'. В версии Vim с графическим интерфейсом использование раскладки клавиш отражается другим цветом курсора.

Вы также можете настраивать применение раскладки с помощью опций 'iminsert' и 'imsearch'.

Для просмотра списка раскладок используйте команду:

:lmap

Чтобы узнать какие раскладки клавиатуры доступны, используйте в графическом интерфейсе меню Редактировать/Раскладка клавиатуры. В консоли используйте команду:

:echo globpath(&rtp, "keymap/*.vim")
КАК СДЕЛАТЬ РАСКЛАДКУ КЛАВИАТУРЫ

Вы можете создать собственную раскладку клавиатуры. Это не очень сложно. Используйте в качестве примера файл раскладки, похожий на ваш язык. Скопируйте его в каталог "keymap" внутри каталога с файлами настроек Vim. Например, на Unix это может быть каталог "~/.vim/keymap".

Имя файла с раскладкой клавиатуры должно выглядеть так:

keymap/{имя}.vim ~

или

keymap/{имя}_{кодировка}.vim ~

{имя} это имя раскладки. Выбирайте подходящее имя, которое сразу показывает, о чём идёт речь, но в то же время отличное от существующих файлов раскладки (если только вы не хотите заменить уже существующий файл раскладки). {имя} не может содержать символ подчёркивания. При желании можно добавить указание используемой кодировки. Например:

keymap/hebrew.vim ~
keymap/hebrew_utf-8.vim ~

Содержание файла говорит само за себя. Взгляните на файлы раскладок, включённые в комплект поставки Vim. Подробнее смотрите в разделе |mbyte-раскладка_клавиатуры|.

ПОСЛЕДНЯЯ НАДЕЖДА

Если все остальные методы не увенчались успехом, то вы можете вводить любой символ с помощью CTRL-V:

кодировка ввод диапазон символов
8-бит CTRL-V 123 десятичные 0-255
8-бит CTRL-V x a1 шестнадцатеричные 00-ff
16-бит CTRL-V u 013b шестнадцатеричные 0000-ffff
31-бит CTRL-V U 001303a4 шестнадцатеричные 00000000-7fffffff

Не вводите пробелы. Подробнее см. в |i_CTRL-V_цифра|.

 


 

Следующая глава: Установка Vim
Авторские права: см. Авторские права