СПРАВОЧНИК ПО VIM - Брам Мооленаар


Этот документ содержит сведения, касающиеся особенностей версии Vim  для MS-DOS.

  1. Две версии для MS-DOS
  2. Известные проблемы
  3. Длинные имена файлов
  4. Коды терминалов termcap
  5. Кнопки курсора с Shift
  6. Расширения имён файлов
  7. Использование памяти и ограничения
  8. Символически связанные файлы
  9. Копирование и вклейка в окне DOS

Читайте также общие для Win32 и DOS темы:

Местонахождение файлов
Использование обратной косой черты
Стандартные привязки кнопок
Вывод на экран и цвета
Формат файлов
Команда :cd
Прекращение выполнения команд
Временные файлы
Значение опции 'shell' по умолчанию

Вопросы компиляции описаны в src/INSTALL.pc.

1. Две версии для MS-DOS

На машинах MS-DOS можно использовать две версии Vim:

версия Dos16 Может использоваться на любой системе MS-DOS, использует до 640 Kbyte памяти. Также может запускаться на OS/2, Windows 95 и NT. Не включает некоторые особенности Vim (автокоманды, подсветка синтаксиса и т.п.). Рекомендуется для использования на старых машинах с процессорами ниже 386.
версия Dos32 Для работы требуется процессор не ниже 386 и драйвер |DPMI|, использует всю доступную память. Поддерживает длинные имена файлов и системный буфер обмена, но НЕ на Windows NT. Рекомендуется для MS-DOS, Windows 3.1 и Windows 95.

Под Windows также работают ещё две версии Vim:

консольная версия Win32 Для работы требуется Windows 95 или Windows NT, использует всю доступную память, поддерживает длинные имена файлов и т.д. При работе под Windows 95 имеется ряд проблем. Рекомендуется для Windows NT. См. |os_win32.txt|.
версия Win32 с графическим интерфейсом Требования такие же, как и у консольной версии Win32. Отличие состоит в том, что Vim запускается в собственном окне, а не в консоли. В этой версии доступны полосы прокрутки, меню и т.д. Рекомендуется для Windows 95 и Windows NT. См. |gui-w32|.

Рекомендуется использовать версию Dos32 или Win32. Хотя версия Dos16 и способна редактировать очень длинные файлы, у неё быстро кончается доступная память при внесении больших изменений. Помогает отключение возможности отката: ":set ul=-1". Скорость обновления экрана версии Dos16 самая быстрая из всех версий под DOS и Windows 95; на Windows NT версия Win32 не уступает по скорости обновления экрана версии Dos16.

Для версии Dos32 вам потребуется драйвер DPMI при запуске в MS-DOS. Если у вас Windows или вы установили в системе менеджер памяти, то скорее всего этот драйвер уже имеется. В противном случае, вы получите при запуске сообщение "No DPMI" и тогда вам придётся установить драйвер DPMI. Один из таких драйверов включён в поставку, смотрите файл CSDPMI4B.ZIP. Каждый раз перед запуском Vim запускайте его по команде "cwsdpmi". Вы также можете включить в autoexec.bat строку "cwsdpmi -p" для запуска в резидентном режиме. Последнюю версию "CSDPMI*.ZIP" можно получить по адресу "ftp.neosoft.com/pub/users/s/sandmann".

16-битная версия DOS скомпилирована с минимальными особенностями. Смотрите список включённых особенностей в |+особенности-список| (отмечены символом "T"). Дополнительные особенности можно включить, отредактировав файл feature.h перед компиляцией.

2. Известные проблемы

При использовании SmartDrive (MS-DOS 6.x) с кешированием отложенной записи, то возможна ситуация, при которой Vim будет пытаться создать своп-файл на файловой системе, доступной только для чтения (например, на защищённую от записи дискету). В этом случае вы увидите сообщение

A serious disk error has occurred .., Retry (r)?
(Произошла серьёзная ошибка ... Повторить (r)?)

Здесь ничего нельзя поделать, только убрать защиту от записи на дискете или выключить компьютер. Вам не поможет даже Ctrl-Alt-Del. Проблема на самом деле не в Vim, а в SmartDrive. Во всех остальных случаях SmartDrive работает нормально. Если вам это не нравится, то не используйте кеширование с отложенной записью.

Vim не может читать своп-файлы, которые уже были открыты, если не используется команда "share". Если вы видите предупреждения об останках своп-файлов, включите запуск "share" в config.sys или autoexec.bat (подробнее см. в документации по MSDOS).

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

