Razões eu ainda amo a concha de peixe

Razões eu ainda amo a concha de peixe


Eu escrevi sobre o quanto eu amo peixes nesta postagem do blog de 2017 e, 7 anos de uso todos os dias depois, encontrei ainda mais motivos para adorar. Por isso, pensei em escrever um novo post com as antigas razões pelas quais adorei e alguns motivos.

Isso surgiu hoje porque eu estava tentando descobrir por que meu terminal não quebra mais quando eu cato um binário para o meu terminal, a resposta foi “peixe corrigir o terminal!”, E eu apenas pensei que isso era muito bom.

1. Sem configuração

Em 10 anos de uso de peixes, nunca encontrei uma única coisa que queria configurar. Apenas funciona da maneira que eu quero. Meu arquivo de configuração de peixes só tem:

  • variáveis ​​de ambiente
  • Aliases (alias ls ezaAssim, alias vim nvimetc)
  • ocasional direnv hook fish | source Para integrar uma ferramenta como o Direnv
  • Um script que corro para configurar minhas cores do terminal

Disseram -me que configurar as coisas em peixe é realmente fácil se você quiser configurar algo.

2. Autosugsações da minha história da concha

Minha coisa favorita absoluta sobre o peixe é que eu digito, sugerirá automaticamente (em cinza claro) um comando correspondente que eu corri recentemente. Posso pressionar a tecla de seta direita para aceitar a conclusão ou continuar digitando para ignorá -la.

Aqui está como isso é. Neste exemplo, acabei de digitar a tecla “V” e adivinhou que quero executar o comando VIM anterior novamente.

Razões eu ainda amo a concha de peixe

2.5 Auto -sugestões de shell “inteligentes”

Um dos meus recursos sutis favoritos de preenchimento automático é como o peixe lida com os comandos de preenchimento automático que contêm caminhos neles. Por exemplo, se eu correr:

$ ls blah.txt

Esse comando será preenchido apenas em diretórios que contêm blah.txt – ele não aparecerá em um diretório diferente. (Aqui está um breve comentário sobre como funciona)

Como exemplo, se neste diretório eu digito bash scripts/apenas sugerirá comandos de história, incluindo arquivos que realmente existem Na pasta Scripts do meu blog, e não as dezenas de outros scripts/ Comandos que executei em outras pastas.

Eu não entendi exatamente como isso funcionava até a semana passada, parecia que o peixe era magicamente capaz de sugerir os comandos certos. Ainda parece um pouco como mágica e eu amo isso.

3. Polar comandos multilinas

Se eu copiar e colar várias linhas, o Bash executará todas elas, assim:

(bork@grapefruit linux-playground (main))$ echo hi
hi
(bork@grapefruit linux-playground (main))$ touch blah
(bork@grapefruit linux-playground (main))$ echo hi
hi

Isso é um pouco alarmante – e se eu realmente não querer Para executar todos esses comandos?

Os peixes colarão todos eles em um único prompt, para que eu possa pressionar Enter se eu realmente quiser executá -los. Muito menos assustador.

bork@grapefruit ~/work/> echo hi

                         touch blah
                         echo hi

4. Conclusão da guia Nice

Se eu correr ls E pressione a guia, ele exibirá todos os nomes de arquivos em uma grade agradável. Eu posso usar a guia, a guia Shift+ou as teclas de seta para navegar na grade.

Além disso, eu posso guiar completo do meio de um nome de arquivo – Se o nome do arquivo começar com um personagem estranho (ou se não for muito exclusivo), posso digitar alguns caracteres do meio e pressionar a guia.

Aqui está como é a conclusão da guia:

bork@grapefruit ~/work/> ls 
api/  blah.py     fly.toml   README.md
blah  Dockerfile  frontend/  test_websocket.sh

Sinceramente, não completo coisas além dos nomes de arquivos, por isso não posso falar com isso, mas achei a experiência de o Tab concluir os nomes de arquivos para ser muito bom.

5. Bom prompt padrão (incluindo integração do Git)

O prompt padrão do peixe inclui tudo o que quero:

  • nome de usuário
  • nome do host
  • Pasta atual
  • Integração do Git
  • Status da saída do último comando (se o último comando falhar)

Aqui está uma captura de tela com algumas variações diferentes no prompt padrão, incluindo se o último comando foi interrompido (o SIGINT) ou falhou.

6. Bom histórico padrões

Em Bash, o tamanho máximo do histórico é 500 por padrão, presumivelmente porque os computadores costumavam ser lentos e não têm muito espaço em disco. Além disso, por padrão, os comandos não são adicionados ao seu histórico até que você termine sua sessão. Então, se o seu computador travar, você perde algum histórico.

Em peixe:

  1. O tamanho do histórico padrão é de 256.000 comandos. Não vejo nenhum motivo para precisar de mais.
  2. Se você abrir uma nova guia, tudo o que você já executa (incluindo comandos em sessões abertas) está disponível imediatamente para você
  3. Em uma sessão existente, a pesquisa de história incluirá apenas comandos da sessão atual, além de tudo o que estava na história no momento em que você iniciou o shell

