Com a suposição de que você chama vi
com o diretório como o último argumento:
vi() {
if [[ -d ${!#} ]]; then
cd "$@"
else
command vi "$@"
fi
}
Título diz tudo. Cerca de 5 vezes por dia, eu digito "vi" quando eu quis dizer "cd", e acabo abrindo um diretório no vi. Está me fazendo PORCAS. Parece que deve haver uma maneira de detectar quando eu digito "diretório vi +" e automaticamente altero para "diretório cd +". Pensamentos?
Além da resposta do @ChrisDown, aqui está outra abordagem: ignorar diretórios
Com essa abordagem, você pode:
vi ./*
e ele iniciará o vi em todos os arquivos no diretório atual, mesmo que contenha subdiretórios, ignorando esses subdiretórios
vi() {
for arg do
[ -d "$arg" ] || set -- "$@" "$arg"
shift
done
[ "$#" -gt 0 ] && command vi "$@"
}
Este apenas faz o vi, em qualquer argumento que não seja um diretório ... Por isso não vai te ensinar a usar o "vi" para "cd";)
E ele não chamará o vi se você acabou de fazer: vi algum diretório (ou seja, o vi incorretamente digitado em vez do cd). Mas ele não irá cd lá automaticamente então, então você ainda se lembra de ter que digitar cd ^^
Eu usei uma maneira "compatível" para alterar as listas de argumentos, para que seja portável para muitas plataformas.
Uma solução é parar completamente de usar cd
. Coloque shopt -s autocd
no seu .bashrc
ou setopt autocd
no seu .zshrc
. Então, para mudar para um diretório diferente, digite o nome do diretório, sem nenhum comando.
Não se esqueça de digitar vi
se você quiser editar um arquivo.
Se você realmente quiser que um único comando mude para um diretório ou edite um arquivo, pode torná-lo uma função:
vi () {
if [ $# -eq 1 ] && [ -d "$1" ]; then
cd -- "$1"
else
command vi "$@"
fi
}
Use o recurso de alias no Unix. Quando você codificar o cd para vi, o problema será resolvido.
Tags bash alias cd-command shell