Версия Dos32 также не может открывать неограниченное количество файлов одновременно. Ограничение зависит от значения FILES в CONFIG.SYS. По умолчанию это значение равняется 15; если вам необходимо редактировать большое количество файлов, то это значение необходимо увеличить. Если значение FILES будет недостаточно высоким, то вы можете сталкиваться со странными ошибками, а команды оболочки могут привести к краху системы!

Версия для Dos32 может работать с длинными именами файлов. При дополнении имени файла будет также показано соответствие для короткой формы имени файла. В любом случае будет использована длинная форма имени. Например, если у вас есть файл с именем "this_is_a_test", короткая форма которого "this_i~1", то команда ":e *1" будет выполнять редактирование файла "this_is_a_test".

Если при использовании версии Dos32 вы сталкиваетесь с проблемами, связанными с DPMI, проверьте config.sys на наличие программ, которые поедают ресурсы. Одна из таких известных программ -- "netx", которая представляется как "NetWare v. 3.26 Workstation shell". Для исправления этой проблемы, замените её на версию 3.32.

Версия Dos32 корректно обращается с аргументами имён файлов, заключёнными в кавычки. Это полезно при редактировании файлов, в имя которых входят пробелы. Например:

vim "program files\accessories\ppp.scp"

Побочным эффектом является то, что из аргумента будут убираться все кавычки, в том числе одиночные. Чтобы этого избежать, используйте символ обратной косой черты перед кавычкой.Например, для редактирования файла "fi'le.txt":

vim fi\'le.txt

3. Длинные имена файлов

Если версия Dos32 запускается под Windows 95, то в ней можно пользоваться длинными имена файлов. По умолчанию эта возможность включена. Если вы хотите отключить эту способность, используйте команду

set LFN=N

Её можно поместить в autoexec.bat.

Замечание: Если на вашей машине есть DJGPP, то у вас, возможно, имеется файл "djgpp.env", в котором содержится строка "LFN=n". В этом случае, для использования длинных имён вам потребуется изменить её на "LFN=Y".

4. Коды терминалов termcap

Если вы хотите использовать другой метод вывода, например, при использовании терминала на порту COM), то установите имя терминала "pcansi". Опции терминала termcap можно настраивать в этом случае по необходимости (см. |терминал-опции|). Обратите внимание, что обычный драйвер ansi.sys от IBM не поддерживает все коды встроенного терминала pcansi. Если вы пользуетесь ansi.sys, то вам потребуется удалить коды t_al и t_dl при помощи команды

:set t_al= t_dl=

В противном случае, экран не будет обновляться корректно. Вместо ansi.sys лучше использовать nansi.sys, nnansi.sys или другие подобные драйвера.

Если вы хотите использовать Vim на терминале, подсоединённом к COM: порту, то отключите опцию 'bioskey'. В противном случае, Vim будет ожидать ввода команд с клавиатуры PC. Учтите, что с отключённой опцией 'bioskey' кнопки CTRL-C и CTRL-P могут работать некорректно.

5. Кнопки курсора с Shift

Вместо комбинаций <CTRL-Left> и <CTRL-Right> пользуйтесь комбинациями <SHIFT-Left> и <SHIFT--Right>. Кнопки <Up> и <Down> не могут быть использованы с клавишами <CTRL> и <SHIFT>.

6. Расширения имён файлов

MS-DOS позволяет использовать только одно расширение в имени файла. Поэтому, при добавлении расширения, символ '.' в оригинальном имени файла заменяется на '_', имя файла усекается до 8 символов, и затем добавляется новое расширение (например, ".swp"). Вот два примера: "test.c" преобразуется в "test_c.bak", "thisisat.est" преобразуется в "thisisat.bak". Чтобы свести к минимуму возникающие при этом проблемы, по умолчанию значением опции 'backupext' является "~" вместо ".bak". В этом случае, имя резервного файла для "thisisat.est" будет "thisisat.es~". Опция 'shortname' недоступна, поскольку она всегда включена.

7. Использование памяти и ограничения

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

Если Vim  выдаёт предупреждение "Не хватает памяти!", то вы должны закончить редактирование. Результат выполнения дальнейших операций по редактированию в этом случае непредсказуем. Установка значения опции 'undolevels' равным 0 позволяет освободить определённое количество памяти. К нехватке памяти почти гарантированно приводит выполнение сложных макросов и сценариев, поскольку для каждой операции требуется запоминать состояние для последующей возможной отмены. Чтобы полностью отключить возможность отмены операций, установите значение опции 'undolevels' в отрицательное значение.

