2008-10-06 14 views
8

Ich habe eine Kopie von emacs, die ich auf ein paar verschiedene (Windows) Computer von einem USB-Stick verwenden, und ich frage mich, ob es möglich ist, etwas zu erstellen, das einem Bash-Alias ​​oder Symlink in Emacs entspricht ? Etwas, das ich innerhalb von find-file verwenden könnte, ist die Hauptsache, die ich suche, also zum Beispiel: C-f <some link> würde mich irgendwo hinbringen. Zur Zeit muss ich jedes Mal ein neues Defun hinzufügen, wenn ich einen neuen Computer bekomme, was ein bisschen schmerzt und ich würde schwören Ich habe das irgendwo gesehen, aber monatelanges Googeln hat nichts gebracht.Erstellen Sie Aliase in Emacs?

, was ich jetzt habe, ist so etwas wie:

(defun go-awesome() 
    "Find my way to my work home" 
    (interactive) 
    (find-file "c:/cygwin/home/awesome")) 

Aber das fühlt sich increadibly übertrieben und Hacky für nur ein ziemlich hacky Besuch für nur eine Datei zu besuchen, die mich halb regelmäßig besuchen. Und es erfordert viel Aufwand, eine neue Datei zu erstellen.

Das größte Problem dabei ist meiner Meinung nach, dass es nicht in meinen Workflow passt. Wenn ich eine Datei besuchen möchte, mache ich immer C-x C-f, und wenn ich merke, dass "Hey, ich bin bei der Arbeit", dann muss ich C-g M-x go-awesome. Vielleicht wäre es klarer, wenn ich sagte, dass ich in der Lage sein würde, etwas zu tun, das dem ln -s /some/awesome/dir entspricht, aber intern in Emacs, anstatt in das OS integriert, so dass C-x C-f ~/awesome/some/sub/dir auf Windows oder anderswo funktionieren würde.

+0

Bitte erläutern Sie mehr von dem, was Sie suchen. Schreiben Sie Funktionen neu, wenn Sie zu einem neuen Computer wechseln (d. H. Sie haben Ihre .emacs-Datei nicht auf dem USB-Stick)? – dwj

+0

Welche Funktionen schreiben Sie um? (Was ist der Zweck dieser Funktionen, um bestimmte Dateien zu öffnen? ZB (find-config-file)?) Willst du "Cf config-file" gehen und blah.conf automatisch von einem Ort laden, der davon abhängt Auf welcher Maschine benutzt du? –

Antwort

11

Ich bin nicht wirklich klar, was Sie verlangen. Ich speichere meine häufig verwendete Dateien in den Registern in meiner .emacs:

