Posso encurtar meus comandos de diretório no Ubuntu?

7

Ao trabalhar em um aplicativo rails eu gosto de abrir todos os meus arquivos através da linha de comando como assim

CD my_app
gedit app/views/user/show.HTML.erb

Existe uma maneira que eu poderia encurtar isso para que eu pudesse escrever algo como

gedit  user_views/show.HTML.erb

Eu gostaria que o console permanecesse no diretório principal, eu não gosto de ter que digitar app / controller / user_controler.rb toda vez que eu quiser abrir o controlador de usuário. Eu sei que eu poderia simplesmente abrir o arquivo com meu mouse, mas eu sinto que mudar de um teclado para outro quebra meu foco um pouquinho. Quando eu posso apenas tocar no teclado, parece que eu tenho um fluxo de trabalho mais suave.

    
por Spencer Cooley 20.06.2011 / 23:22

7 respostas

3

Talvez crie um link simbólico no diretório principal.

ln -s app/views/user/ user_views

criará um link simbólico no diretório principal / de trabalho que atualizará os arquivos em app / views / user. então, fazer um ls -l mostrará algo como:

user_views -> app/views/user/

Dessa forma, você pode simplesmente ir

$ gedit user_views/show.html.erb

você também pode considerar apenas configurar um var

como

$ VIEWS='app/views/user/'

que permitiria que você fosse

$ gedit $VIEWS/show.html.erb

você pode considerar colocar isso no seu perfil bash, para que ele não precise ser definido novamente em cada sessão.

mais em links symblic

mais no perfil do bash e definindo uma variável de ambiente.

EDITAR

Em minha caminhada para casa, imaginei por que alguém iria querer que um link simbólico pulasse apenas um diretório?

/ apps / exibições / use

neste caso, o views dir. Você está ciente de qual guia vai fazer?

Eu lembro que demorei alguns meses para aprender esse truque útil.

Digite algo como o seguinte e clique na guia

$ gedit a

clique na guia e provavelmente concluirá o app deixando você com

$ gedit app/

digite v e pressione a tecla novamente, provavelmente você obterá

$gedit app/views/

pressione a tecla duas vezes para listar todas as opções possíveis. Isso funciona em utilitários, bem como dir e arquivos.

Digitando

$ ged

e a aba de bate-papo completará o gedit. Isso deve acelerar um pouco.

    
por 21.06.2011 / 00:05
2

Não sei se isso ajuda, mas há uma variável de shell usada muito raramente chamada CDPATH . CDPATH é muito parecido com a variável PATH para comandos. Quando você faz um cd , ele pesquisa os CDPATH dos diretórios que correspondem ao seu CDPATH .

Por exemplo:

CDPATH=.:/usr/local:$HOME/projects

Se eu fizesse:

cd jiff/source

O comando do CD procuraria um ./jiff/source , depois um /usr/local/jiff/source e, em seguida, um $HONE/projects/jiff/source . Se houver um diretório $HOME/projects/jiff/source , o diretório será alterado para lá.

Isso não resolverá seu problema em que você pode simplesmente digitar um caminho parcial e ter seu comando executado, mas você poderia adicionar myapp/app/view à sua variável de ambiente CDPATH e fazer isso:

$ cd user
$ gedit show.html.erb

A outra coisa que você pode fazer é alias o comando gedit para _gedit , e então escrever um script de shell rápido para pegar o "nome do arquivo", procurar uma árvore de diretórios que corresponda ao que você colocou e então editar o arquivo. Isso é algo que os usuários do Kornshell fazem para obter o equivalente do prompt PS1=\u@\h:\w PS que os usuários BASH possuem. Adicione algo assim ao seu arquivo .bashrc :

alias _gedit=gedit

function gedit {
    fileName=$(basename $0)
    dirName=$(dirname $0)
    for directory in app/controller my_app/app/view
    do
       if [[ -d "$directory/$dirName" ]]
       then
           $directory/$0
           break
       fi
   done
}

