Лучший Терминал Эмулятор для Windows в 2017 году

Итак, буквально через пару дней кончается 2017 год. Время рейтингов, подведения итогов и прочего стандартного булшита. Предлагаю в этот раз поговорить о самом насущном, о том, чем приходится пользоваться каждый день — о Терминалах. Что же у нас есть среди Terminal Emulator для Windows?

Изначально эта прекрасная операционная система шипится с двумя Терминалами — старым COMMAND.COM (стандартный вмеми известный cmd.exe), а также новым PowerShell.

Думаю, каждый, кто хоть немного работал за Windows, сможет назвать минусы и минусы этих терминальчиков. Это и практически полное отсутствие конфигурации, это и отсутствие многих фич, которые везде есть буквально из коробки (напимер, tab-ы, или статусный бар). Кроме того, тут нет таких важный вещей, как стандартный набор linux-тулзов (posix). Точнее так, часть tools есть, но они совсем не соответствуют стандарту, имеют своё уникальное поведение и набор принимаемых аргументов.

powershell

С точки зрения развития и общего UI/UX PowerShell, на самом деле, не так плох. Его действительно используют люди. Но это обычно это те, кто никогда не работал за Линуксами, и кто попросту привык к тем командам, которые тут есть. Anyway, этот терминал далёк от iTerm 2 — лучшего в мире терминалов.

Какие же есть альтернативы? На самом деле, в первую очередь нужно понять для себя, какую реализацию posix утилит мы хотим: либо это Cygwin (или аналог), либо это божественная Linux Subsystem, которая появилась в 2016 году в Десятке. Наверное, сейчас уже и выбор особо никакой не стоит. Если у вас Windows 10 — вы выбираете встроенную реализацию, иначе — Cygwin.

После выбора ядра Терминала, стоит посмотреть на визуальную реализацию. Наверное, можно сказать, что в 2017 году есть 3-4 достойных терминала. Это ConEmu, это Cmder, это Babun, и это Hyper™.

ConEmu

ConEmu

ConEmu — это, наверное, самая старая попытка реализовать внешний Терминал для Винды. В качестве реализации Linux-утилит классически используется Cygwin. Из плюсов можно отметить то, что это как-то работает. Есть все популярные фичи терминалов. Но… ConEmu не очень приятно пользоваться. При работе то и время замечаешь за собой, что пользуешься не «встроенной нативной программой», а чем-то на коленке написанным. Вечно присутствуют какие-то визуальные лаги и баги отображения текста в консоли. Я пытался использовать ConEmu лет 5 назад. Не смог.

Cmder

cmder

Cmder — это логическое развитие ConEmu. Командер базируется на Конему, но тут проделано много дополнительной работы. В частности, были полечены баги в отображение текста, улучшена световая схема, добавлены некоторые фичи. Сам я командером никогда не пользовался, но, по отзывам, этот терминал одназначно входит в двойку лучших. Кстати, Cmder может работать, как с тулами из Cygwin, так и с тулами из Linux Subsystem.

Hyper

hyper

Hyper — это то, чем я пользуюсь, когда работаю за Windows. Мне посоветовал этот терминал коллега. Сначала я был крайне недоверчев к консоли, которая написана на Электроне (javascript). Я думал, что это будет лагать просто, как не в себя. Отчасти так и было в первой версии редактора, когда Хайпер использовал hterm внутри себя. Но теперь, когда Hyper перешёл на xterm.js, всё стало просто замечательно.

Чем прекрасен этот терминал? Причин несколько. Во-первых, тут нет лагов (если говорить про ядро xterm.js). Во-вторых, у этой консоли изумительный дизайн (на сколько я не привередлив к этому, тут это просто цепляет). Кроме того, у данного Терминала бесконечное количество фич: в Хайпер встроена масса стандартных функций, но если и их вам будет мало, тут есть поддержка плагинов, которые активно разрабатываются сообществом.

Мой конфиг для Hyper

Пожалуй, покажу, как я использую этот Терминал. В конфиге нет ничего особенного. Просто увеличен размер шрифтов, увеличен размер терминала. Кроме того, Линуксовый 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.

Категории: Программирование