(set-register ?c '(file . "c:/data/common.txt")) 
(set-register ?f '(file . "c:/data/frequent.txt")) 

Dann habe ich mit jump-to-register (C-x r j) in einer Datei springen:

Zum Beispiel: „C-x r j c“ nimmt mich zu c:/data/common.txt (Laden wenn nötig).

Ist es das wonach Sie suchen?

-1

Ich zog diese in die ursprüngliche Frage, aber ich verlasse es hier, weil die Leute darauf reagiert bereits

Das ist viel besser als das, was ich habe, aber was ich fühle mich wie wahrscheinlich existiert ist etwas, das zum Beispiel ersetzen würde:

(defun nuke() 
    "alias delete-trailing-whitespace" 
    (interactive) 
    (delete-trailing-whitespace)) 

und fühlen sich weniger hacky, und wie es tatsächlich zu tun, was es etwas wirklich schwer für sollte zu tun, anstatt das zu tun, was etwas fühlt sich an wie das wirklich sein soll Licht.

Macht das Sinn?

Ihre Zuordnung zu Registern könnte tatsächlich besser als das, was ich suche, obwohl.

+0

Das hätte eigentlich zu der Frage hinzugefügt werden sollen. (Oder vielleicht die Frage klären und dann dies als Antwort posten.) – cjm

2

Wenn Sie einen Alias ​​auf eine Funktion möchten, verwenden Sie defalias:

(defalias 'nuke 'delete-trailing-whitespace) 

Aber wenn Sie beklagen, dass Emacs Funktionsnamen zu lang sind, sollten Sie in partial-completion-mode aussehen.Wenn diese Option aktiviert ist, wird

M-x d-t-w [RET] 

wird delete-trailing-whitespace ausgeführt werden.

0

Ich was Sie wollen, ist eine bestimmte Datei mit nur einem Befehl öffnen Sie ein Tastaturmakro definieren können. Dieses Makro öffnen Sie die Datei ~/.bashrc

C-x(# start defining the macro 
C-x C-f ~/.bashrc 
C-x) # end definition 

Dann können Sie dieses Makro nennen

M-x name-last-kbd-macro 
visitbashrc #give it a name 

dann können Sie ihn beim Namen nennen Mx visitbashrc

Sie die Definition speichern kann eine Datei, .emacs zum Beispiel, indem Sie diese Datei besuchen und die Definition darin einfügen, mit

M-x insert-kbd-macro 
0

Ich habe diese Einstellung unten. Wenn ich zum Beispiel eine Datei auf meinem Desktop (D:/Desktop) finden möchte, tippe ich F3 j F3, und egal, mit welchem ​​Pfad ich angefangen habe, der Minibuffer sagt jetzt "D: \ Desktop \" und ich ' m bereit, einen beliebigen Dateinamen auf dem Desktop einzugeben. Ich setze meine Abkürzung auf j, k, l, i b/c, die sich in der Nähe meiner linken Hand befinden, aber mit dieser Einstellung funktioniert jede Verknüpfung mit bis zu 4 Buchstaben. So können Sie einen Eintrag für Ihre "awsome" Datei hinzufügen, sagen "Ehrfurcht", und Sie können F3 eingeben, die F3 eingeben, um Ihre Datei zu besuchen. Ich weiß nicht, ob Sie danach suchen. aber das mir ein viel Tipparbeit ersparen;)

(global-set-key [f3] 'ffap) 

;comcplete shortcut in minibuffer 
(define-key minibuffer-local-completion-map (kbd "<f3>") 
         'complete-minibuffer-path) 

(defun complete-minibuffer-path() 
    "Extension to the complete word facility of the minibuffer by 
replacing matching strings to a specific path" 
    (interactive) 
    (setq found t) 
    (cond 
    ; just add new entries if needed; shortcut up to 4 letters will work 
    ((looking-back "j" 5 nil) (setq directory "D:/Desktop/")) 
    ((looking-back "k" 5 nil) (setq directory "D:/Documents/")) 
    ((looking-back "l" 5 nil) (setq directory home-dir)) 
    ((looking-back "i" 5 nil) (setq directory "D:/Programs/")) 
    (t (setq found nil))) 
    (cond (found (beginning-of-line) 
       (kill-line) 
       (insert directory)) 
     (t (minibuffer-complete)))) 
0

Diese blog entry definiert fast genau, was ich wollte, im Grunde lasst uns traf mich $ im Minipuffer und dann präsentiert mich mit einer Liste von meinen Lesezeichen, die ich springen kann zu. Ich könnte es zwicken, so dass, wenn ich ein Dateilesezeichen vorschlage, es mich zu der Datei statt des Verzeichnisses bringt, aber das ist ein Nit, besonders in Anbetracht dessen, dass die Datei, von der das Lesezeichen ist, an der Spitze der Liste steht.

2

Hier ist, was Sie brauchen -

  • Lesezeichen definieren, die Kontexte entsprechen den Sie erneut besuchen möchten. Mit Bookmark+ muss dies nicht nur eine Datei sein. Es kann auch mit den Markierungen (gespeichert), eine Reihe von anderen Lesezeichen, ...

  • Verwenden Icicles zusammen mit Lesezeichen + eine ganze Emacs Desktop oder einen Dired Puffer sein. Wann immer Sie C-x C-f usw. verwenden, um eine Datei zu besuchen, können Sie auch visit a file or directory bookmark (gegen den Namen des Lesezeichens). Drücken Sie einfach C-x m, wenn Sie sich im Minibuffer für die Beendigung des Dateinamens befinden.

+0

Danke für die Hinweise auf diese erstaunliche Emacs-Pakete.Freut mich zu sehen, dass icicles ein Paket für Ubuntu ist (beginnend mit Lucid). Bookmark + nimmt einige dumme manuelle Schritte zur Installation, aber es lohnt sich .... – nealmcb