В отличие от ОС Linux, ОС Windows не является системой, удобной для разработки программного обеспечения. Безусловно, критерий удобности - понятие субъективное, но пожалуй безспорным фактом выступает отсутствие в Windows гибко настраиваемого эмулятора терминала и интерпретатора с ридлайном, а также довольно скудный набор базовых утилит командной строки. В этой статье я покажу свой метод создания "комфортного" псевдо-пространства с помощью системы cygwin и терминала Console2.

Achtung! Если вы читаете эту статью позже 2017 и используете Windows 10, то вместо cygwin крайне рекомендую установить Windows 10 creators update который затем даст возможность установить Ubuntu прямо из Windows Store (даже в Home editions). Она реализована на Windows Subsystem for Linux и по сути будет работать также как cygwin (в коммандной строке), но с родным интерфейсом и поддержкой почти всех пакетов из Ubuntu! В качестве терминала вы можете использовать например hyper.

 

Cygwin (Сигвин) представляет собой набор Unix программ и библиотек, скомпилированных под ОС Windows и размещенных в файловой системе таким же образом как и в настоящем Unix-е. Благодаря этому мы получаем полный эквивалент Unix среды начиная от bash и вплоть до компиляторов gcc, которыми  без особого портирования исходного кода можно собирать проекты для выполнения в Windows (достаточно большое количество кросс-платформенных приложений используют такой подход, так как он наиболее простой и быстрый). 

Установка Cygwin

Скачать Cygwin для 32х или 64х - разрядной версии можно на сайте https://cygwin.com/install.html. Установка весьма простая - можно просто нажимать "Далее" до окна выбора пакетов (Select Packages). Тут перед вами откроется база пакетов, причем некоторые из них уже будут отмечены для остановки (базовы), другие вы можете отметить сами. Для того, что бы отметить пакет на установку, нужно ввести его имя в поле "Search", затем раскрыть категории и найти этот пакет. Потом нажать "Skip", в результате чего вместо Skip должна появится версия, которая будет установлена. Для дальнейшей работы отметьте пакет wget, остальное можно пока не трогать. Пакеты можно будет доустановить или удалить в любой момент времени, просто повторно запустив установщик, но это не совсем удобно, поэтому дальше в статье я расскажу как устанавливать пакеты из командной строки (для этого нам и понадобится wget).

По дефолту cygwin запускается в стандартном терминале Windows, что не очень удобно.

Терминал Console

Скачать можно тут http://sourceforge.net/projects/console/. Нужно просто распаковать архив куда-нибудь в Program Files и создать ярлык для быстрого запуска. Запустив Console заходим в настройке и на вкладке Tabs жмем на Add. В Shell указываем путь к cygwin.bat:

Оставшийся дефолтный таб можно удалить (выделеть и нажать Delete). 

Теперь можно настроить действия по клавишам мыши в дереве Hotkeys/Mouse, например достаточно удобно копировать и вставлять нажатием правой кнопки мыши:

Назначение выполняется путем нажатия кнопки Assign.

Ну и конечно "горячие" клавиши в пунке дерева Hotkeys. Я назначил следующие комбинации (Остальные меня устраивают):

  • New Tab - Ctrl + Shift + T (открыть новую вкладку)
  • Copy selection - Ctrl + Shift + C (копирование выделения)
  • Paste - Ctrl + Shift + V (вставка)

Также можно полазить по другим настройкам - можно найти много удобностей.

Пакетный менеджер для Cygwin

Что бы устанавливать пакеты через консоль в одну строку кода нужно установить apt-cyg (типа как apt-get в Ubunt-ах). Установка сводится к скачиванию, добавлению прав на выполнение и перемещению в папку выполняемого Path-а:

wget raw.github.com/transcode-open/apt-cyg/master/apt-cyg
chmod +x apt-cyg
mv apt-cyg /usr/local/bin

Пользоваться весьма просто, например для установки python3 в cygwin достаточно сделать:

apt-cyg install python3

Поиск пакетов есть тут: https://cygwin.com/packages/

Установка пакетов для python с помощью pip

Пакеты в python часто устанавливаются с помощью pip, которого нету в репозиториях сигвина.

Поэтому его нужно установить отдельно:

wget https://bootstrap.pypa.io/get-pip.py
python3 get-pip.py

Только учтите что если в виндовой PATH гдето уже есть pip3 то обращаться к этому pip3 придется через /usr/bin/pip3. В любом случае проверить нужные ли версии вы используете:

$ python3
Python 3.4.3 (default, May  5 2015, 17:58:45)
[GCC 4.9.2] on cygwin
Type "help", "copyright", "credits" or "license" for more information.
>>>

$ /usr/bin/pip3 --version
pip 8.1.1 from /usr/lib/python3.4/site-packages (python 3.4)

MAN-страницы для функций libc

Cygwin уже содержит мануал-страницы для стандартных команд, однако man для функций libc можно установить отдельно:

apt-cyg install cygwin-doc

Кстати Cygwin в некотором роде связан со встраиваемыми системами, так как использует Newlib реализацию libc, которая как известно повсеместно применяется в разных ARM-тулчейнах.

Vim в Cygwin

Установка:

apt-cyg install vim

Настройка выполняется в файле .vimrc в домашней директории:

vim ~/.vimrc

Я пользуюсь такими настройками:

set backspace=indent,eol,start
syntax enable
set shiftwidth=4
set tabstop=8
set softtabstop=4
set expandtab
set number
set showcmd
set cursorline
filetype indent plugin on
set wildmenu
set lazyredraw
set showmatch
set incsearch  

Использование "родного" терминала Cygwin Terminal

Стандартный установщик Cygwin предоставляет свой терминал mintty (запускается через иконку Cygwin Terminal). В сравнении с Console он немного уступает в функциональности (например в нем нет вкладок), но он также имеет неплохой функционал, да и телодвижений меньше. Одной из приятных возможностей выступает поддержка 256-ты разрядных цветов в терминале:

Это позволяет использовать удобные темы подсветки синтаксиса для vim, например badwolf:

mkdir -p ~/.vim/colors && wget https://raw.github.com/sjl/badwolf/master/colors/badwolf.vim -O ~/.vim/colors/badwolf.vim

Для её активации, в .vimrc надо добавить:

colorscheme badwolf

Выглядить это будет так:

Как сделать чтобы сохранялась история команд в bash cygwin?

В файле .bashrc нужно найти добавить:

export HISTSIZE=10000
export HISTCONTROL=erasedups
shopt -s histappend

В первой указывается размер файла истории (10 тысяч команд), во второй включается удаление дубликатов команды (если введенная команда уже есть в истории, то старая удаляется для экономии места), и в третьей включается ведение истории bash.

Как в Cygwin перейти по пути заданному в стиле Windows?

Для первращения win-подобного пути в unix-style путь можно использовать утилитку cygpath.

cd `cygpath "d:\projects\some\src"`

В результате путь превратится в "/cygdrive/d/projects/some/src" и передастся как аргумент cd.