Ferramentas de linha de comando do Windows

Como desenvolvedores que passam a maior parte do tempo programando em OSX e Linux, estávamos curiosos sobre como seria uma configuração de linha de comando moderna no Windows.

Uma pesquisa para desenvolvedores do StackOverflow nos lembrou que há mais desenvolvedores usando o Windows do que qualquer outro SO. Por isso, tínhamos curiosidade em saber se as ferramentas disponíveis eram iguais às que estávamos acostumados a usar em *nix Land.

Depois de passar um tempo avaliando o cenário das ferramentas de CLI do Windows, escolhemos um conjunto de ferramentas que achamos que vai nos levar em 95% do caminho.

No fim das contas, chegamos a uma combinação de:

  • PowerShell
  • ConEmu
  • PSReadLine
  • PSGet
  • Com chocolate
  • Babun (opcional)

Veja abaixo mais algumas observações sobre o que essas diferentes máquinas oferecem.

PowerShell (shell)

  • Significativamente mais próximo de um "shell" real do que o cmd.exe, oferecendo um ambiente de script avançado para automação de tarefas. É justo compará-lo a Bash ou zsh.
  • Preenchimento automático de diretórios e nomes de arquivos
  • Preenchimento automático de nomes de aplicativos
  • Tem aliases e comandos integrados, chamados de iframes, por exemplo, Select-String é como grep, Invoke-Elevated é como sudo, Sort-Object é como sort e Get-Process lista todos os processos ativos. Ao mudar de outro shell para o PS, o Set-Alias permite mapear aliases que você já conhece para os equivalentes do Windows. Por exemplo: Set-Alias server python -m http.server 8000 inicia um servidor Python quando o alias server é usado.
  • Os aliases podem ser mantidos em um perfil do PowerShell
  • Compatível com piping, como o Unix. Ao contrário do Unix, ele canaliza objetos em vez de streams de texto. Isso exige se acostumar, mas evita revisar quando você quer transferir uma propriedade.
  • Oferece suporte a módulos. O PSGet é um gerenciador de pacotes do PowerShell que permite estendê-lo com facilidade.
  • Outra opção é usar o Posh-Git, um script do PowerShell para git para receber preenchimento de tabulação contextual.

Se você quiser saber mais, aqui está uma resposta para o motivo pelo qual o MS criou o PowerShell com um arquiteto líder.

PSReadLine (auxiliares de edição do console)

  • Melhora significativamente a experiência de edição no console
  • Destaque de sintaxe sempre que você começar a digitar comandos. Indica claramente erros de sintaxe com um caractere ">" vermelho.
  • Vinculações de teclas altamente personalizáveis
  • Preenchimento automático em estilo Bash
  • Pesquisa de histórico interativo bash/zsh (Ctrl + R). Travessia avançada do histórico de comandos também. Visualize facilmente os comandos anteriores de várias linhas usando as teclas de seta em vez de apenas a última linha do comando.
  • Suporte adequado para copiar/colar/recortar (Ctrl+C/X/V deve funcionar normalmente)
  • Bom suporte para desfazer/refazer ações
  • O histórico é salvo automaticamente

Como alternativa, você pode usar o Clink, que tem um conjunto semelhante de recursos, mas não foi desenvolvido estritamente para o PowerShell.

ConEmu (host de console)

  • Um emulador de console avançado em que você pode executar o shell que preferir.
  • Oferece suporte à abertura de vários terminais em guias diferentes. Torna trivial iniciar terminais como usuários diferentes.
  • Extremamente personalizável: tudo pode ser alterado, desde atalhos até seleção de texto e cores da barra de status.
  • Oferece suporte à exibição em tela dividida
  • Apps de GUI simples podem ser executados em guias
  • Suporte para listas de salto do Windows 7 e versões mais recentes
  • Oferece suporte ao redimensionamento uniforme de janelas
  • Suavização de fontes do Windows
  • As guias iniciais podem ser totalmente personalizadas para serem iniciadas em um diretório específico
  • Copiar/colar inteligente

Algumas pessoas ainda gostam de usar o Console2, e Scott Hanselman tem uma postagem no blog sobre o assunto.

Cmder

Vale a pena passar uma observação é o Cmder, um pacote de emulação de console que combina ConEmu, Clink e msysgit, que oferece assistentes Git. O Cmder basicamente oferece uma experiência mais bonita para o ConEmu por padrão pelo esquema de cores Monokai.

O Cmder também inclui alguns outros pequenos benefícios, como a integração com apps de GUI, como o Sublime Text.

Chocolatey (gerenciador de pacotes)

  • Basicamente, o homebrew para Windows, permitindo que você abra seus aplicativos favoritos do Windows de forma conveniente. No momento, há aproximadamente 3 mil pacotes disponíveis que podem ser atualizados usando diretamente o Chocolatey.
  • É diferente do Nuget. O NuGet é destinado a bibliotecas de desenvolvimento. O Chocolatey é um gerenciador de pacotes de máquinas binárias baseado na infraestrutura do NuGet.
  • Oferece builds efetivamente silenciosos

Talvez você também esteja interessado em saber mais sobre o OneGet, o gerenciador de pacotes da Microsoft, que funcionará com o Chocolatey no Windows 10.

Babun (Cygwin pré-configurado)

  • Cygwin (o ambiente do Linux para Windows), menos algumas das peculiaridades historicamente conhecidas. A configuração geral é muito mais simples usando o instalador do Babun. Se você tiver experiência particular com o Unix e preferir evitar aprender o PowerShell, vale a pena considerar o cygwin/Babun.
  • Inclui um gerenciador de pacotes chamado pact (um pouco parecido com brew) semelhante a apt-get. Isso é importante, porque atualmente você precisa executar novamente o instalador do Cygwin ao adicionar pacotes em vez de apenas usar o pact.
  • Vim pré-instalado e pré-configurado
  • Suporte integrado a oh-my-zsh
  • Atualizações automáticas

Leitura complementar