СПРАВОЧНИК ПО VIM - Джордж Рейлли


В этом файле документированы уникальные особенности версии Vim для Win32.

Версия Vim для Win32 работает как на Windows NT, так и на Windows 95. Имеются как консольная версия, так и версия с графическим интерфейсом. Также имеется версия с графическим интерфейсом для использования в подсистеме Win32s в Windows 3.1[1]. Вместо этого можно также использовать 32-битную версию Vim для DOS.

1. Известные проблемы
2. Запуск
3. Восстановление содержимого экрана
4. Использование мыши
5. Работа под Windows 3.1
6. Вопросы по Win32

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

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

Графический интерфейс Win32        |gui-w32|

Авторы:
Версия для Win32 написана Джорджем В. Рейлли (George V. Reilly) <Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.;.
Оригинальный порт для Windows NT выполнен Роджером Кноббе (Roger Knobbe) <Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.;.
Версия с графическим интерфейсом создана Джорджем В. Рейлли и Робертом Уэббом (Robert Webb).

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

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

Имеется ряд известных проблем с запуском в консоли под Windows 95. Насколько нам это известно, те же проблемы возникают и в Windows 98 и Windows ME.

Кто-то в Microsoft уже высказывался на эту тему: "Поддержка консоли в Win95 всегда была и будет слабой (flaky)".

  1. Поддержка мёртвых кнопок не всегда работает.
  2. Изменение размеров окна с помощью ":set columns=nn lines=nn" будет работать, но выполнение внешних команд МОЖЕТ ПРИВЕСТИ К КРАХУ СИСТЕМЫ.
  3. Обновление экрана происходит медленно, если только не изменить значение опций 'columns' или 'lines'. Но при этом возникает проблема номер 2!

Если вам всё это надоело, то используйте 32-битную версию для MS-DOS или версию для Win32 с графическим интерфейсом.

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

2. Запуск

Текущий каталог

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

vim c:\text\files\foo.txt

изменяет текущий каталог на "C:\text\files".

vim c:/text\files\foo.txt

использует текущий каталог без изменений.

Опция 'term'

Единственный тип терминала, который понимает версия Vim для Win32, это "win32", встроенное при компиляции значение. При установке значения этой опции во что либо еще, вы скорее всего получите очень странное поведение Vim. Поэтому, Vim не наследует значение этой опции из переменной окружения "TERM".

3. Восстановление содержимого экрана

При включённой опции 'restorescreen' (по умолчанию включена), Vim будет восстанавливать прежнее состояние консоли при выходи или выполнении внешних команд. Если вас это не устраивает, введите команду ":set nors". См. также |'restorescreen'|

4. Использование мыши

Версия Vim для Win32 поддерживает мышь. Если у вас двухкнопочная мышь, то нажатие средней кнопки можно имитировать при помощи нажатия обоих кнопок одновременно. Обратите внимание, что в графическом интерфейсе Win32 при использовании всплывающего меню по нажатию правой кнопки (см. 'mouse'), для имитации нажатия на среднюю кнопку следует сначала нажимать левую кнопку. |мышь-использование|

Если мышь не работает, то попробуйте отменить "Режим быстрого редактирования" в консоли.

5. Работа под Windows 3.1

Существует специальная версия Gvim, которая работает под Windows 3.1 и 3.11. Вам необходим gvim.exe, скомпилированный с помощью Visual C++ 4.1.

Для работы версии Vim для Win32 под Windows 3.1 необходимо установить Win32s. Вы можете уже иметь Win32s в системе от другого приложения Win32. Если Vim работает не так, как ожидается, поставьте самую последнюю версию, 1.30c. Её можно загрузить по адресу: https://support.microsoft.com/download/support/mslfiles/pw1118.exe

