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 eza
Assim,alias vim nvim
etc) - 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.
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:
- O tamanho do histórico padrão é de 256.000 comandos. Não vejo nenhum motivo para precisar de mais.
- Se você abrir uma nova guia, tudo o que você já executa (incluindo comandos em sessões abertas) está disponível imediatamente para você
- 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
ouzsh
- 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:
- Às vezes
fish_add_path
Atualizará oPATH
para cada sessão no futuro (com uma “variável universal”) e às vezes atualiza oPATH
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. - 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 fazerexport PATH=$PATH:/whatever
Então eu acho que provavelmente é melhor aprenderset
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
- Eu instalo peixes em algum lugar como talvez
/home/bork/.nix-stuff/bin/fish
- Eu adiciono o novo local do peixe a
/etc/shells
Como uma concha permitida - Eu troco minha concha com
chsh
- Em algum momento meses/anos depois, reinstalo o peixe em um local diferente por algum motivo e removo o antigo
- 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:
- 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
- Os padrões de peixes se sentem bem para mim
- Eu não gasto muito tempo conectado a servidores aleatórios usando outras conchas, para que não haja muita troca de contexto
- 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 usarset
em vez deexport
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.