[Desafio] - Usando Helix por 1 mês - Semana 1
Sobre alguns desafios anteriores
Bom descobri que tinha um health check pro clipboard
➜ helix --health clipboard
System clipboard provider: wl-paste+wl-copy
No meu caso uso o wayland ai uso o wl-copy e estava funcionando, acontece que só usando o atalho y
ele não copia pro clipboard no caso precisa usar <Space>+y
para copia-lo.
Uma coisa que acho meio perigosa no atalho que eles criaram para deletar caracteres com a letra d
é que no vim temos um atalho dd
que remove a linha inteira isso pode acabar confundindo, principalmente quem já tem a memória muscular pra fazer isso.
Outra coisa meio ruim é que no NeoVIm eu uso muito C+v
+ um jump para copiar e agora preciso fazer essa sequencia.
v + jump + <Space>+y
antes eu fazia assim
<Shift> + v + jump +y
O espaço no final sempre acaba me pegando, mas acredito que é questão de praticar mais também para se adaptar.
As vezes me confundo também com o a
no caso do vim ele entra no mode de inserção no caractere posterior aqui no helix ele pula uma linha e entra no modo de inserção.
Coisas legais que descobri
Uma coisa legal que penso em levar pro meu Neovim é ele já fechar parenteses, chaves e colchetes automaticamente. Porém quando estou editando o script do meu curso de rust as vezes da uma dor de cabeça já que estou usando o mkdocs pra trabalhar com ele e alguns marcações não precisam ser fechadas e ele fecha, acredito que deva haver alguma forma de resolver isso só não sei ainda.
Uma coisa lega que descobri que consigo jogar o editor pra background e depois voltar, mais tarde descobri que também conseguia fazer isso com o vim por que na verdade é um comando do shell em si.
shortcut | description |
---|---|
Ctrl+z | joga o editor pra background |
fg | volta o editor para primeiro plano |
Sobre o LSP
Precisei hoje instalar os servers de svelte e vue
npm install -g svelte-language-server
npm install -g typescript-svelte-plugin
npm install -g @vue/language-server
npm install -g prettier
Ai aproveitei e adicionei uma configuração extra no meu languages.toml
[[language]]
name = "vue"
auto-format = true
formatter = { command = "prettier", args = ["--parser", "vue"] }
Um ponto importante é que o helix é dividido em 3 partes
Language configuration
Nessa sessão fica as configurações especificas que você precisa de uma linguagem e a extensão da mesma.
Grammar configuration
Se tiver uma configuração do tree-sitter disponível ele vai usar normalmente ele vai usar um caminho padrão, no meu caso eu precisei configurar os linters para funcionarem globalmente para o helix conseguir pegar.
Queries
As queries na verdade também fazem parte do tree-sitter e elas provem o highlight e a edentação da linguagem.
fora isso é importando atualizar as gramáticas periodicamente.
helix --grammar fetch
helix --grammar build
Afinal o que é LSP
O Language Server Protocol (LSP) é um protocolo de comunicação usado entre um Editor de Código e um Servidor de Linguagem. Sua principal finalidade é permitir a integração eficiente de funcionalidades de análise de código e ferramentas específicas de linguagem diretamente nos editores de código.
Como Funciona:
- Cliente-Server Model: O LSP segue um modelo cliente-servidor, onde o editor (cliente) se comunica com um servidor específico para uma linguagem de programação.
- Comunicação via JSON-RPC: As mensagens são trocadas entre o cliente e o servidor usando o formato JSON-RPC, o que facilita a implementação em várias linguagens.
No nosso caso o helix tem um client LSP e precisamos instalar os servidores para usa-los com ele.
Afinal o que é o Tree-sitter
O Tree-sitter é um parser de código incremental e gerador de árvores de sintaxe. Ele é projetado para ser eficiente, preciso e capaz de lidar com linguagens de programação complexas.
Como Funciona:
- Análise Incremental: O Tree-sitter realiza análises incrementais, o que significa que, ao modificar o código-fonte, apenas as partes afetadas são reanalisadas, proporcionando uma resposta mais rápida.
- Geração de Árvore de Sintaxe: Ele gera uma árvore de sintaxe para o código-fonte, representando a estrutura hierárquica do mesmo.
Ele é muito importante para eu conseguir navegar pelo código através das arvores que ele gera.
Navegação
Uma coisa nova é a navegação ela tem algumas coisas parecidas com o vim e outras não e precisei fazer uma tabela de navegação para me ajudar a me orientar.
shortcut | description |
---|---|
x | seleciona linha |
v | entra no select mode |
C | Seleciono as mesmas palavras com multi-cursor |
s | Se estiver com linhas selecionadas da pra buscar um padrão dentro da seleção para fazer alteração |
Buscas
shortcut | descipriton |
---|---|
Space+/ | Busca nos arquivos |
Space+f | Busca pelo nome do arquivo |
Uma coisa não muito boa, é que ele ainda não tem uma forma de fazer uma busca dentro dos arquivos, isso é algo que acabo usando muito em projetos grandes então é um ponto ainda pra melhorar. Ele possui uma busca, mas em alguns casos acabou não dando muito certo.
Dica extra
Você tem um tutorial bem legal se você é novato em editores como o vim que é o modo tutor dele:
helix --tutor
É sempre interessante pra quem quer começar olhar esse tutor, no caso do vim também tem e recomendo a todos que olhem.
Próximos cápitulos
Bom acredito que essa semana foi uma semana pra se adaptar e pensar algumas coisas de modo diferente nesse semana tenho um pouco mais de trabalho planejado com python e svelte então vou explorar um pouco mais o trabalho com os buffers e registradores além das diversas features relacionadas a manipular a seleção de código e multi cursores e dar uma refinada na minha configuração e criar alguns atalhos, então nos vemos na próxima semana.