Não tenho certeza de quão claramente estou explicando como o sistema de história do peixe funciona aqui, mas é muito bom para mim na prática. Minha impressão é que a maneira como é implementada é que os comandos são continuamente adicionados ao arquivo de histórico, mas o peixe carrega apenas o arquivo de histórico uma vez, na inicialização.

Mencionarei aqui que, se você quiser ter um sistema de história mais sofisticado em outro shell, pode valer a pena conferir o Atuin ou o FZF.

7. Pressione Arrow para pesquisar histórico

Eu também gosto da interface de Fish para o histórico de pesquisa: por exemplo, se eu quiser editar meu arquivo de configuração de peixes, posso apenas digitar:

$ config.fish

e depois pressione a seta para cima para voltar o último comando que incluiu config.fish. Isso será concluído para:

$ vim ~/.config/fish/config.fish

E eu terminei. Isso não é então diferente de usar Ctrl+R em Bash para pesquisar sua história, mas acho que gosto um pouco melhor de tudo, talvez porque
Ctrl+R Tem alguns comportamentos que acho confusos (por exemplo, você pode acabar editando acidentalmente sua história que eu não gosto).

8. O terminal não quebra

Eu costumava ter problemas com Bash onde acidentalmente eu acidentalmente cat um binário para o terminal e quebraria o terminal.

Toda vez que o peixe exibe um rápido, ele tentará consertar seu terminal para que você não acabe em situações estranhas como essa. Eu acho que este é um pouco do código do peixe para evitar terminais quebrados.

Algumas coisas que ele fazem são:

  • ligar echo para que você possa ver os personagens que você digita
  • Certifique -se de que as novas linhas funcionem corretamente para que você não obtenha aquele efeito estranho da escada
  • Redefina a cor do fundo do seu terminal, etc.

Acho que não encontrei nenhum desses problemas “meu terminal está quebrado” há muito tempo, e na verdade nem percebi que isso era por causa de peixes – pensei que as coisas de alguma forma magicamente melhoraram, ou talvez eu não estivesse cometendo tantos erros. Mas acho que era principalmente peixes me salvando de mim mesmo, e eu realmente aprecio isso.

9. Ctrl+S está desativado

Também relacionado aos terminais de quebra: os peixes desabilitam Ctrl+S (que congela seu terminal e você precisa se lembrar de pressionar Ctrl+Q para descongelá -lo). É um recurso que eu nunca quis e estou feliz por não tê -lo.

Aparentemente você pode desativar Ctrl+S em outras conchas com stty -ixon.

10. Bom sintaxe destacando

Por padrão, comandos que não existem são destacados em vermelho, como este.

11. Loops mais fáceis

Acho a sintaxe do loop nos peixes muito mais fácil de digitar do que a sintaxe do Bash. Parece o seguinte:

for i in *.yaml
  echo $i
end

Além disso, adicionará o recuo em seus loops, o que é bom.

12. Edição de multilina mais fácil

Relacionado aos loops: você pode editar comandos multilines com muito mais facilidade do que em bash (basta usar as teclas de seta para navegar no comando multiline!). Além disso, quando você usa a seta para cima para obter um comando multiline de sua história, ele mostrará todo o comando da mesma maneira que você digitou em vez de esmagar tudo em uma linha como o Bash:

$ bash
$ for i in *.png
> do
> echo $i
> done
$ # press up arrow
$ for i in *.png; do echo $i; done ink

13. Ctrl+seta esquerda

Pode ser apenas eu, mas eu realmente aprecio que o peixe tenha o Ctrl+left arrow / Ctrl+right arrow Atalho de teclado para se mover entre as palavras ao escrever um comando.

Sinceramente, estou um pouco confuso sobre de onde está vindo esse atalho de teclado (o único atalho de teclado documentado para isso que posso encontrar no peixe é Alt+left arrow / Alt + right arrow o que parece fazer a mesma coisa), mas tenho certeza de que isso é um atalho de peixe.

Algumas anotações sobre como fazer este atalho para funcionar / de onde vem:

  • Uma pessoa disse que precisava mudar seu emulador de terminal do “Linux Console” Keybindings para “Padrão (XFree 4)” para fazer com que funcione em peixes
  • on Mac OS, Ctrl+left arrow Switches Workspaces por padrão, então tive que desligar isso.
  • Aparentemente, o Ubuntu configura a bibliotedline em /etc/inputrc fazer
    Ctrl+left/right arrow Volte/adiante uma palavra, para que funcione no Ubuntu e talvez em outras distritos do Linux também. Aqui está uma pergunta sobre o pilhas falando sobre isso

Uma desvantagem: nem tudo tem uma integração de peixes

