[Desafio] - Usando Helix por 1 mês - Dia 1
Olá gente, estou esse mês me desafiando a usar o helix que é um editor baseado em rust por 30 dias.
Sö pra contextualizar, eu uso vim/neovim a um bom tempo e eu estou montando um material de como configurar o neovim do zero, nesse meio tempo tenho que continuar trabalhando, e eu decidi não usar uma vm pra ir configurando em paralelo enquanto minha config estável contuasse me atendendo. Então resolvi testar um editor novo que é em algumas partes inspirado no vim/neovim pra ir usando.
Helix
É um projeto feio em rust e tem como principais features, melhorar a parte de multicursos relacionado ao vim/neovim além de já ter uma configuração lsp pronta pra uso, quase como um mason do neovim só que ele em si não instala os server só detecta os mesmos.
Alguns desafios
Bom primeira coisa que acaba confundindo um pouco é que eu tenho alguns atalhos próprios no neovim e além de ele ter por padrão alguns atalhos estou precisando reaprender a usar do modo dele, uma coisa que é dificil pra mim é desapegar um pouco de algumas formas de navegar do neovim e usar ai fiz no meu obsidian um mapa dos principais atalhos que compartilho com vocês abaixo:
`Ctrl`+`,` | Abre a caixa de diálogo de configurações.
`Ctrl`+`Shift`+`,` | Salva as configurações atuais.
`Ctrl`+`P` | Abre o painel de pesquisa.
`Ctrl`+`B` | Abre a barra lateral.
`Ctrl`+`F` | Abre a barra de pesquisa do editor.
`Ctrl`+`E` | Abre a barra de navegação.
`Ctrl`+`T` | Abre uma nova guia.
`Ctrl`+`W` | Fecha a guia atual.
`Ctrl`+`Shift`+`W` | Fecha todas as guias.
`Ctrl`+`J` | Desloca para baixo uma linha.
`Ctrl`+`K` | Desloca para cima uma linha.
`Ctrl`+`H` | Apaga a palavra anterior.
`Ctrl`+`D` | Apaga a letra anterior.
`Ctrl`+`C` | Copia o texto selecionado.
`Ctrl`+`V` | Cola o texto copiado.
`Ctrl`+`X` | Corta o texto selecionado.
`Ctrl`+`Z` | Desfaz a última alteração.
`Ctrl`+`Y` | Refaz a última alteração.
`Ctrl`+`A` | Seleciona todo o texto.
`Ctrl`+`E` | Move o cursor até o final do texto.
`Ctrl`+`B` | Move o cursor para o início do texto.
`Home` | Move o cursor para o início da linha atual.
`End` | Move o cursor para o fim da linha atual.
`Page Up` | Move o cursor para cima uma página.
`Page Down` | Move o cursor para baixo uma página.
`Left` | Move o cursor para a esquerda.
`Right` | Move o cursor para a direita.
`Up` | Move o cursor para cima.
`Down` | Move o cursor para baixo.
Novos modos
No caso do Helix tem dois modos que estou usando que são bastante importantes, primeiro o modo Space que serve pra navegar entre os arquivos e buffers e o Go To mode que serve pra navegar nos arquivos em si, aqui o principal desafio é que muitas das coisas que estão ali eu já tinha uma forma personalizada de trabalhar no neovim, então estou com o trabalho de reaprender os atalhos até ver na documentação se tem alguma forma de personalizar esses comandos para os que eu já estava usando.
Config
A configuração usa um arquivo .toml e é bem simples de trabalhar com ele vou mostrar as configurações que você configura no .config/helix/config.toml
theme = "catppuccin_mocha"
[editor]
line-number = "relative"
mouse = false
[editor.statusline]
left = ["mode", "spinner"]
center = ["file-name"]
right = ["diagnostics", "selections", "position", "file-encoding", "file-line-ending", "file-type"]
separator = "│"
mode.normal = "NORMAL"
mode.insert = "INSERT"
mode.select = "SELECT"
[editor.lsp]
enable = true
display-messages = false
[editor.file-picker]
hidden = false
[editor.soft-wrap]
enable = true
max-wrap = 25 # increase value to reduce forced mid-word wrapping
max-indent-retain = 0
wrap-indicator = "" # set wrap-indicator to "" to hide it
Uma coisa legal ele já consegue pegar vários temas por default e é só passar o nome do tema.
Na sessão editor eu deixo o número de linhas relativo pois é útil quando você quer pular linhas e desativo a iterção do mouse.
Em editor.statusline eu crio uma linha de status bem simples pra ficar parecida com a que eu usava no neovim.
Em editor.lsp eu habilito o linter e desativo as mensagens de progresso do linter na linha de status.
Em editor.file-picker eu só desativo a opção de esconder arquivos ocultos.
E finalmente me editor.soft-wrap eu habilito algumas opções para fazer a quebra de linha na tela.
Configuração dos linters
No meu caso eu uso majoritariamente python, typescript e rust como linguagens então precisei configurar globalmente os linters de cada uma das linguagens e preciso chegar usando helix --health
pra ver as configurações ou se quero uma linguagem ou framework especifico uso o comando helix --health python
por exemplo.
A config das linguagens fica em .config/helix/languages.toml e meu arquivo no momento está assim:
[[language]]
name = "python"
language-servers = ["pyright", "ruff"]
[language-server.pyright]
command = "pyright-langserver"
args = ["--stdio"]
[language-server.pyright.config.python.analysis]
typeCheckingMode = "basic"
[language-server.ruff]
command = "ruff-lsp"
[language-server.ruff.config.settings]
args = ["--ignore", "E501"]
[language.formatter]
command = "blue"
args = ["--line-length", "88", "--quiet", "-"]
[[language]]
name = "rust"
[language-server.rust-analyzer.config.check]
command = "clippy"
Ainda não fiz as configs relativas a typescript, vue, nuxt e svelte por que nesses dias só fiz pequenos ajustes nos projetos que estão usando essa linguagem.
No mais essa config ainda estou aprendendo e ela não está 100% preciso trabalhar um pouco em cima dela ainda.
Desafios
Bom um dos principais desafios no momento é quando preciso de algo que não está na documentação além de ser até bem abrangente ainda preciso caçar algumas coisas.
Na parte do lsp deu um trabalhinho instalar o linter globalmente e ainda preciso remover algumas coisas que não nele.
Copiar algo do editor e colar por exemplo no navegador no qual estou escrevendo esse artigo não funciona por padrão e ainda não descobri como fazer para habilitar o xclip por exemplo.
Além disso eles possuem um artigo de quem está migrando do vim que é bem útil pra quem está começando.
Por enquanto é isso e vou atualizando conforme for progredindo aqui.