Agora, se você digitou gedit user_controler.rb e houver um arquivo app/controler/user_controler.rb , ele editará app/controller/user_controler.rb

    
por 21.06.2011 / 03:00
2

Dê uma olhada em diretórios de navegação eficiente no Unix , que contém alguns recursos úteis Funções de bash e aliases.

    
por 21.06.2011 / 09:45
1

Já pensou em usar variáveis de shell?

user@localhost $ USERVIEWS='app/views/user/'
user@localhost $ gedit $USERVIEWS/show.html.erb
    
por 21.06.2011 / 00:00
1

Se você tiver nomes de arquivos exclusivos, basta fazer

gedit $(find -name show.html.erb)

O achado será o padrão para procurar o diretório atual, e $ () é equivalente aos backticks, exceto que os backticks são um recurso de shell obsoleto na maioria dos shells modernos. ;)

Você poderia, é claro, encurtar isso ainda mais com um script de shell ao longo das linhas

#!/bin/sh
gedit $( find -name "$1" )

E você pode substituir -name por -iname para economizar o incômodo de usar a tecla shift se tiver nomes de arquivo em maiúsculas.

Não tenho certeza de como o gedit se comporta com vários argumentos (no caso de você não ter nomes de arquivos completamente exclusivos), mas com o vim ele passa pelos arquivos um de cada vez. Então você apenas ": q" até chegar ao que você queria. Eu esperaria que o gedit abrisse várias abas se você tivesse vários nomes. Mas eu não uso editores gráficos pela mesma razão que você não quer usar o mouse para abrir o arquivo. ;)

    
por 21.06.2011 / 21:51
0

Você já considerou o GMate ? É uma seleção de plugins para o Gedit que tornam o desenvolvimento do Rails (entre outras coisas) significativamente mais fácil, fazendo com que pareça o Textmate. Ele resolve seu problema com o plugin Fuzzy Open. Você abre o diretório do projeto no Gedit (acho que usando o plug-in File Browser Pane) e, em seguida, pressiona ctrl-shift-o para ativar o FuzzyOpen. Em seguida, comece a digitar algumas das letras do arquivo que você deseja, e o FuzzyOpen faz a correspondência entre essas e os arquivos e diretórios do seu projeto. Por exemplo, se você começou a digitar:

viushowhe

encontrará todos os arquivos cujo caminho tenha essas letras nessa ordem, por exemplo

app/VIews/USers/sHOW.Html.Erb

Essa mesma série de letras também pode encontrar coisas como:

Vendor/ImaplUgin/Stuff/SHOWmetHEmoney.rb etc.
    
por 21.06.2011 / 02:12
0

Eu tive uma necessidade relacionada de pular para diretórios distantes. Eu escrevi um script que confia no nome do diretório para ser mais ou menos exclusivo, para trabalhar:

#!/bin/bash
#
# usage: pcd NAME
#
# checks, whether the first locate-match is a directory, and jumps into it, if it is.
# If not, the first match is displayed. pcd: perhaps-cd. :)
#
function pcd 
{
    folder=$(locate $1 | egrep "$1$" | head -n 1)
    # echo $folder
    if [[ -d $folder ]]
    then 
        echo $folder
        cd $folder
    else 
    echo "No directory "$folder
    fi
}

Eu obtive do .bashrc para usar a função.

Se o locate não encontrar muitos arquivos para editar, o shell pode exibir 30 ou 40 correspondências como uma lista numerada e solicitar que você insira um número de 0 a 30, 40, para abrir esse arquivo ou pode use o zenity para exibir as correspondências e permita que você as selecione.

O programa de localização depende da execução regular de updatedb. Não funcionará para novos arquivos novos a partir de hoje, mas a maioria dos editores tem uma lista de arquivos abertos recentemente - não é?

O arquivo-caixa de diálogo aberto pode ser modificado para conter diretórios usados com frequência - puxe esses diretórios para a lista de favoritos e para a esquerda.

    
por 21.06.2011 / 02:35