O que está envolvido na obtenção de uma configuração de terminal “moderna”?


Olá! Recentemente fiz uma pesquisa terminal e perguntei às pessoas o que as frustrava. Uma pessoa comentou:

Existem muitas peças para ter uma experiência de terminal moderna. Eu gostaria que tudo saísse da caixa.

Minha reação imediata foi “ah, obter uma experiência de terminal moderno não é tão difícil, você só precisa…”, mas quanto mais eu pensava sobre isso, mais longa ficava a lista “você só precisa…”, e continuei pensando em mais e mais advertências.

Então pensei em fazer algumas anotações sobre o que significa para mim pessoalmente ter uma experiência de terminal “moderna” e o que acho que pode dificultar o acesso das pessoas.

o que é uma “experiência terminal moderna”?

Aqui estão algumas coisas que são importantes para mim, com qual parte do sistema é responsável por elas:

  • suporte multilinha para copiar e colar: se você colar 3 comandos em seu shell, ele não deverá executar todos eles imediatamente! Isso é assustador! (concha, emulador de terminal)
  • história infinita do shell: se eu executar um comando em meu shell, ele deverá ser salvo para sempre, não excluído após 500 entradas do histórico ou algo assim. Também quero que os comandos sejam salvos no histórico imediatamente quando eu os executar, não apenas quando eu sair da sessão do shell (concha)
  • uma dica útil: Eu não posso viver sem ter o meu diretório atual e ramo git atual no meu prompt (concha)
  • Cor de 24 bits: isso é importante para mim porque acho MUITO mais fácil criar um tema para o neovim com suporte a cores de 24 bits do que em um terminal com apenas 256 cores (emulador de terminal)
  • integração da área de transferência entre o vim e meu sistema operacional para que quando eu copiar no Firefox, eu possa simplesmente pressionar p no vim para colar (editor de textotalvez o emulador de SO/terminal também)
  • bom preenchimento automático: por exemplo, comandos como git devem ter preenchimento automático específico de comando (concha)
  • tendo cores em ls (configuração do shell)
  • um tema de terminal que eu gosto: Passo muito tempo no meu terminal, quero que ele tenha uma boa aparência e quero que seu tema corresponda ao tema do meu editor de terminal. (emulador de terminal, editor de texto)
  • fixação automática de terminais: Se um programa imprimir alguns códigos de escape estranhos que bagunçam meu terminal, quero que ele seja redefinido automaticamente para que meu terminal não fique bagunçado (concha)
  • atalhos de teclado: Eu quero Ctrl+left arrow para trabalhar (concha ou aplicativo)
  • ser capaz de usar a roda de rolagem em programas como less: (emulador de terminal e aplicações)

Há um milhão de outras conveniências de terminal por aí e pessoas diferentes valorizam coisas diferentes, mas essas são as que eu ficaria realmente infeliz sem.

como consigo uma “experiência moderna”

Minha abordagem básica é:

  1. use o fish concha. Principalmente não o configure, exceto para:
    • definir o EDITOR variável de ambiente para meu editor de terminal favorito
    • apelido ls para ls --color=auto
  2. use qualquer emulador de terminal com suporte a cores de 24 bits. No passado, usei o GNOME Terminal, o Terminator e o iTerm, mas não sou exigente quanto a isso. Eu realmente não configuro nada além de escolher uma fonte.
  3. usar neovimcom uma configuração que venho construindo lentamente nos últimos 9 anos ou mais (a última vez que excluí minha configuração do vim e comecei do zero foi há 9 anos)
  4. use a estrutura base16 para tematizar tudo

Algumas coisas que afetam minha abordagem:

  • Eu não gasto muito tempo usando SSH em outras máquinas
  • Prefiro usar um pouco o mouse do que inventar maneiras de fazer tudo baseadas no teclado
  • Eu trabalho em muitos projetos pequenos, não em um grande projeto

algumas opções “prontas para usar” para uma experiência “moderna”

E se você quiser uma experiência agradável, mas não quiser gastar muito tempo configurando? Descobrir como configurar o vim de uma maneira que me deixasse satisfeito realmente levou uns dez anos, o que é muito tempo!

