6

Я вижу странное взаимодействие между vim, инструментами Cygwin и Windows7. Я не думаю, что это ошибка, но в то же время я понятия не имею, как объяснить, что я вижу.

Я установил Vim (с vim.org, а не с Cygwin vim) в:

"C:\Program Files (x86)\Vim".

Я перешел в этот каталог и отредактировал файл _vimrc, используя сам vim.

vim _vimrc

Я добавил некоторые настройки, выписал файл и вышел.

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

copy _vimrc c:\tmp

Вот когда я заметил проблему. Копия файла не содержала моих изменений. Большое расследование последовало. Я подведу итоги.

В папке «C:\Program Files (x86)\Vim» я вижу свои изменения, если проверяю файл одним из следующих способов:

vim, cat, less

(Здесь кошка и меньше - версии Cygwin.)

Тем не менее, я не вижу свои изменения, если я проверяю файл с одним из следующих:

notepad, type, more

(Тип команды и другие являются стандартными командами оболочки Windows.)

Чтобы придать вам вкус:

c:\Program Files (x86)\Vim>ls -l _vimrc
-rwx------+ 1 carlx Domain Users 936 Dec 23 21:15 _vimrc

c:\Program Files (x86)\Vim>dir _vimrc
 Volume in drive C is OSDisk
 Volume Serial Number is 6C86-85EB

 Directory of c:\Program Files (x86)\Vim

06/28/2011  02:09 PM               901 _vimrc
               1 File(s)            901 bytes
               0 Dir(s)  95,964,721,152 bytes free

Команда Cygwin ls показывает файл, отличный от даты и размера, чем команда dir Windows.

Я подумал, что, возможно, это какая-то проблема с регистром имени файла, но указание _VIMRC вместо _vimrc для любой из этих команд не имеет значения.

Кто-нибудь может объяснить, что я здесь вижу?

4 ответа4

3

Как отмечали выше Раймонд Чен и @kreemoweet, это вызвано виртуализацией файловой системы. Чтобы отключить это, вы можете использовать редактор локальной групповой политики, gpedit.msc . Введите в командной строке start gpedit.msc и выберите «Конфигурация компьютера»> «Параметры Windows»> «Параметры безопасности»> «Локальные политики»> «Параметры безопасности». Прокрутите до нижней части правого окна и дважды щелкните User Account Control: Virtualize file and registry write failures to per-user locations . Измените настройку с Включено на Отключено.

0

Файловая система NTFS, обычно используемая Windows, поддерживает несколько файлов с одинаковыми именами, которые различаются только регистром, как часть усилий Windows по обеспечению соответствия POSIX. Дополнительные сведения доступны по адресу http://support.microsoft.com/kb/100625 . Однако все Windows (и, вероятно, большинство его API-интерфейсов) и приложения, предоставляемые Windows, предотвращают это.

Скорее всего, у вас есть одновременно и _vimrc и _VIMRC - и стандартный API показывает вам только один из них (не уверен, какая логика используется для выбора, какой). Я собирался сказать, что vim должен использовать нестандартный API или вызывать его с нестандартной опцией, чтобы получить то, что вы наблюдаете, но я не могу воспроизвести это только с vim. Я бы посчитал это ошибкой в Cygwin, vim, copy или чем-то еще, что на самом деле привело к этой ситуации - что приносит хорошие результаты - вы действительно использовали copy (не существует в Cygwin) или cp?

Также ознакомьтесь с http://www.cygwin.com/cygwin-ug-net/using-specialnames.html#pathnames-casesensitive . Здесь вы должны проверить настройки реестра, которые не ограничиваются только Cygwin.

0

Что произойдет , если вы запустите C:\Windows\SysWOW64\cmd.exe «s dir \Windows? Бьюсь об заклад, вы перенаправлены файл WOW64.

0

Как предположили Раймонд Чен и @kreemoweet в своих комментариях, это была проблема виртуализации файловой системы, и я нашел файл в:

c:\users\<youraccoutname>\appdata\local\virtualstore\program files(86)

И это был ответ. Спасибо, парни.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .