Kann ich meine Verzeichnisbefehle in Ubuntu verkürzen?

7

Wenn ich an einer Rails-App arbeite, öffne ich alle meine Dateien gerne über die Befehlszeile

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

Gibt es eine Möglichkeit, dies zu verkürzen, so dass ich einfach so etwas schreiben könnte?

gedit  user_views/show.HTML.erb

?

Ich möchte, dass die Konsole im Hauptverzeichnis bleibt. Ich möchte nur nicht jedes Mal app / controller / user_controler.rb eingeben, wenn ich den Benutzer-Controller öffnen möchte. Ich weiß, dass ich die Datei einfach mit der Maus öffnen kann, aber ich habe das Gefühl, dass der Wechsel von der Tastatur zur Maus meinen Fokus ein wenig unterbricht. Wenn ich einfach auf die Tastatur tippen kann, scheint es, als hätte ich einen reibungsloseren Arbeitsablauf.

Spencer Cooley
quelle
Ja, das habe ich mir gedacht, aber da es ein bisschen mit Ruby on Rails zu tun hatte, dachte ich, ein Programmierer hätte vielleicht das gleiche Problem gehabt.
Spencer Cooley
Nun, da es verschoben wurde, sollten Sie vielleicht in Betracht ziehen, eine Antwort auf diese oder eine Ihrer anderen Fragen hier im Superuser zu akzeptieren.
Spieltag

Antworten:

3

Erstellen Sie möglicherweise einen symbolischen Link aus dem Hauptverzeichnis.

ln -s app/views/user/ user_views

erstellt einen symbolischen Link in Ihrem Haupt- / Arbeitsverzeichnis, der die Dateien in App / Ansichten / Benutzer aktualisiert. Wenn ls -ldu also einen Willen tust , zeigst du etwas wie:

user_views -> app/views/user/

Auf diese Weise könnten Sie einfach gehen

$ gedit user_views/show.html.erb

Sie könnten auch in Betracht ziehen, nur eine Variable zu setzen

mögen

$ VIEWS='app/views/user/'

was würde es dir erlauben zu gehen

$ gedit $VIEWS/show.html.erb

Sie können dies in Ihr Bash-Profil aufnehmen, damit es nicht bei jeder Sitzung neu festgelegt werden muss.

mehr zu symblic links

Weitere Informationen zum Bash-Profil und zum Festlegen einer Umgebungsvariablen.

BEARBEITEN

Auf meinem Heimweg fragte ich mich, warum jemand einen symbolischen Link haben wollte, um nur ein Verzeichnis zu überspringen?

/ apps / views / verwenden

in diesem fall sind die ansichten dir. Wissen Sie, was Registerkarte tun wird?

Ich erinnere mich, dass ich ein paar Monate gebraucht habe, um diesen praktischen Trick zu lernen.

Geben Sie etwas wie das folgende ein und drücken Sie die Tabulatortaste

$ gedit a

Drücken Sie die Tabulatortaste, und die App wird wahrscheinlich vollständig sein

$ gedit app/

Geben Sie v ein und drücken Sie erneut die Tabulatortaste

$gedit app/views/

Drücken Sie zweimal die Tabulatortaste, um alle möglichen Optionen aufzulisten. Dies funktioniert sowohl für Dienstprogramme als auch für Verzeichnisse und Dateien.

Tippen

$ ged

Wenn Sie die Tabulatortaste drücken, wird gedit abgeschlossen. Das sollte dich ein bisschen beschleunigen.

Matchew
quelle
Ich denke, dass Symlinking funktioniert, solange Ihr Projekt nicht zu viele Ebenen tief im Dateisystem liegt. Andernfalls müssen Sie möglicherweise mehrere Ebenen durchforsten, bevor Sie zum Link gelangen, um den Zweck zu umgehen.
Phasetwenty
@phasetwenty, ich stimme zu. Ich fühle mich auch wie symlinking, um ein dir zu überspringen, ist dumm. Wenn es viele Höhen und Tiefen gäbe, würde ich stark für Symlinking plädieren. Ich habe meine Antwort bearbeitet und mich gefragt, ob dies möglicherweise der Fall ist, wenn ich nicht weiß, was die Taste [: tab:] bewirkt.
Spieltag
lnist imo die bessere lösung.
Vinicius Kamakura
2

Ich weiß nicht, ob das hilft, aber es gibt eine sehr selten verwendete Shell-Variable namens CDPATH. CDPATHist der PATHVariablen für Befehle sehr ähnlich . Wenn Sie a ausführen cd, wird nach CDPATHVerzeichnissen gesucht, die mit Ihren übereinstimmen CDPATH.

Zum Beispiel:

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

Wenn ich es tat:

cd jiff/source

Der CD-Befehl sucht nach a ./jiff/source, dann nach einem /usr/local/jiff/sourceVerzeichnis und dann nach einem $HONE/projects/jiff/sourceVerzeichnis. Wenn es ein $HOME/projects/jiff/sourceVerzeichnis gibt, wechselt das Verzeichnis dorthin.