Minhas melhores ideias sobre como obter uma experiência de terminal razoável com configuração mínima são:

  • concha: qualquer fish ou zsh com oh-meu-zsh
  • emulador de terminal: quase tudo com suporte a cores de 24 bits, por exemplo, todos estes são populares:
    • linux: Terminal GNOME, Konsole, Terminator, terminal xfce4
    • mac: iTerm (Terminal.app não tem suporte para 256 cores)
    • plataforma cruzada: kitty, alacritty, wezterm ou ghostty
  • configuração do shell:
    • definir o EDITOR variável de ambiente para o seu editor de texto de terminal favorito
    • talvez apelido ls para ls --color=auto
  • editor de texto: essa é difícil, talvez micro ou hélice? Não usei nenhum deles seriamente, mas ambos parecem projetos muito legais e acho incrível que você possa usar todos os comandos usuais do editor GUI (Ctrl-C copiar, Ctrl-V colar, Ctrl-A para selecionar tudo) no micro e eles fazem o que você espera. Eu provavelmente tentaria mudar para o helix, exceto que treinar novamente minha memória muscular vim parece muito difícil. Além disso, o helix ainda não possui uma GUI ou sistema de plugins.

Pessoalmente eu não iria use xterm, rxvt ou Terminal.app como emulador de terminal, porque descobri no passado que faltam recursos básicos (como cores de 24 bits no caso do Terminal.app) que tornam o terminal mais difícil de usar para mim.

Não quero fingir que obter uma experiência de terminal “moderna” seja mais fácil do que realmente é – acho que há dois problemas que tornam isso difícil. Vamos falar sobre eles!

questão 1 para chegar a uma experiência “moderna”: o shell

bash e zsh são de longe os dois shells mais populares, e nenhum deles fornece uma experiência padrão que eu ficaria feliz em usar imediatamente, por exemplo:

  • você precisa personalizar seu prompt
  • eles não vêm com conclusões git por padrão, você precisa configurá-los
  • por padrão, o bash armazena apenas 500 (!) linhas de histórico e (pelo menos no Mac OS) o zsh está configurado apenas para armazenar 2.000 linhas, o que ainda não é muito
  • Acho a conclusão da guia do bash muito frustrante. Se houver mais de uma correspondência, você não poderá navegar por elas

E mesmo que eu adore peixe, o fato de não ser POSIX torna difícil para muitas pessoas fazerem a mudança.

Claro que é totalmente possível aprender como personalizar seu prompt no bash ou qualquer outra coisa, e nem precisa ser tão complicado (no bash eu provavelmente começaria com algo como export PS1='(u@h W$(__git_ps1 " (%s)"))$ 'ou talvez use uma nave estelar). Mas cada uma dessas coisas “não complicadas” realmente faz sentido e é especialmente difícil se você precisar manter sua configuração sincronizada em vários sistemas.

Uma solução extremamente popular para obter uma experiência de shell “moderna” é oh-my-zsh. Parece um ótimo projeto e sei que muitas pessoas o usam com muita alegria, mas já tive dificuldades com sistemas de configuração como esse no passado – parece que agora a base oh-my-zsh adiciona cerca de 3.000 linhas de configuração, e muitas vezes acho que ter um sistema de configuração extra torna mais difícil depurar o que está acontecendo quando as coisas dão errado. Pessoalmente, tenho a tendência de usar o sistema para adicionar muitos plug-ins extras, tornar meu sistema lento, ficar frustrado por estar lento e, em seguida, excluí-lo completamente e escrever uma nova configuração do zero.

questão 2 para chegar a uma experiência “moderna”: o editor de texto

Na pesquisa de terminal que executei recentemente, os editores de texto de terminal mais populares, de longe, foram vim, emacse nano.

Acho que as principais opções para editores de texto de terminal são:

  • use vim ou emacs e configure-o ao seu gosto, você provavelmente poderá ter qualquer recurso que desejar se colocar em prática
  • use o nano e aceite que você terá uma experiência bastante limitada (por exemplo, não acho que você possa selecionar o texto com o mouse e depois “cortá-lo” no nano)
  • usar micro ou helix que parecem oferecer uma experiência pronta para uso muito boa, potencialmente ocasionalmente enfrentam problemas ao usar um editor de texto menos convencional
  • apenas evite usar um editor de texto de terminal tanto quanto possível, talvez use VSCode, use o terminal do VSCode para todas as suas necessidades de terminal e, principalmente, nunca edite arquivos no terminal. Ou eu sei que muitas pessoas usam code como seu EDITOR no terminal.

questão 3: aplicações individuais