В версии Dos32 во избежание подобных проблем используется расширенная память. Однако, если вы пользуетесь системным буфером обмена, то можете все равно столкнуться с проблемами нехватки памяти, поскольку буфер обмена Windows может общаться с Vim только используя доступную память Dos. Это означает, что максимальное количество текста, который может быть скопирован или вставлен из системного буфера Windows, ограничивается размером доступной памяти Dos на вашей системе.

Возможно, вы захотите максимально увеличить количество доступной памяти Dos, добавив в файл config.sys следующие строки:

DOS=HIGH,UMB
DEVICE=C:\WINDOWS\himem.sys
DEVICE=C:\WINDOWS\emm386.exe RAM

Изменение config.sys таким образом также поможет увеличить количество доступной памяти для версии Dos16.

В версии Dos16 длина строки ограничена примерно 32000 символами. При чтении файла строки разбиваются на части автоматически. Однако, редактирование слишком длинных строк может привести к непредвиденным последствиям.

8. Символически связанные файлы

Вы можете столкнуться с проблемами при редактировании символически связанного файла на файловом сервере Unix NFS.

При записи файла Vim не имеет возможности записать "сквозь" символическую связь. Вместо этого, редактор удаляет ссылку на файл и создаёт на её месте новый файл.

На Unix Vim знает о связях (как символических, так и жёстких). При редактировании выполняется резервное копирование оригинального файла и затем происходит перезапись оригинального файла. На других системах оригинальный файл переименовывается и происходит запись нового файла. Лишь флаги доступа сохраняются такими же, как и у оригинала. Это не будет работать правильно на файловой системе, смонтированной на NFS, где существуют связи и другие подобные вещи. Единственный способ побороть это в текущей версии - не создавать резервной копии, при помощи команды ":set nobackup nowritebackup" |'writebackup'|

9. Копирование и вклейка в окне DOS

32-битная версия позволяет напрямую работать с системным буфером обмена Windows. Для этого пользуйтесь регистром "*. Таким образом можно копировать большие объёмы текста, но система должна быть способна выделить для этого текста требуемое количество памяти, см. |msdos-ограничения_буфера_обмена|. При переносе текста из одного Vim в другой также передаётся тип выделения (символьный, строковый или блоковый).

В других версиях можно использовать следующий приём (из сообщения John Velman <Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.; в группу новостей comp.editors):

Как копировать и вклеивать текст из Vim и в Vim в окне DOS:

  1. Чтобы Vim  мог работать в окне, вместо полного экрана, нажмите alt+enter. Эта комбинация позволяет переключаться между полноэкранным и оконным режимом.

    Замечание: В Windows 95 необходимо отключить "Быструю вклейку"! Для этого в настройках окна MS-DOS найдите соответствующую галочку и убедитесь, что эта функция отключена (MS-DOS Prompt/Misc/Fast pasting). Для того чтобы эти изменения были постоянными, измените эти настройки для программы "\windows\system\conagent.exe" (по сведениям Philip Nelson, мной не проверялось).

  2. Для вклейки информации _в_ Vim, поместите Vim в режим Вставки.
  3. Поместите необходимый текст в системный буфер обмена.
  4. Перейдите в контрольное меню окна Vim (в верхнем левом углу). Вместо мыши для этого можно пользоваться сочетанием alt+spacebar.
  5. В меню выберите пункт "Редактировать"
  6. В подменю выберите пункт "Вставить".

Чтобы скопировать что-либо из окна Vim в системный буфер обмена:

  1. Перейдите в контрольное меню окна Vim (в верхнем левом углу).
  2. В меню выберите пункт "Редактировать"
  3. Выберите пункт "Выделить"
  4. При помощи кнопок курсора или мыши, выделите часть окна Vim, которую вы хотите скопировать в системный буфер. При использовании клавиатуры для расширения области выделения пользуйтесь сочетанием кнопки shift и кнопок управления курсором.
  5. После того, как необходимая область окна выделена, нажмите enter. Выбранный текст помещается в системный буфер обмена. Область выделения может быть любой прямоугольной областью экрана, например, колонки 4-25 в строках 7-10. Область выделения может включать любой фрагмент окна Vim: например, вывод команды :!dir.