Existe uma maneira de definir algum tipo de alias para que quando eu fizer isso:
cd some/directory
vim .zshrc
Isso acontece vim ~/.zshrc
?
Responder1
A resposta é muito mais simples do que você pensa, porque você está fazendo a pergunta errada.
Se o que você realmente quer dizer é "como posso criar um alias que me permita editar meu ~/.zshrc
diretório de trabalho atual?" então a resposta é simplesmente:
alias zshconfig="vim ~/.zshrc"
Este exemplo é meu ~/.zshrc
e eu o uso com frequência.
Uma opção ainda melhor, sugerida por@mateen-ulhaqnos comentários abaixo, seria:
alias zshrc="vim ~/.zshrc"
Em outras palavras, não tente criar um alias para o nome do arquivo ou o caminho para o nome do arquivo. Ambas as coisas são possíveis, mas podem criar efeitos secundários imprevisíveis que lhe causarão problemas mais tarde, como@michael-homerapontou.
Mas como você sabe que o seu preferido $EDITOR
é vim
, simplesmente apelide a vim
invocação desse arquivo específico e você estará no negócio. (É muito mais seguro alias de uma combinação específica de comandos e argumentos a uma string incomum que tem menos probabilidade de ser usada fora do contexto.)
De maneira mais geral, porém, meu conselho é que você não se preocupe em otimizar a sequência de dois caracteres ~/
, mas, em vez disso, acostume-se a digitá-la. Vá em frente... estique o dedo mínimo esquerdo como se fosse Eddie Van Halen praticando escalas. (Isso o ajudará a dominar vim
enquanto estiver fazendo isso, já que você provavelmente deveria se acostumar a bater a Esc
tecla com o dedo mínimo!)
À medida que suas habilidades de digitação melhoram, você ganhará memória muscular para a ~/
sequência, o que o ajudará a digitar essa sequência de caracteres com segurança ao se referir a arquivos em seu diretório inicial. Você digitará rapidamente de propósito e não por acidente.
A desvantagem de confiar em aliases é que não importa o quanto eles possam acelerar você em seu computador doméstico, eles o deixarão lento quando você precisar ssh
entrar em algum contêiner Docker remoto na sub-rede privada de um cliente e descobrir que todos os seus aliases desapareceram.
Responder2
Eu realmente não vejo sentido, mas sim. O que você está fazendo é mais complicado do que apenas dar um nome diferente a um comando ou alguns argumentos padrão, então você precisa de uma função, não de um alias.
function vim {
if [[ $# -eq 1 && $1 == .zshrc && ! -e .zshrc ]]; then
set -- ~/.zshrc
fi
command vim "$@"
}
Explicação: quando você executa vim
, ele invocará a função. Na última linha, command vim …
invoca o comando externo e "$@"
passa para ele os argumentos que foram passados para a função. Nesse meio tempo, se houver exatamente um argumento e esse argumento for a string exata .zshrc
e não houver nenhum arquivo chamado .zshrc
no diretório atual, a linha de comando será substituída por ~/.zshrc
. Ajuste essas condições se elas não forem exatamente o que você deseja.
Responder3
Presumivelmente você está usando zsh como seu shell, o que faztem um recurso de "alias global"que permite que você faça isso:
% alias -g .zshrc='~/.zshrc'
% echo .zshrc
/home/mwh/.zshrc
Aquilo é,em qualquer lugarSe a palavra .zshrc
aparecer na linha de comando, ela será substituída por ~/.zshrc
, que estará sujeita à expansão do til como de costume. Tem que ser uma "palavra" de shell própria, portanto não será expandida se for apenas uma substring de um nome mais longo. Isso funciona com qualquer comando.
Os aliases globais são extremamente problemáticos porque eles realmente se expandem para qualquer lugar, silenciosamente, e então você pode, por exemplo, executar rm .zshrc
em outro diretório e mirar em seus próprios dotfiles. Eles também se aplicam dentro de funções do shell, mesmo aquelas já definidas. Neste caso, parece relativamente improvável que cause um problema, mas esteja ciente do potencial para isso. Você pode nomear especificamente um arquivo no diretório atual com ./.zshrc
ou obter a string literal com \.zshrc
ou colocando-o entre aspas.