Domanda

Ho una copia di emacs che uso su un paio di computer (windows) diversi da una chiavetta USB e mi chiedo se sia possibile creare qualcosa che sia una specie dell'equivalente di un alias bash o di un link simbolico all'interno emacs? Qualcosa che potrei usare in find-file è la cosa principale che sto cercando, quindi ad esempio: C-f <some link> mi porterebbe da qualche parte. Attualmente devo aggiungere una nuova defun ogni volta che arrivo a un nuovo computer, il che è solo una specie di dolore e giuro l'ho visto da qualche parte, ma mesi di googling non hanno prodotto nulla .

Quello che ho in questo momento è qualcosa di simile:

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

Ma questo sembra irrefrenabilmente esagerato e burrascoso solo per aver visitato un discreto baccano per aver appena visitato un file che visito semi-regolarmente. E richiede un grande sforzo per impostare un nuovo file.

Il problema più grande, tuttavia, secondo me è che non si adatta al mio flusso di lavoro. Quando voglio visitare un file lo faccio sempre C-x C-f, e se mi rendo conto che & Quot; ehi, sono al lavoro & Quot; quindi devo C-g M-x go-awesome. Forse sarebbe più chiaro se dicessi che volevo essere in grado di fare qualcosa che è l'equivalente di un ln -s /some/awesome/dir ma interno a emacs, invece che integrato nel sistema operativo, in modo che C-x C-f ~/awesome/some/sub/dir funzionasse su Windows o ovunque il resto.

È stato utile?

Soluzione

Non sono molto chiaro su cosa stai chiedendo. Archivo i miei file di uso comune nei registri nei miei .emacs:

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

Quindi posso passare a un file con jump-to-register (C-x r j):

Ad esempio, " C-x r j c " mi porta a c:/data/common.txt (caricandolo se necessario).

È quello che stai cercando?

Altri suggerimenti

Se si desidera un alias per una funzione, si utilizza defalias:

(defalias 'nuke 'delete-trailing-whitespace)

Ma se ti lamenti del fatto che i nomi delle funzioni di Emacs sono troppo lunghi, dovresti esaminare partial-completion-mode. Con quello attivato,

M-x d-t-w [RET]

verrà eseguito delete-trailing-whitespace.

Ecco cosa ti serve -

  • Definisci i segnalibri che corrispondono ai contesti che desideri rivisitare. Con Bookmark+ non è necessario un file. Può anche essere un intero desktop Emacs o un buffer Dired con i suoi contrassegni (salvati), una serie di altri segnalibri, ...

  • Usa Ghiaccioli insieme a Segnalibro + . Ogni volta che usi Cx Cf ecc. Per visitare un file, puoi anche visita un file o un segnalibro di directory (completo rispetto al nome del segnalibro). Premi C-x m quando sei nel minibuffer per il completamento del nome del file.

I quello che vuoi è aprire un determinato file con solo un comando che puoi definire una macro da tastiera. Questa macro apre il file ~ / .bashrc

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

Quindi puoi nominare questa macro

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

quindi puoi chiamarlo per nome M-x visitbashrc

Puoi salvare la definizione in un file, ad esempio .emacs visitando questo file e inserendo la definizione in esso, con

M-x insert-kbd-macro

Ho questa configurazione qui sotto. Quindi, ad esempio, se voglio trovare un file sul mio desktop (D: / Desktop), digito F3 j F3 e, indipendentemente dal percorso che ho iniziato, il minibuffer ora dice & Quot; D: \ Desktop \ " e sono pronto a digitare qualsiasi nome di file sul desktop. Ho impostato il mio collegamento su j, k, l, i b / c quelli sono vicini a dove si trova la mia mano sinistra, ma con questa configurazione, qualsiasi collegamento fino a 4 lettere funzionerà. Quindi puoi aggiungere una voce per il tuo & Quot; awsome & Quot; file, dì " timore " ;, e puoi digitare F3 timore di entrare F3 per visitare il tuo file. Non so se questo è quello che stai cercando; ma questo mi fa risparmiare un sacco di battitura;)

(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)))) 

Questo post di blog definisce quasi esattamente quello che volevo, in pratica fammi premere $ nel minibuffer e poi mi presenta un elenco dei miei segnalibri che posso saltare a . Potrei modificarlo in modo che se specifico un segnalibro di file mi porti al file anziché alla directory, ma questo è un nit, specialmente considerando che il file di cui il segnalibro tende ad essere in cima alla lista comunque.

Ho spostato la domanda nella domanda originale, ma la lascio qui perché le persone hanno già risposto

È molto meglio di quello che ho, ma quello che sento probabilmente esiste è qualcosa che potrebbe sostituire, ad esempio:

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

e ti senti meno confuso, e come se stesse effettivamente facendo quello che doveva fare, invece di fare qualcosa di veramente pesante per quello che sembra qualcosa che dovrebbe essere davvero leggero.

Ha senso?

La tua assegnazione ai registri potrebbe in realtà essere migliore di quello che sto cercando, però.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top