Detecta automaticamente quando digito "vi", mas significa "cd"?

21

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?

    
por Alex 16.01.2014 / 06:42

4 respostas

38

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
}
    
por 16.01.2014 / 06:49
4

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.

    
por 16.01.2014 / 10:51
1

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
}
    
por 17.01.2014 / 02:59
-6

Use o recurso de alias no Unix. Quando você codificar o cd para vi, o problema será resolvido.

    
por 16.01.2014 / 10:54