Come aprire i file in eshell con caratteri jolly


8

Sono molto abituato a digitare in una shell qualcosa del tipo:

emacsclient **/Threshold.java

Dove si Threshold.javatrova un file nidificato in una directory e voglio solo aprirlo per nome.

Quando provo la stessa cosa in eshell, ottengo (ec è un alias per find-file):

ec **/Threshold.java
Wrong type argument: stringp, ("src/main/java/org/elasticsearch/shield/admin/Threshold.java")

Come posso farlo funzionare in eshell?

Risposte:


8
(defun eshell/my-find-file (pattern)
  (mapc #'find-file (mapcar #'expand-file-name pattern)))

quindi utilizzare my-find-file **/Threshold.javada Eshell, se si desidera my-find-filesupportare anche pattern non glob (ad esempio, my-find-file Threshold.java), provare a seguire:

(defun eshell/my-find-file (pattern)
  (if (stringp pattern)
      (find-file pattern)
    (mapc #'find-file (mapcar #'expand-file-name pattern))))

4

Prova questo:

mapcar #'find-file **/Threshold.java

Funziona solo se si **/Threshold.javaespande esattamente in un file. Altrimenti, il secondo file verrà aperto attraverso un percorso relativo, ma basato sulla directory del primo file anziché sulla directory in cui è stato eseguito il comando.


La chiave è che per eshell il carattere jolly diventa doppio *
Yu Shen,

1

Ho scritto questa pratica funzione:

(defun eshell/for-each (cmd &rest args)
    (let ((fn (intern cmd))
          (dir default-directory))
      (dolist (arg (eshell-flatten-list args))
        (let ((default-directory dir))
          (funcall fn arg)))))

Notare la gestione della directory. È quindi possibile chiamare, ad esempio for-each find-file **/Threshold.java OtherFileToo.java,.

Per aprire file da eshell io uso questo: alias ff for-each find-file $*.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.