Настройка общего для Windows и Linux репозитория конфигурационных файлов
February 14, 2011 in SoftwareПост посвящается взаимной любви линуксоидов и виндузятников, а также всем тем, кому пофиг.
(Если кто не знал, то я получаю извращенное удовольствие от работы с Linux из-под Windows. Но, как говорится, песня не о том.)
Рядом программ я пользуюсь и там, и там; постоянно пользуюсь vimом, иногда - gitом, пореже – ruby.
Поскольку под линуксом я ими пользуюсь существенно чаще, конфигурационные файлы там новее; дублировать изменения в Windows обычно лень, поэтому они тут безбожно устаревают.
При этом способ синхронизировать файлы настроек у меня уже есть, как и у многих ответственных линуксоидов – репозиторий dotfiles, из которого связкой git clone && rake install
можно установить мои файлы настроек на новую систему.
Увы, под Windows этот способ не работал, ввиду, во-первых, неполного соответствия названий файлов (.vimrc
– _vimrc
и т.п.), а во-вторых, отсутствия на Windows команд rm
и ln
. Пришлось дорабатывать.
Можете смотреть на Rakefile, выполняющий вышеописанное извращение, а я изложу некоторые открытые мной подробности.
Выводы
Симлинки под Windows
Симлинки на Windows (точнее, на NTFS) есть. Создаются они командой mklink и работают, можно сказать, так же, как и на линуксе.
Но, для создания симлинка нужны привилегии администратора, либо разрешение от него же, установленное через Policy Editor, которого в моем Windows 7 Home Premium нет. Короче, скрипт приходится запускать “в роли администратора”, что не такая уж и большая проблема.
Run as administrator против sudo
Run as administrator в Windows - совсем не то же, что sudo в Linux. Этот режим, повышая привилегии, не меняет текущего пользователя, то есть оставляет его же окружение. Для нашего случая это довольно важно, поскольку устанавливать файлы нужно в домашнюю папку.
Особенности mklink
mklink
, как выясняется, не является исполнимым файлом. Поэтому вызов этой команды напрямую провоцирует ruby на No such file or directory
. Поломав немного голову, я обнаружил, что ее можно вызвать из-под сеанса cmd
:
`cmd /c mklink LINK TARGET`
Особенности FileUtils.rm_rf под Windows
для начала – полезность: в Ruby вызов rm -rf
можно заменить вызовом метода FileUtils.rm_rf(file_or_directory)
! А теперь – сюрприз: симлинки в NTFS этим методом не удаляются! Потому мне приходится прибегать к таким трюкам:
if is_windows? && File.directory?(target_file)
system %Q{rmdir /s /q "#{target_file}"}
else
FileUtils.rm_rf target_file
end
Полноценный Vim для Windows
Сборка Vim c официального сайта лишена поддержки Ruby; поскольку Ruby используется рядом плагинов, например, LustyJuggler, то это довольно плохо.
Гораздо более полная версия Vim собирается проектом Cream. Если ты не в курсе, то Cream - такая себе дружественная пользователю сборка Vim с разнообразными дружественными свистелками. Менее известен тот факт, что те же люди предоставляют и традиционную сборку Vim-huge под Windows – рекомендую её всем, кто пользуется Vim под Windows.
Понравился пост? Купи мне кофе