Кодировки

    Тут на самом деле всё просто. Храните все тексты в Unicode и будет вам счастье (при условии правильно установленной опции 'encoding' конечно ;) В ином случае (у вас куча текстов в национальных кодировках) придется дочитать топик до конца :)

    За кодировки в Vim отвечают следующие опции:

    'encoding' — кодировка, в которой Vim хранит все данные. То есть текст буфферов, строки в выражениях, содержимое регистров и т.д. По-умолчанию это либо «latin1» либо что-то, соответствующее переменной окружения $LANG. Если вы не пользуетесь такой штукой, как langmap, настоятельно рекомендуется установить 'encoding' в «utf-8». Это позволит редактировать любые тексты, в том числе и сохраненные в одной из Unicode кодировок без потерь.

    'fileencoding' — кодировка файла в текущем буфере. Она либо определяется автоматически (для этого используется опция 'fileencodings', о ней ниже), либо задаётся явно при открытии файла с помощью модификатора ++enc. Например, чтобы открыть файл foo.txt в кодировке KOI8-R нужно написать
    :e ++enc=koi8-r foo.txt
    и нажать Enter. А теперь внимание, тонкий момент. Если вы откроете файл без модификатора ++enc опция 'fileencoding' будет установлена Vim'ом в то, что он посчитает нужным. Например, он может неправильно определить кодировку и установить 'fileencoding' в «latin1». Если вы после этого напишете
    :set fileencoding=koi8-r
    Vim не переоткроет файл в этой кодировке, он перекодирует его из текущей в KOI8-R! Для открытия файла в правильной кодировке обязательно используйте ++enc. А вот если вы хотите сохранить файл в кодировке, отличной от той, в которой он записан — меняйте опцию 'fileencoding'. Например, у вас есть файл foo.txt в кодировке KOI8-R, а вы хотите сохранить его в CP-1251. Для этого, вы открываете его
    :e ++enc=koi8-r foo.txt
    меняете кодировку
    :set fileencoding=cp-1251
    и сохраняете
    :w
    Последние два действия можно объединить в одно применив известный нам модификатор ++enc вот так
    :w ++enc=cp-1251

    'fileencodings' — это список кодировок, которые Vim будет перебирать при открытии файла. Про имена кодировок читать в :help encoding-names.

    Есть ещё опция 'termencoding', которая отвечает за кодировку терминала, но в большинстве случаев вам не придется её настраивать.

    Similar posts

    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 17

      0
      А можно все советы, как то оформить ввиде 1-2 страниц A4, чтобы на стеночку повесить типа шпорки по пользованию Vim.
        +2
        Всё это уже давно сделано, погуглите по "Vim cheatsheet".
        +1
        Как еще одно дополнение к данной фишке - в vim можно создавать свои меню и если добавить в .vimrc следующие строки:
        set wildmenu
        set wcm=<Tab>
        menu Encoding.koi8-r :e ++enc=koi8-r ++ff=unix<CR>
        menu Encoding.windows-1251 :e ++enc=cp1251 ++ff=dos<CR>
        menu Encoding.cp866 :e ++enc=cp866 ++ff=dos<CR>
        menu Encoding.utf-8 :e ++enc=utf8 <CR>
        menu Encoding.koi8-u :e ++enc=koi8-u ++ff=unix<CR>
        map <F8> :emenu Encoding.<TAB>


        То по нажатию F8 можно будет выбрать из меню, в какой кодировке редактировать текущий файл. По-моему, очень удобная фича.
          0
          Convert file encoding
          set wildmenu
          set wcm=
          menu SetEnc.cp1251 :set fenc=cp1251
          menu SetEnc.koi8-r :set fenc=koi8-r
          menu SetEnc.cp866 :set fenc=ibm866
          menu SetEnc.utf-8 :set fenc=utf-8
          map :emenu SetEnc.


          Ну, суть ясна :)
            0
            Блин. Поел парсер. Shift+F8 - конвертация.
          0
          Можно еще написать вот такой код в .vimrc, для авто включения unicode, если система его поддерживает (полезно при переносе одного и того же конфига на разные системы):

          if has("multi_byte")
          if &termencoding == ""
          let &termencoding = &encoding
          endif
          set encoding=utf-8
          setglobal fileencoding=utf-8 bomb
          set fileencodings=utf-8,cp1251,koi8-r,latin1
          set fileformats=dos,unix,mac
          endif
            0
            :w ++enc=cp-1251, АФАИК, не поставит fileencoding, так что надо будет каждый раз писать этот опцион.

            А если вы все проекты делате в 1251, но по случаю недавнего наступления 21 века решили понемногу переползать на UTF-8, то можно слить расширение localvimrc.vim и в корне своих современных проектов в файле .lvimrc вписать:

            set fileencodings=utf-8,default
              0
              Для работы с кодировками есть полезный плагин "FencView.vim : Autodetect multiple encodings"
              http://www.vim.org/scripts/script.php?script_id=1708
                0
                А как открыть файл в нужной кодировке прямо из терминала, а не из запущенного Vim?
                  0
                  Например так:
                  vim "+e ++enc=needed_enc" filename
                  Такая команда запустит вим, откроет файл, а после открытия переоткроет ещё раз в кодировке needed_enc. Немножко хак, но работает. Возможно существует и более красивое решение.
                  0
                  Как в windows настроить gvim на работу с utf-8? Что ли конвертировать все файлы документации?
                  Или как хотя бы сохранять файлы в utf?
                    0
                    Я ж вроде всё описал, что именно не понятно?

                    Устанавливаем в .vimrc set encoding=utf-8. Перезапускаем Vim или делаем :source path/to/.vimrc чтобы изменения применились.

                    Открываем файл, если кодировка определилась неверно, переоткрываем, указывая кодировку явно: :e ++enc=koi8-r

                    Меняем кодировку :set fileencoding=utf-8 (можно сократить до :set fenc=utf8)

                    Сохраняем :w
                      0
                      Когда поэксперементировав с командами, пересохранить в utf-8 мне удалось.
                      В .vimrc set encoding=utf-8 установил, и кодировку для файлов поставил utf-8. Все прекрасно работает, но gvim не понимает:

                        0
                        Не пропарсилась картинка, и не хочет, бросаю ссылку:
                        habrastorage.org/storage/70770ec9/33cec131/5e8e92e3/b9cf9c63.jpg
                          0
                          Так это в интерфейсе только косяки, файлы нормально открываются?

                          Похоже, что Language for non-Unicode programs поставлен на что-то некириллическое. Если не нужен русскоязычный интерфейс в gVim поставьте переменную окружения LANG=en. Ну или читать :help multilang.
                            0
                            Когда прописал set encoding=utf-8 то косяки только в интерфейсе. Но если не ставить utf-8 по-умолчанию, то каждый файл приходиться открывать явно указывая кодировку, и потом явно указывать в какой кодировке сохранять.

                            Русскоязычный интерфейс не нужен. Vim ругается на LANG=en в .vimrc, пойду читать multilang.
                              0
                              LANG=en надо в окружении выставлять. Если в .vimrc, то это будет выглядеть как :let $LANG=en, только делать это нужно как можно ближе к началу файла.

                              Про автоматическое определение кодировок читать :help 'fileencodings'.

                  Only users with full accounts can post comments. Log in, please.