DEV Community

Pedro Henrique
Pedro Henrique

Posted on • Updated on

WSL com Neovim + Tmux + WezTerm

Recentemente me pediram para escrever um plugin para automatizar algumas tarefas no figma, e animado pelo desafio, aceitei. Eu trabalho primariamente utilizando linux, e isso se tornou um problema, pois para desenvolver o aplicativo, tenho que utilizar a versão desktop do figma, disponível apenas para Windows ou Mac. Como não tenho acesso a um Mac, precisei recorrer ao Windows.

No começo do projeto tentei utilizar o VSCode com o plugin para ter vim motions, mas percebi que os movimentos do Vim eram apenas uma parte do processo. Meu fluxo de trabalho normalmente se concentra inteiramente no terminal, usando Neovim, tmux e, mais recentemente, lazygit. Acostumado com o ambiente GNU/Unix, lidar com o PowerShell foi complicado, e o trabalho simplesmente não fluía bem. Aqui, compartilho minha jornada para adaptar meu fluxo de trabalho ao Windows.

Este não é um tutorial de Neovim, para isso, recomendo ver este vídeo do TJ DeVries para aprender sobre Neovim.

Aqui eu assumo que você já tem git e WSL (Windows Subsystem for Linux) instalados, caso contrário, veja aqui como instalar o WSL.

Este fluxo de trabalho é algo que funciona para mim, pode não funcionar para você. Aproveite o que puder.

WezTerm

O Windows Terminal é suficiente para usar tmux e neovim, mas o WezTerm é um excelente terminal multiplexer escrito em Rust e com configuração em Lua, e como já é o meu terminal de escolha no Linux, pude importar as configurações que já utilizo lá.

Para instalar, basta baixar neste link, e seguir as instruções.

O próximo passo é configurar o WezTerm para sempre abrir com o domínio WSL, e para isso, abra o PowerShell e digite wsl -l -v. O output será algo como:

powershell wsl return

Para configurar o WezTerm, é necessário criar o arquivo .wezterm.lua no diretório $HOME, que no windows é C:\Users\<seu-usuário> (quando precisar acessar utilizando a WSL, o local é /mnt/c/Users/seu-usuário), e inserir a seguinte configuração:

local wezterm = require("wezterm")

local config = {}

config.wsl_domains = {
    {
        name = "WSL:Ubuntu",

-- aqui abaixo coloque o resultado do comando wsl -l -v 
        distribution = "Ubuntu",
    },
}

if wezterm.config_builder then
    config = wezterm.config_builder()
end

config.default_domain = "WSL:Ubuntu"
return config
Enter fullscreen mode Exit fullscreen mode

Salve o arquivo e reinicie o terminal. Para outras configurações, veja a referência aqui.
Com configurações adicionais (zsh + oh-my-zsh + Starship e estilização para o WezTerm), o resultado é este:

wezterm result

tmux

Uma vez que temos o terminal configurado para rodar no WSL, podemos instalar tmux, e o processo irá variar conforme a distro escolhida. No meu caso, como instalei o Ubuntu, posso instalar usando sudo apt install tmux.
Não é necessária nenhuma configuração adicional para rodar o tmux com wsl, mas para rodar neovim recomendo duas configurações importantes:

  • Nem sempre tmux renderiza corretamente as cores quando se roda Neovim (veja a referência no FAQ do tmux aqui). Você pode corrigir isso com o seguinte comando no arquivo .tmux.conf, localizado em /home/seu-usuário (caso não exista, basta criar):
set -as terminal-features ",*:RGB"
set -ag terminal-overrides ",xterm-256color:RGB"
Enter fullscreen mode Exit fullscreen mode
  • Para navegar facilmente entre as tmux-panes e as panes do Neovim, é interessante configurar os seguintes atalhos (obrigado, typecraft!):
# configura o comando "prefixo+r" para recarregar a configuração do tmux
unbind r
bind r source-file ~/.tmux.conf

# configura o prefixo para "ctrl+s"
set -g prefix C-s

# configura para movimentar entre as panes usando "prefixo+letra indicada"
bind-key h select-pane -L
bind-key j select-pane -D
bind-key k select-pane -U
bind-key l select-pane -R
Enter fullscreen mode Exit fullscreen mode

Neovim

Para usar o Neovim, prefiro sempre montar a partir do código-fonte, pois fica sempre fácil de atualizar apenas com git fetch && git pull. Você também pode instalar utilizando a ppa oficial, mas aqui usarei o código-fonte.

  1. Instale as dependências:
    sudo apt-get install ninja-build gettext cmake unzip curl build-essential

  2. Baixe o Neovim em seu diretório de repositórios:
    git clone https://github.com/neovim/neovim

  3. Faça o build:
    cd neovim && make CMAKE_BUILD_TYPE=RelWithDebInfo
    A partir daqui você pode instalar com sudo make install e depois mover o arquivo nvim para /usr/bin (ou seu local padrão de aplicações) ou com cd build && cpack -G DEB && sudo dpkg -i nvim-linux64.deb para criar um arquivo .deb e instalar (caso sua distro seja baseada em Debian). No meu caso, prefiro criar o arquivo e instalar, pois caso seja necessário remover, fica muito mais fácil de desinstalar do sistema.

Com tudo instalado e configurado, você poderá ter uma experiência muito parecida a de um sistema Unix!

resultado final

Caso queira ver minhas configurações completas, pode acessar meu dotfiles e minhas configurações do Neovim.

Você pode também ver meu portfolio aqui: https://pedro-hga.com

Happy coding!

Top comments (0)