(Microsoft опять куда-то перепрятала этот файл, мы не знаем, где его теперь искать :-( ).

Причина, по которой имеется две версии gvim.exe в том, что версия Win32s скомпилирована при помощи VC++ 4.1. Это последняя версия VC++, которая поддерживает программы Win32s. Для версии Win32 использовался VC++ 5.0, поскольку он лучше. За этим исключением программы полностью идентичны. В смешанной среде можно использовать gvim.exe для Win32s на обоих системах.

На 95/NT версия для Win32s работает так же, как и версия Win32. При работе под Win32s применимы следующие замечания:

  • Нельзя использовать длинные имена файлов, поскольку Windows 3.1 их не поддерживает!
  • При выполнении внешней программы, код выхода не возвращается. После выполнения ":make" требуется вручную выполнять команду ":cn".

6. Вопросы по Win32

В. Почему версия Vim для Win32 так медленно обновляет экран под Windows 95?
О. Поддержка консольных приложений Win32 в Win95 очень глючная. По совершенно неизвестным причинам обновление экрана происходит очень медленно, если установлено стандартное разрешение (80x25, 80x43 или 80x50). 16-битная версия Vim для DOS обновляет экран намного быстрее, чем версия для Win32. В то же время, если разрешение экрана установлено в нестандартное значение, например при помощи ":set columns=100" или ":set lines=40", то обновление экрана происходит почти так же быстро, как и в 16-битной версии.

ВНИМАНИЕ! Изменение опции 'columns' может привести к краху Windows 95 во время обновления экрана (все жалобы отправляйте в Microsoft). Возможность менять эту опцию не была отключена, поскольку иногда это работает, но будьте осторожны при изменении опции 'columns'.

Изменение разрешения экрана помогает ускорить обновление, но привносит ряд дополнительных проблем. Внешние команды (например, ":!dir") могут "подвесить" Vim, если разрешение экрана нестандартное, в частности в случае со значением опции 'columns' не равным 80. Vim не может уверенно изменять разрешение экрана консоли перед выполнением внешних команд к исходному значению, действовавшему при запуске, поэтому при изменении опций 'lines' и 'columns' будьте крайне осторожны. Vim скорее всего не позволит вам запускать внешние программы, если значение 'columns' не равно 80, потому что слишком высока вероятность того, что редактор просто зависнет после этого.

Всё это не относится к Windows NT. На этой системе обновление экрана происходит быстро независимо от установки опций 'lines' и 'columns', а выполнение внешних программ не приводит к зависанию Vim.

В. Так зачем использовать версию для Win32 под Windows 95, если 16-битная версия для DOS не имеет проблем с быстрым обновлением экрана?
О. Во-первых, версия для Win32 не настолько медленна, особенно при использовании нестандартных значений 'lines' и 'columns'. Во-вторых, в 16-битной версии для DOS имеется ряд серьёзных ограничений: она не может выполнять больших изменений в файле и она не поддерживает длинных имён файлов. В версии для Win32 этих ограничений нет, и кроме того, она в целом более быстрая (то же можно сказать и о 32-битной версии DJGPP для DOS). Версия Win32 более грамотно работает с экраном, мышью и клавиатурой, чем версия DJGPP.

В. А что можно сказать о 16-битной версии для DOS против версии для Win32 на NT?
О. Использовать 16-битную версию для DOS на NT нет никакого смысла. На NT версия для Win32 обновляет экран так же быстро, как и 16-битная версия. Кроме того, все отмеченные выше ограничения 16-битной версии остаются в силе. Кроме того, приложения DOS запускаются дольше и работают более медленно. На не-Intel платформах NT, версия для DOS работает чрезвычайно медленно, поскольку выполняется в эмуляторе процессора 80x86.

В. Как сменить фонт?
О. В версии для Графического интерфейса можно использовать опцию 'guifont'. В консольной версии вам потребуется изменить фонт, используемый в консоли. Это нельзя сделать из редактора.

В. Когда я изменяю размер консольного окна с помощью ':set lines=xx' или похожей команды, то меняется фонт! (Win95)
О. В настройках окна размер консольного фонта установлен в значение "Автоматически". Это заставляет W95 угадывать, какой фонт лучше всего использовать (плохо она это угадывает). Вместо этого, пользуйтесь явной настройкой для размера фонта.

В. Почему под Windows 95 я не могу вклеивать текст в Vim?
О. В настройках для окна MS-DOS выключите опцию "Быстрая вставка". Также следует включить опцию 'paste' для отмены нежелательных эффектов. См. |'paste'|.

В. Как можно нажать на мёртвые кнопки в консольном окне на Windows 95? (Мёртвая кнопка это кнопка акцента, которая сама по себе не является символом, но при последующем нажатии другой кнопки приводит к вставке соответствующего символа, такого как u-умляут или n-тильда. Эти кнопки используются на клавиатурах для европейских языков. На обычной английской клавиатуре таких кнопок нет).
О. Никак. Подпрограммы ввода в консольном режиме под Windows 95 не работают корректно и у меня не получилось придумать как это можно обойти. Говоря словами одного из высокопоставленных разработчиков в Microsoft:

Поддержка консоли в Win95 всегда была и будет слабой.

Это неизбежно, поскольку мы вынуждены совмещать поддержку TSR программ для MS-DOS, подобных KEYB, которая работает с данными, важными для других языков, и одновременно поддерживать Win32.

Поэтому, кнопки, не существующие в мире MS-DOS (подобные мёртвым кнопкам), имеют весьма слабое присутствие в мире Win32. Кнопки, которые по разному себя ведут в MS-DOS и консоли Win32 (как например capslock) будут работать весьма посредственно.

Это не говоря о проблемах с раскладками клавиатуры для различных языков...

Вы можете попробовать что-нибудь придумать для себя при помощи механизма диграфов, см. |диграфы|.

Лучшим решением является версия с графическим интерфейсом для Win32, gvim.exe. Также вы можете попробовать одну из версий Vim для DOS, где мёртвые кнопки, говорят, работают.

В. Как пользоваться мёртвыми кнопками на Windows NT?
О. Мёртвые кнопки работают на NT 3.51. Просто набирайте текст как в любом другом приложении.
На NT 4.0 вам необходимо убедиться, что локаль по умолчанию (Клавиатура в Панели управления) совпадает с текущей локалью. В противном случае NT вас не поймёт и зависнет! Это проблема самой NT 4.0, а не Vim.

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

В. Как посмотреть вывод команды ":make" во время её работы?
О. Вам необходимо использовать программу tee с тем, чтобы её ввод, т.е. вывод программы make копировался сразу на стандартный вывод и в файл ошибок. Программа tee, вместе с другими утилитами GNU, может быть найдена по адресу https://gnuwin32.sourceforge.net или https://unxutils.sourceforge.net. Вы можете также воспользоваться более новой версией утилит GNU от Cygnus. Они находятся по адресу https://www.cygwin.com. Список других Unix-подобных программ для Win32 находится по адресу https://directory.google.com/Top/Computers/Software/Operating_Systems/Unix/Win32/
   
Получив копию программы tee, вам надо будет добавить

:set shellpipe=\|\ tee

в файл _vimrc.
   
В. Я храню файлы на удалённой машине, на которой работает VisionFS, и на неё пропадают фалы!
О. VisionFS не может работать с некоторыми именами файлов, состоящими из точки и трёхбуквенного расширения. SCO заявляет, что так необходимо для обратной совместимости с 16-битной средой DOS/Windows. Приведём пример:

echo Hello > file.bat~ 
dir > file.bat

В результате получается, что команда "dir" обновляет содержимое файла "file.bat~", вместо создания нового файла "file.bat". Это поведение проявляется и в Vim, когда редактор создаёт временный файл с символом '~' на конце. Когда файл сохраняется на диск, то он будет удалён.

Решение: добавьте в файл _vimrc такую команду:

:set backupext=.temporary

В. Как изменить скорость мерцания курсора?
О. Никак. Это ограничение консоли в NT. Говорят, что NT 5.0 умеет настраивать скорость мерцания курсора, но это применяется сразу ко всем консольным окнам.

В. Как асинхронно запустить внешнюю команду или программу?
О. Можно пользоваться командой системы "start":

:!start winfile.exe<CR>

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

Чтобы избежать такого особого отношения, используйте ":! start".

В. Я использую Win32s, и когда я запускаю внешнюю программу, например "make", то Vim не дожидается её завершения! Помогите!
О. Проблема состоит в том, что 32-битное приложение (Vim) не получает уведомлений от Windows, что 16-битное приложение (ваш сеанс с DOS) закончило свою работу. В Vim имеется способ решения этой проблемы, но вы должны настроить приложения DOS для работы в окне, а не в полноэкранном режиме. К сожалению, по умолчанию принимается, что программы DOS работают в окне. Вот как это можно изменить:

  1. Откройте редактор PIF (В программной группе Главная).
  2. Откройте файл "_DEFAULT.PIF" в каталоге Windows.
  3. Измените режим запуска с "Открыть на весь экран" на "Открыть в окне".
  4. Сохраните и выйдите.

Для проверки, запустите Vim и наберите

:!dir C:\<CR>".

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

В. Я использую Vim под Win32s и NT. В NT я могу задать режим консоли по умолчанию равным 50 строкам, чтобы получить оболочку с разрешением 80x50 при вводе команды ':sh'. Можно ли настроить то же самое в Win32s, или я вынужден работать с разрешением 80x25?
О. Отредактируйте файл SYSTEM.INI и добавьте строку 'ScreenLines=50' в раздел [NonWindowsApp]. После этого DOS приложения будут запускаться в 50-строчном режиме.