Dies wird Ihr Problem nicht lösen, wenn Sie einfach einen Teilpfad eingeben und Ihren Befehl ausführen lassen, aber Sie könnten sagen, Sie fügen myapp/app/viewIhrer CDPATHUmgebungsvariablen hinzu und tun dies:

$ cd user
$ gedit show.html.erb

Das andere, was Sie tun können, ist, den geditBefehl zu _geditaliasen und dann ein schnelles Shell-Skript zu schreiben, um den "Dateinamen" zu übernehmen, nach einem Verzeichnisbaum zu suchen, der Ihren Angaben entspricht , und die Datei dann zu bearbeiten. Dies ist etwas, was Kornshell-Benutzer tun, um das Äquivalent der PS1=\u@\h:\wPS-Eingabeaufforderung zu erhalten, die Sie BASH-Benutzer haben. Fügen Sie Ihrer .bashrcDatei Folgendes hinzu:

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
}

Wenn Sie jetzt tippen gedit user_controler.rbund eine Datei vorhanden ist app/controler/user_controler.rb, wird sie bearbeitetapp/controller/user_controler.rb

David W.
quelle
1

Haben Sie erwogen, Shell-Variablen zu verwenden?

user@localhost $ USERVIEWS='app/views/user/'
user@localhost $ gedit $USERVIEWS/show.html.erb
phasetwenty
quelle
1

Wenn Sie eindeutige Dateinamen haben, können Sie dies einfach tun

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

Die Suche durchsucht standardmäßig das aktuelle Verzeichnis, und $ () entspricht Backticks, mit der Ausnahme, dass Backticks in den meisten modernen Shells eine veraltete Shell-Funktion sind. ;)

Sie können dies natürlich noch weiter verkürzen, indem Sie ein Shell-Skript nach dem Vorbild von verwenden

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

Und Sie können -name durch -iname ersetzen, um die mühsame Verwendung der Umschalttaste zu vermeiden, wenn Sie Dateinamen in Großbuchstaben verwenden.

Ich bin nicht sicher, wie sich gedit mit mehreren Argumenten verhält (falls Sie keine völlig eindeutigen Dateinamen haben), aber mit vim werden die Dateien einzeln durchsucht. Sie müssen also nur ": q" eingeben, bis Sie zu dem gewünschten Ergebnis gekommen sind. Ich würde erwarten, dass gedit mehrere Tabs öffnet, wenn Sie mehrere Namen haben. Ich verwende jedoch keine grafischen Editoren aus dem gleichen Grund, aus dem Sie die Datei nicht mit der Maus öffnen möchten. ;)

dannysauer
quelle
0

Haben Sie GMate in Betracht gezogen ? Es ist eine Auswahl von Plugins für Gedit, die die Rails-Entwicklung (unter anderem) erheblich vereinfachen, indem sie wie Textmate aussehen. Es löst Ihr Problem mit dem Fuzzy Open Plugin. Sie öffnen Ihr Projektverzeichnis in Gedit (ich denke, Sie verwenden das Plugin für den Dateibrowser-Bereich) und drücken dann Strg-Shift-O, um FuzzyOpen zu aktivieren. Beginnen Sie als Nächstes mit der Eingabe einiger Buchstaben der gewünschten Datei, und FuzzyOpen vergleicht diese mit den Dateien und Verzeichnissen in Ihrem Projekt. Wenn Sie beispielsweise mit der Eingabe begonnen haben:

viushowhe

es würde alle Dateien finden, deren Pfad diese Buchstaben in dieser Reihenfolge hat, z

app/VIews/USers/sHOW.Html.Erb

Dieselbe Buchstabenfolge könnte auch Folgendes enthalten:

Vendor/ImaplUgin/Stuff/SHOWmetHEmoney.rb etc.

quelle
0

Ich hatte ein ähnliches Bedürfnis, zu weit entfernten Verzeichnissen zu springen. Ich habe ein Skript geschrieben, das sich darauf stützt, dass der Verzeichnisname mehr oder weniger eindeutig ist, um zu funktionieren:

#!/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
}

Ich habe es von .bashrc bezogen, um die Funktion zu nutzen.

Wenn locate nicht zu viele Dateien zum Bearbeiten findet, zeigt die Shell möglicherweise 30 oder 40 Übereinstimmungen als nummerierte Liste an und fordert Sie auf, eine Zahl zwischen 0 und 30, 40 einzugeben, um diese Datei zu öffnen, oder Sie können zenity to verwenden Zeigen Sie die Übereinstimmungen an und wählen Sie sie aus.

Das Programm locate ist auf die regelmäßige Ausführung von updatedb angewiesen. Ab heute funktioniert es nicht mehr für neue Dateien, aber die meisten Editoren haben eine Liste der zuletzt geöffneten Dateien - oder?

Der Datei-Öffnen-Dialog kann so geändert werden, dass er häufig verwendete Verzeichnisse enthält - ziehen Sie diese Verzeichnisse in die linke Favoritenliste.

Benutzer unbekannt
quelle