Итак, буквально через пару дней кончается 2017 год. Время рейтингов, подведения итогов и прочего стандартного булшита. Предлагаю в этот раз поговорить о самом насущном, о том, чем приходится пользоваться каждый день — о Терминалах. Что же у нас есть среди Terminal Emulator для Windows?
Изначально эта прекрасная операционная система шипится с двумя Терминалами — старым COMMAND.COM (стандартный вмеми известный cmd.exe), а также новым PowerShell.
Думаю, каждый, кто хоть немного работал за Windows, сможет назвать минусы и минусы этих терминальчиков. Это и практически полное отсутствие конфигурации, это и отсутствие многих фич, которые везде есть буквально из коробки (напимер, tab-ы, или статусный бар). Кроме того, тут нет таких важный вещей, как стандартный набор linux-тулзов (posix). Точнее так, часть tools есть, но они совсем не соответствуют стандарту, имеют своё уникальное поведение и набор принимаемых аргументов.
С точки зрения развития и общего UI/UX PowerShell, на самом деле, не так плох. Его действительно используют люди. Но это обычно это те, кто никогда не работал за Линуксами, и кто попросту привык к тем командам, которые тут есть. Anyway, этот терминал далёк от iTerm 2 — лучшего в мире терминалов.
Какие же есть альтернативы? На самом деле, в первую очередь нужно понять для себя, какую реализацию posix утилит мы хотим: либо это Cygwin (или аналог), либо это божественная Linux Subsystem, которая появилась в 2016 году в Десятке. Наверное, сейчас уже и выбор особо никакой не стоит. Если у вас Windows 10 — вы выбираете встроенную реализацию, иначе — Cygwin.
После выбора ядра Терминала, стоит посмотреть на визуальную реализацию. Наверное, можно сказать, что в 2017 году есть 3-4 достойных терминала. Это ConEmu, это Cmder, это Babun, и это Hyper™.
ConEmu — это, наверное, самая старая попытка реализовать внешний Терминал для Винды. В качестве реализации Linux-утилит классически используется Cygwin. Из плюсов можно отметить то, что это как-то работает. Есть все популярные фичи терминалов. Но… ConEmu не очень приятно пользоваться. При работе то и время замечаешь за собой, что пользуешься не «встроенной нативной программой», а чем-то на коленке написанным. Вечно присутствуют какие-то визуальные лаги и баги отображения текста в консоли. Я пытался использовать ConEmu лет 5 назад. Не смог.
Cmder — это логическое развитие ConEmu. Командер базируется на Конему, но тут проделано много дополнительной работы. В частности, были полечены баги в отображение текста, улучшена световая схема, добавлены некоторые фичи. Сам я командером никогда не пользовался, но, по отзывам, этот терминал одназначно входит в двойку лучших. Кстати, Cmder может работать, как с тулами из Cygwin, так и с тулами из Linux Subsystem.
Hyper — это то, чем я пользуюсь, когда работаю за Windows. Мне посоветовал этот терминал коллега. Сначала я был крайне недоверчев к консоли, которая написана на Электроне (javascript). Я думал, что это будет лагать просто, как не в себя. Отчасти так и было в первой версии редактора, когда Хайпер использовал hterm внутри себя. Но теперь, когда Hyper перешёл на xterm.js, всё стало просто замечательно.
Чем прекрасен этот терминал? Причин несколько. Во-первых, тут нет лагов (если говорить про ядро xterm.js). Во-вторых, у этой консоли изумительный дизайн (на сколько я не привередлив к этому, тут это просто цепляет). Кроме того, у данного Терминала бесконечное количество фич: в Хайпер встроена масса стандартных функций, но если и их вам будет мало, тут есть поддержка плагинов, которые активно разрабатываются сообществом.
Пожалуй, покажу, как я использую этот Терминал. В конфиге нет ничего особенного. Просто увеличен размер шрифтов, увеличен размер терминала. Кроме того, Линуксовый bash используется в качестве Shell по умолчанию, а также подключена iTerm2 визуальная тема. Важно, что используется canary ветка, которая необходима для включения xterm.js.
// Future versions of Hyper may add additional config options, // which will not automatically be merged into this file. // See https://hyper.is#cfg for all currently supported options. module.exports = { config: { // Choose either "stable" for receiving highly polished, // or "canary" for less polished but more frequent updates updateChannel: 'canary', // default font size in pixels for all tabs fontSize: 18, windowSize: [1000, 580], // font family with optional fallbacks fontFamily: 'Menlo, "DejaVu Sans Mono", Consolas, "Lucida Console", monospace', // terminal cursor background color and opacity (hex, rgb, hsl, hsv, hwb or cmyk) cursorColor: 'rgba(248,28,229,0.8)', // `BEAM` for |, `UNDERLINE` for _, `BLOCK` for █ cursorShape: 'BLOCK', // set to true for blinking cursor cursorBlink: false, // color of the text foregroundColor: '#fff', // terminal background color backgroundColor: '#000', // border color (window, tabs) borderColor: '#333', // custom css to embed in the main window css: '', // custom css to embed in the terminal window termCSS: '', // set to `true` (without backticks) if you're using a Linux setup that doesn't show native menus // default: `false` on Linux, `true` on Windows (ignored on macOS) showHamburgerMenu: '', // set to `false` if you want to hide the minimize, maximize and close buttons // additionally, set to `'left'` if you want them on the left, like in Ubuntu // default: `true` on windows and Linux (ignored on macOS) showWindowControls: '', // custom padding (css format, i.e.: `top right bottom left`) padding: '12px 14px', // the full list. if you're going to provide the full color palette, // including the 6 x 6 color cubes and the grayscale map, just provide // an array here instead of a color map object colors: { black: '#000000', red: '#ff0000', green: '#33ff00', yellow: '#ffff00', blue: '#0066ff', magenta: '#cc00ff', cyan: '#00ffff', white: '#d0d0d0', lightBlack: '#808080', lightRed: '#ff0000', lightGreen: '#33ff00', lightYellow: '#ffff00', lightBlue: '#0066ff', lightMagenta: '#cc00ff', lightCyan: '#00ffff', lightWhite: '#ffffff' }, // the shell to run when spawning a new session (i.e. /usr/local/bin/fish) // if left empty, your system's login shell will be used by default // // Windows // - Make sure to use a full path if the binary name doesn't work // - Remove `--login` in shellArgs // // Bash on Windows // - Example: `C:\\Windows\\System32\\bash.exe` // // Powershell on Windows // - Example: `C:\\WINDOWS\\System32\\WindowsPowerShell\\v1.0\\powershell.exe` shell: 'C:\\Windows\\System32\\bash.exe', // for setting shell arguments (i.e. for using interactive shellArgs: ['-i']) // by default ['--login'] will be used shellArgs: ['--login'], // for environment variables env: {}, // set to false for no bell bell: 'SOUND', // if true, selected text will automatically be copied to the clipboard copyOnSelect: false // if true, on right click selected text will be copied or pasted if no // selection is present (true by default on Windows) // quickEdit: true // URL to custom bell // bellSoundURL: 'http://example.com/bell.mp3', // for advanced config flags please refer to https://hyper.is/#cfg }, // a list of plugins to fetch and install from npm // format: [@org/]project[#version] // examples: // `hyperpower` // `@company/project` // `project#1.0.1` plugins: [ "hyper-adventure-time" ], // in development, you can create a directory under // `~/.hyper_plugins/local/` and include it here // to load it and avoid it being `npm install`ed localPlugins: [], keymaps: { // Example // 'window:devtools': 'cmd+alt+o', } };
А какой терминал используете вы? Будет интересно узнать, как выживают люди на Windows.
Категории: Программирование