Disclaimer: This article is outdated.
A lot has changed since I wrote it. Win10 now supports WSL2, Ubuntu had a whole new update with LTS 20 and it's impossible to proceed using cmder to integrate with bash/shell. It crashes A LOT.
I'm testing a new Win10 environment that is similar, but using Hyper terminal. When I'm ready, I'll create a whole new article about it.
Until there, proceed with caution. Or, if you know what you're doing, just switch cmder with Hyper and you'll be just fine.
PS: also there's a lot of fonts that are broken and buggy in Win10 recent updates. That's just sad.
Table Of Contents
- 0. Prólogo
- 1. Instalando o Ubuntu no Windows
- 2. Instalando o Cmder
- 3. Instalando o oh-my-zsh
- 4. Configurando o oh-my-zsh
- 5. Customizando o oh-my-zsh
- 6. Conclusão
0. Prólogo
Uso Windows desde sempre. Como toda a vida joguei, sempre preferi a plataforma do que seus concorrentes. No entanto, foi uma surpresa ao voltar a ser dev em 2018 - quase 10 anos fora da área - qdo descobri que os devs preferem distros Linux e MacOS do que a opção "de sempre". E, mesmo assim, me mantive na plataforma até então.
Porém foi ao formatar um Macbook Pro 13" que possuo desde 2010, que percebi que os usuários de zsh são mais "felizes" do que quem usa cmder. Eles tinham autocomplete, syntax highlight, branch check, temas legais, e... nada disso no Windows.
Foi aí que pesquisei um conteúdo maneiro, e decidi diluir todo o how-to por aqui. Então bora começar:
1. Instalando o Ubuntu no Windows
A build 1903 do Windows veio com tudo, e o WSL foi um dos maiores ganhos da plataforma: poder rodar ubuntu, dentro do windows, sem precisar fazer dual boot.
Parece mágica, até.
Primeiro, atualize o seu Windows pra build mais recente, e garanta que ele esteja acima da build 1903.
Depois, abra o PowerShell em Administrador, e execute o seguinte comando:
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
Caso solicite, reinicie o PC.
Abra a Microsoft Store. Pesquise por
Ubuntu
. Selecione a versão padrão e baixe. São 221MB, portanto, vai ser rápido.Quando terminar, um prompt do Ubuntu aparecerá na tela e irá te pedir por um
username
epassword
. Entre com as informações. Quando concluir, seu super user terá sido criado e o prompt ficará ativo para receber comandos.
Agora, precisamos atualizar o Ubuntu para sua versão mais recente. Para isso, vamos utilizar dois comandos.
Entre com o comando
sudo apt-get update
para fazer o fetch do que precisa ser atualizado. Leva um tempo.Após finalizado o fetch, entre com o comando
sudo apt-get upgrade
. Ele irá pedir uma confirmação da ação. Confirme comY
. Vai demorar bastante. No meio da instalação, é capaz que ele pergunte para ter permissão para reiniciar alguns serviços. Basta confirmar com umYes
.
Quando terminar, teremos nosso Ubuntu pronto. Ou quase. Falta atualizar o Git no Ubuntu.
Para atualizar o Git no Ubuntu, devemos adicionar um PPA:
-
sudo add-apt-repository ppa:git-core/ppa
. Ele vai pedir para confirmar pressionando oEnter
.
Quando finalizar, entre com o comando de update:
sudo apt update; sudo apt install git
Obs: pra quem não manja, sudo
é uma abreviação para super user do
. Um jeito verboso de deixar explícito uma elevação para executar scripts.
2. Instalando o Cmder
Porque o cmder?
Cmder é um emulador de terminais para Windows. Por ser um emulador, podemos rodar diversas instâncias dele, podendo brincar com bash, cmd, powershell e... zsh, claro!
Para instalar, vamos utilizar o Chocolatey:
Volte no PowerShell rodando como Administrador, e execute o comando
choco install cmder
. Ele vai perguntar se você deseja rodar o script. Confirme com o comandoA
(yes to All).Navegue até o diretório
C:\Windows\cmder
, e abra o arquivoCmder.exe
. Este é o executável do cmder. Execute-o.
Obs: Chocolatey é o equivalente do Homebrew pro MacOS: um package manager exclusivo pro sistema operacional. Recomendo bastante, por facilitar a instalação de aplicativos e updates gerais (exemplo: dar update no nodejs, utilizando o chocolatey).
Agora que temos "a base" pronta, as coisas começam a ficar interessante.
3. Instalando o oh-my-zsh
Volte para o terminal do Ubuntu, e execute o comando
sudo apt-get install zsh
. Ele vai pedir confirmação. Confirme com oY
.Abra o seu VSCode e instale a extensão do
Remote - WSL
. Depois de instalado, feche o VSCode.
Agora que instalamos o zsh, precisamos torná-lo como terminal padrão na execução do shell. É muito importante este passo. Se não configurado corretamente, o cmder vai abrir o bash padrão ao invés do zsh.
No terminal do Ubuntu, digite o seguinte comando pra abrir o arquivo do bash no VSCode:
code ~/.bashrc
. Se ele pedir, libere o VSCode no firewall.Dentro do arquivo, adicione na primeira linha o script a seguir:
# if running in terminal...
if test -t 1; then
# ...start zsh
exec zsh
fi
Obs: Tem que ser na primeira linha, mesmo. Se fizer no final do arquivo, pode conflitar com outra condição.
Salve o arquivo, feche-o e feche também o VSCode.
- No terminal do Ubuntu, execute o seguinte comando para instalar o oh-my-zsh:
sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"
Ele vai pedir para confirmar o Zsh como shell padrão. Confirme com um Y
e sua senha.
Obs: Ele vai instalar a pasta do oh-my-zsh no caminho /home/<username>/.oh-my-zsh
.
4. Configurando o oh-my-zsh no cmder
Abra o cmder. Agora vamos configurar para ele virtualizar o bash com oh-my-zsh conforme a nossa necessidade.
- No comander, aperte os atalhos
Window + Alt + T
. Ele vai abrir as taks do cmder. Caso queira, pode abrir pela Barra Superior da Janela do Cmder:
Barra cmder > clique com o botao direito do mouse > Settings > Startup > Task
Dentro de Task, Clique no sinal de
+
que tem debaixo do botão 'Reload'. Ele vai criar uma nova configuração, com o nome de 'GroupN', geralmente Group10.Configure do seguinte jeito: No nome, coloque
oh-my-zsh
. Marque as opçõesDefault task for new console
,Taskbar jump lists
eDefault shell
. Na caixa de Task Parameters, entre com o valor/icon %USERPROFILE%\AppData\Local\lxss\bash.ico
para ícone, e na caixa maior debaixo, coloque o valor*cmd /c C:\Windows\System32\bash.exe ~ -new_console:p:%USERPROFILE%
.Na caixa com as opções, selecione a
{oh-my-zsh}
, e mova ela pra primeira opção, utilizando o botãoUp
, próximo aos botões+
e-
. Coloque-o na primeira posição da fila. Clique emSave settings
em seguida. As settings vão fechar.Reinicie o cmder. Você vai perceber, que ele abre por padrão o cmd do Windows. Abra uma nova aba, com o atalho
CTRL + T
. Perceba que ele vai vir com o {oh-my-zsh} pré selecionado. Confirme com oEnter
. Uma nova aba será aberta com o oh-my-zsh pronto.
Agora: aos plugins!
5. Customizando o oh-my-zsh
Instalando as cores do Dracula no cmder:
Abra o site do Dracula e baixe o arquivo .zip do tema para o cmder:
https://draculatheme.com/cmder/
.Extraia o arquivo
Dracula.xml
para dentro da pasta do cmderC:\Windows\cmder
.Abra as settings do cmder
WINDOW + ALT + P
, clique no botãoImport
no rodapé da página e escolha o arquivoDracula.xml
. Clique em Save settings e reinicie o cmder.
Agora, precisamos instalar a fonte Fira Code, para usar os símbolos contidos nela.
Vamos usar o chocolatey para isso: Abra o PowerShell como administrador, e execute o comando:
choco install firacode
. Ele vai pedir a permissão para rodar todos os scripts. Confirme comA
para executar todos.De volta no cmder, abra as settings
WINDOW + ALT + P
. Navegue atéGeneral > Fonts
, e escolha na lista, a fonteFira Code
. Salve em seguida e reinicie o cmder.
Agora, vamos instalar o tema Spaceship:
De volta no cmder, execute o comando
git clone https://github.com/denysdovhan/spaceship-prompt.git "$ZSH_CUSTOM/themes/spaceship-prompt"
.
Se tudo ocorreu corretamente, ele clonou o repo do tema e colocou dentro da pasta de temas do zsh
$ZSH_CUSTOM/themes/
. Para conferir, abra a estrutura de pastas do WSL Ubuntu. Para isso, no explorer do Windows, digite o caminho\\wsl$
.
"Fucking magic, right?" - Agora você sabe que o WSL se comporta feito um computador remoto na sua rede, mas dentro do seu próprio Windows. ;)
- Entre no diretório
\\wsl$\Ubuntu\home\<username>
. Você consegue "arrastar" o diretório da barra de busca, e deixar como atalho no Acesso Rápido.
Mas pq fazer isso? Desse jeito, você consegue utilizar a estrutura de pastas do WSL, como se fosse a sua estrutura de pastas do Windows. Imagine que, assim como eu, você usa o mesmo computador para lazer - jogos - e trabalho. Desse jeito, você fica com duas estrutura separando o que é pessoal, do que é profissional. =)
Abra a pasta
\\wsl$\Ubuntu\home\<username>\.oh-my-zsh\custom\themes
e veja se a pasta do temaspaceship-prompt
foi criada com sucesso. Se foi, vamos prosseguir.No cmder, execute o próximo comando:
ln -s "$ZSH_CUSTOM/themes/spaceship-prompt/spaceship.zsh-theme" "$ZSH_CUSTOM/themes/spaceship.zsh-theme"
. Ele vai linkar o tema ao oh-my-zsh.Agora abra o arquivo de configuração do oh-my-zsh, com o seguinte comando:
code ~/.zshrc
. Ele vai abrir no VSCode. Procure porZSH_THEME
e substituia o valor entre aspas para"spaceship"
. Salve o arquivo, e reinicie o cmder.
Obs: se você navegar até a pasta ~/.oh-my-zsh
, você vai perceber a fonte Fira Code ativa, mostrando o branch do git.
Agora, bora pros 3 plugins "de lei".
- Primeiro, vamos instalar um plugin, que facilita a instalação de demais plugins. (sério, as vezes ele falha o clone pra pasta correta, e ai você tem que ficar corrigindo na mão. é um saco isso, e acontece até no macOs. Instala o plugin). Para instalar, execute o comando
sh -c "$(curl -fsSL https://raw.githubusercontent.com/zdharma/zplugin/master/doc/install.sh)"
Lá no arquivo ~/.zshrc
que deixamos aberto no VSCode, ele vai adicionar algumas linhas no fim do arquivo.
Vá no final do arquivo, e adicione as seguintes linhas:
zplugin light zdharma/fast-syntax-highlighting
zplugin light zsh-users/zsh-autosuggestions
zplugin light zsh-users/zsh-completions
Salve em seguida e reinicie o cmder. Ele vai instalar os plugins e pedir confirmação para executar os scripts. Confirme com o
Y
.
6. Conclusão
Agora você possui o oh-my-zsh rodando em seu cmder, porém não limitado somente a ele: o terminal do Ubuntu e o VSCode também vão utilizar do oh-my-zsh como terminal padrão de uso. Com isso, você pode usufruir do mesmo tema Drácula/Spaceship e funcionalidades de autocompletion, git branches e o que mais você adicionar de plugin.
Ele também traz atalhos de teclado, que são bastante interessante. Quando o autocompletion te trouxer algum valor, basta usar a seta pra direita no teclado, que ele vai completar o código automaticamente, deixando bem dinâmico o processo.
Espero que curtam e que tenham um bom proveito com esse kit poderoso. Gastei algumas horas de um sábado tedioso pra aprender a colocar tudo isso junto funcionando no Windows e como configurar da maneira mais simples possível.
Usei referências da Rocketseat, de um texto do Nuno Caneco, e outras referencias de stackoverflow que encontrei por aí.
Obrigado aos meus amigos principalmente, por revisarem o conteúdo! ♥
E é isso aí, turma. Quem quiser me seguir e trocar ideia sobre dev, só chegar mais, são todos bem vindos
Um abraço!
Top comments (22)
sh -c "$(curl -fsSL raw.githubusercontent.com/zdharma/..."
Esse comando esta retornando um 404. Sabe me dizer se o mesmo foi substituido por algum outro plugin?
Excelente post, como disse, parece magica. Fico feliz em ver esse tipo de integracao com o windows
O zplugin mudou de nome para zinit, a nova url é raw.githubusercontent.com/zdharma/...
Então roda o comando assim:
sh -c "$(curl -fsSL raw.githubusercontent.com/zdharma/..."
Consegui fazer o linux enxergar as variáveis de ambiente do windows usando o WSLENV mas não consigo acessar alguns comandos que ficam dentro da pasta.
Exemplo:
~ echo $ANDROID_HOME // retorna '/mnt/c/Android/sdk'
Dentro do .zshrc eu coloquei
export PATH=$PATH:$ANDROID_HOME/emulator
e aí quando eu tento rodar o comando:
~ emulator // retorna 'zsh: command not found: emulator'
Mas se eu rodo:
~ emulator.exe -list-avds // retorna 'Pixel28'
Ou seja, funciona se eu escrevo emulator.exe
Opa, consegue me ajudar com esse erro?
sh -c "$(curl -fsSL raw.githubusercontent.com/robbyrus..."
Ao tentar executar esse código ele me apresentar o seguinte erro:
dev-to-uploads.s3.amazonaws.com/up...
E não sei como resolver...
eu pensei que o tutorial era para rodar o oh-my-zsh no windows não no linux no windows :/
fiz o tutorial todo e descobri só no final que eu teoricamente vou ter que migrar todos os meus projetos pro WSL e usar lá só pra ter o oh-my-zsh
triste
@zinit-scheduler:72: command not found: sleep
Tem algum jeito de resolver isso?
No meu terminal aparece esta mensagem ao iniciar:
sleep: cannot read realtime clock: Invalid argument
Como remover?
aconteceu comigo também... Não resolvi, a única coisa que eu sei é que dos 3 comandos que colocamos no final do .zshrc, o terceiro comando de instalação tá falhando, aí ele tenta toda vez e dá o mesmo erro
O meu tava dando tela preta quando tentava usar o terminal no vscode, até parei de usar,
Atualmente uso so o terminal bash do git mesmo
Tutorial maravilhoso. Obrigado!
Teria como fazer o terminal do oh-my-zsh inicializar com o caminho do Desktop?
É só instalar o Windows Terminal da Loja do Windows, abrir o arquivo de configurações dele e editar o profile default, ou ir diretamente no perfil Linux do mesmo arquivo, adicionei a seguinte propriedade:
cara, tem sim. Eu vi algum artigo falando disso, e perdi o link. Atualmente voltei a usar WSL com Hyper/zsh/oh-my-zsh, e precisava disso também. Qdo encontrar, atualizo por aqui.
Como faz para eliminarmos o erro que dá no final da configuração relacionado ao sleep?
Consegui resolvendo o erro do sleep descomentando a linha #72 do arquivo do zsh, salvar, atualizar o terminal, e comentar ela novamente. Eu sinceramente não sei motivo do erro. Mas resolveu fazendo isso.
Meu caro, obrigado pelo conteúdo. A parte de acessar as pastas do linux com
\\wsl$
foi sensacional, também coloquei em Acesso Rápido.