Às vezes, as ferramentas não têm instruções para integrá -las com peixes. Isso é irritante, mas:

  • Descobri que isso melhorou nos últimos 10 anos, pois o peixe ficou mais popular. Por exemplo, o VirtualEnv da Python tem uma integração de peixes há muito tempo.
  • Se eu precisar executar um comando POSIX Shell bem rápido, sempre posso executar bash ou zsh
  • Fiquei muito melhor ao longo dos anos na tradução de comandos simples para a sintaxe do peixe quando preciso

Meu maior dia-a-dia para aborrecer é provavelmente que, por qualquer motivo, ainda não estou acostumado a pescar sintaxe para definir variáveis ​​de ambiente, fico confuso sobre set vs. set -x.

Outra desvantagem: fish_add_path

O peixe tem uma função chamada fish_add_path que você pode executar para adicionar um diretório ao seu PATH assim:

fish_add_path /some/directory

Adoro a ideia e costumava usá -lo o tempo todo, mas parei de usá -lo por dois motivos:

  1. Às vezes fish_add_path Atualizará o PATH para cada sessão no futuro (com uma “variável universal”) e às vezes atualiza o PATH
    Apenas para a sessão atual. É difícil para mim dizer qual será: em teoria, os documentos explicam isso, mas eu não consegui entendê -los.
  2. Se você precisar remover o diretório do seu PATH Algumas semanas ou meses depois, porque talvez você tenha cometido um erro, isso também é meio difícil de fazer (há instruções nesses comentários sobre esse problema do Github).

Em vez disso, apenas atualizei meu caminho como esse, da mesma forma que eu faria em Bash:

set PATH $PATH /some/directory/bin

na compatibilidade do POSIX

Quando comecei a usar peixe, você não poderia fazer coisas como cmd1 && cmd2 – Isso reclamaria “Não, você precisa correr cmd1; and cmd2” em vez de.

Parece que, ao longo dos anos, o peixe começou a aceitar um pouco mais de sintaxe no estilo Posix do que costumava, como:

  • cmd1 && cmd2
  • export a=b Para definir uma variável de ambiente (embora isso pareça um pouco limitado, você não pode fazer export PATH=$PATH:/whatever Então eu acho que provavelmente é melhor aprender set em vez de)

no peixe como uma concha padrão

Mudar minha concha padrão para o peixe é sempre um pouco irritante, ocasionalmente me aprofomei em uma situação em que

  1. Eu instalo peixes em algum lugar como talvez /home/bork/.nix-stuff/bin/fish
  2. Eu adiciono o novo local do peixe a /etc/shells Como uma concha permitida
  3. Eu troco minha concha com chsh
  4. Em algum momento meses/anos depois, reinstalo o peixe em um local diferente por algum motivo e removo o antigo
  5. oh não!!! Eu não tenho shell válido! Não posso mais abrir uma nova guia terminal!

Isso nunca foi um problema importante, porque eu sempre tenho um terminal aberto em algum lugar onde posso resolver o problema e me salvar, mas é um pouco alarmante.

Se você não quiser usar chsh Para mudar sua concha para peixe (o que é muito razoável, talvez eu não deva estar fazendo isso), a página do Wiki Arch tem algumas boas sugestões – configure seu emulador de terminal para executar peixes ou adicionar um exec fish para o seu .bashrc.

Eu nunca realmente aprendi a linguagem de script

Além de escrever um loop for interativamente na linha de comando, nunca aprendi realmente a linguagem de script de peixe. Eu ainda faço todos os meus scripts de casca em Bash.

Acho que nunca escrevi uma função de peixe ou if declaração.

Parece que o peixe está ficando muito popular

Eu fiz uma pesquisa altamente não científica em Mastodon perguntando às pessoas que concha elas usam interativamente. Os resultados foram (de 2600 respostas):

  • 46% Bash
  • 49% ZSH
  • 16% de peixe
  • 5% outro

Eu acho que 16% para peixes é bastante notável, pois (até onde eu sei) não há nenhum sistema em que o peixe seja a concha padrão, e meu senso é que é muito comum apenas se manter no shell padrão do seu sistema.

Parece uma grande conquista para o projeto de peixes, mesmo que talvez meus seguidores de mastodon tenham mais probabilidade do que o usuário médio da Shell de usar o peixe por algum motivo.

Para quem os peixes podem estar certos?

O peixe definitivamente não é para todos. Eu acho que gosto porque:

  1. Eu realmente não gosto de configurar minha concha (e honestamente meu ambiente de desenvolvimento em geral), quero que as coisas “apenas funcionem” com as configurações padrão
  2. Os padrões de peixes se sentem bem para mim
  3. Eu não gasto muito tempo conectado a servidores aleatórios usando outras conchas, para que não haja muita troca de contexto
  4. Gostei tanto de suas características que estava disposto a reaprender como fazer algumas coisas “básicas”, como usar parênteses (seq 1 10) para executar um comando em vez de backticks ou usar set em vez de export

Talvez você também seja uma pessoa que gostaria de peixe! Espero que mais algumas pessoas que pescam possam encontrá -lo, porque passo muito do meu tempo no terminal e isso tornou esse tempo muito mais agradável.



Postagens Similares

Deixe um comentário

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