A última questão é que às vezes os programas individuais que uso são meio irritantes. Por exemplo, na minha máquina Mac OS, /usr/bin/sqlite3 não suporta o Ctrl+Left Arrow atalho de teclado. Corrigir isso para obter uma experiência razoável de terminal no SQLite foi um pouco complicado, tive que:

  • perceba por que isso está acontecendo (o Mac OS não fornece ferramentas GNU, e o suporte “Ctrl-Seta para a esquerda” vem do GNU readline)
  • encontre uma solução alternativa (instale o sqlite do homebrew, que possui suporte readline)
  • ajuste meu ambiente (coloque o sqlite3 do Homebrew no meu PATH)

Acho que depurar problemas específicos de aplicativos como esse não é realmente fácil e muitas vezes não parece “valer a pena” – muitas vezes acabo lidando apenas com vários pequenos inconvenientes porque não quero passar horas investigando-os. A única razão pela qual consegui descobrir isso é que tenho passado muito tempo pensando no terminal recentemente.

Uma grande parte de ter uma experiência “moderna” usando programas de terminal é apenas usar programas de terminal mais recentes, por exemplo, não posso me incomodar em aprender um atalho de teclado para classificar as colunas topmas em htop Posso simplesmente clicar no cabeçalho de uma coluna com o mouse para classificá-lo. Então eu uso htop! Mas descobrir novas ferramentas de linha de comando mais “modernas” não é fácil (embora eu tenha feito uma lista aqui), encontrar aquelas que eu realmente gosto de usar na prática leva tempo, e se você estiver usando SSH em outra máquina, elas nem sempre estarão lá.

tudo afeta todo o resto

Algo que acho complicado na configuração do meu terminal para deixar tudo “legal” é que mudar uma coisa aparentemente pequena no meu fluxo de trabalho pode realmente afetar todo o resto. Por exemplo, agora não uso o tmux. Mas se eu precisasse usar o tmux novamente (por exemplo, porque estava trabalhando muito com SSH em outra máquina), precisaria pensar em algumas coisas, como:

  • se eu quisesse que a cópia do tmux fosse sincronizada com a área de transferência do sistema por SSH, precisaria ter certeza de que meu emulador de terminal tem suporte para OSC 52
  • se eu quisesse usar a integração tmux do iTerm (que transforma as guias do tmux em guias do iTerm), precisaria mudar a forma como configuro as cores – agora eu as configuro com um script de shell que executo quando meu shell é iniciado, mas isso significa que as cores se perdem ao restaurar uma sessão tmux.

e provavelmente mais coisas nas quais não pensei. “Usar o tmux significa que tenho que mudar a forma como gerencio minhas cores” parece improvável, mas isso realmente aconteceu comigo e decidi “bem, não quero mudar a forma como gerencio as cores agora, então acho que não estou usando esse recurso!”.

Também é difícil lembrar em quais recursos estou confiando – por exemplo, talvez meu terminal atual faz tenho suporte para OSC 52 e como copiar do tmux sobre SSH sempre funcionou, nem percebo que isso é algo que preciso, e então misteriosamente para de funcionar quando troco de terminal.

mude as coisas lentamente

Pessoalmente, embora eu ache que minha configuração não é que complicado, levei 20 anos para chegar a este ponto! Como as alterações na configuração do terminal provavelmente terão consequências inesperadas e difíceis de entender, descobri que, se eu alterar muitas configurações do terminal de uma só vez, será muito mais difícil entender o que deu errado se houver um problema, o que pode ser realmente desorientador.

Então, geralmente prefiro fazer pequenas alterações e aceito que as alterações podem levar MUITO tempo para me acostumar. Por exemplo, deixei de usar ls para eza há um ou dois anos e embora eu goste (porque eza -l imprime tamanhos de arquivo legíveis por humanos por padrão) Ainda não tenho certeza sobre isso. Mas também às vezes vale a pena fazer uma grande mudança, como mudei para o peixe (do bash) há 10 anos e estou muito feliz por ter feito isso.

conseguir um terminal “moderno” não é tão fácil

Tentar explicar como é “fácil” configurar seu terminal só me fez pensar que é meio difícil e que às vezes ainda fico confuso.

Descobri que nunca existe uma maneira perfeita de configurar coisas no terminal que seja compatível com todas as outras coisas. Eu só preciso experimentar algumas coisas, descobrir algum tipo de estado localmente estável que funcione para mim e aceitar que, se eu começar a usar uma nova ferramenta, isso poderá atrapalhar o sistema e talvez eu precise repensar as coisas.



Source link

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *

Botão Voltar ao Topo