ワイルドカードを使用してeshellでファイルを開く方法


8

私はシェルに次のようなものを入力することに非常に慣れています:

emacsclient **/Threshold.java

Threshold.javaディレクトリの深くネストされたファイルはどこにあり、名前でそれを開きたいだけです。

eshellで同じことを試みると、次のようになります(ecはのエイリアスですfind-file)。

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

これをeshellで機能させるにはどうすればよいですか?

回答:


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

次にmy-find-file **/Threshold.java、Eshellから使用します。glob my-find-file以外のパターン(たとえばmy-find-file Threshold.java)もサポートする場合は、以下を試してください。

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

4

これを試して:

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

これ**/Threshold.javaは、1つのファイルに展開する場合にのみ機能します。それ以外の場合、2番目のファイルは相対パスで開かれますが、コマンドが実行されたディレクトリではなく、最初のファイルのディレクトリに基づきます。


キーはESHELLワイルドカードのための二重*になることである
ゆうシェン

1

私はこの便利な関数を書きました:

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

ディレクトリ処理に注意してください。その後、たとえばを呼び出すことができfor-each find-file **/Threshold.java OtherFileToo.javaます。

eshellからファイルを開くには、次のようにしalias ff for-each find-file $*ます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.