helm-find-filesで<RET>を押してディレクトリを開くにはどうすればよいですか?


25

を実行し#'helm-find-files、ポイントをディレクトリに移動すると、を押す<ret>とそのディレクトリがdiredモードで開かれます。C-jHelmでそのディレクトリに入るために押す必要があります。

私はここでのように<RET>行動したいC-jが、必ずしも他のどこでもそうではない。私がチェックしC-jにバインドされている#'helm-maybe-exit-minibufferのに対し、<RET>にバインドされています#'helm-execute-persistent-action。バインディング<RET>#'helm-maybe-exit-minibufferこのような場合のために動作しますが、他の例を壊す:例えば、中ヘルムオートコンプリートをdescribe-function

では、Helmを使用してファイルを検索するときに、Helmで<RET>そのディレクトリを押して開くにはどうすればよいですか?


1
@TuDo私は慣れていますが、ido-mode押す<RET>とフォルダを選択してその中のファイルを見つけます。これは、ファイルを見つけようとするときの最も一貫した動作であると思います。ファイルが開いていることがわかったときに何をしたいのか。フォルダを見つけたときに何をしたいのかは、その中に入ってファイルを見つけられるようにすることです。
ZCK

2
Helmには逆の動作があります。ファイル上では<RET>、オートコンプリート選択の両方が行われます。<tab>ファイル名の入力を完了するためにヒットする必要はありません。しかし、私たちは好みについて議論しています-私はただ「enter」が「ポイントで物を選択する」ことを意味することを望みます。そして、私にとっては、それは「オープンダイアー」を意味しません。シェルにいた場合、異なる動作を期待します。
ZCK

4
私はここでzckを使用しています。何年もidoを使用してから筋肉の記憶が残っています(そして、そこに最も期待されるアクションはドリルダウンです)。私は(に慣れるために一週間程度かかりました)ドリルダウンするには、右矢印キーを使用してに切り替えているので、
ustun

1
私もzckです。idoでのナビゲーションは、ヘルムの標準的な動作よりもはるかに直感的です。特にバックスペースキー。何も挿入されていない場合、検索から文字を削除するか、フォルダーにジャンプして戻ります。この機能を実現するためにキーを再配線する方法はありますか?
-Fu86

1
Helm 2.6.1の時点では、必要な動作がデフォルトです。
amitp

回答:


19

私もたくさん使っido-modeて、筋肉の記憶を訓練しました:) スタイルはアプローチより直感的だと思います。Webブラウザの検索/アドレスバーと同じように、(いくつかの文字を入力して)ものを検索し、検索(ヒット)にコミットします。選択がディレクトリの場合、このディレクトリに入り、このディレクトリで再度検索を開始します。これは私にとって自然なことのように思えるので、このメカニックを強制するための小さなアドバイスを書きました。idohelmREThelm-execute-persistent-action

(require 'helm)
(defun fu/helm-find-files-navigate-forward (orig-fun &rest args)
  (if (and (equal "Find Files" (assoc-default 'name (helm-get-current-source)))
           (equal args nil)
           (stringp (helm-get-selection))
           (not (file-directory-p (helm-get-selection))))
      (helm-maybe-exit-minibuffer)
    (apply orig-fun args)))
(advice-add 'helm-execute-persistent-action :around #'fu/helm-find-files-navigate-forward)
(define-key helm-find-files-map (kbd "<return>") 'helm-execute-persistent-action)

また、backspaceキーをわずかに最適化しました。何かを入力して修正したい場合は、バックスペースを押します。これにより、1文字が削除されます。ディレクトリの先頭にいて、バックスペースをもう一度押すと、1レベル上に移動します。これにより、ナビゲーションが劇的に高速化されます!

(defun fu/helm-find-files-navigate-back (orig-fun &rest args)
  (if (= (length helm-pattern) (length (helm-find-files-initial-input)))
      (helm-find-files-up-one-level 1)
    (apply orig-fun args)))
(advice-add 'helm-ff-delete-char-backward :around #'fu/helm-find-files-navigate-back)

無用を削除する.と、..非常に最初に、あなたはそれを追加することができhelm-boring-file-regexp-list、構成変数。


1
しかし、ヘルムのアプローチはストックと一貫してfind-fileいます。そして、現在のディレクトリまたは親ディレクトリでDiredを突然開きたい場合、.and ..は本当に役に立たないわけではありません。そして、私はそれをC-l押すよりも速いことがわかりますbackspace
火ドゥ

私はこの動作をもう少しカスタマイズするために戻って回っています-ここでアドバイスを使用し、fu / helm-find-files-navigate-forwardを直接バインドしない理由はあります(kbd "<return>")か?新しい関数内で直接helm-execute-persistent-actionを呼び出すだけで、少しきれいになります。
zck

残念ながら、これは私には機能しません。まず第一に、私は得るSymbol's value as variable is void: helm-find-files-map(helm-mode 1)after を置くと(require 'helm)、そのようなエラーは表示されませんが、機能しません。何が欠けているのでしょうか?完全なinit.elは次のとおりです。pastebin.com/ drFZsDxW Emacsバージョンは24.4.1(i686-pc-mingw32)
Geier

私のために働かなかった。でも、find-fileミニバッファーdefine-keyを試してみるとC-h k RET、まだhelm-confirm-and-exit-minibufferバインドされていると表示されます。
ラファエルイブライム

@RafaelIbraim使用してみてください(kbd "RET")
netawater

0

担当者のためにFu86の答えにコメントすることはできませんが、私はそれをやり遂げています(これが通常のプロトコルでない場合はごめんなさい)。「helm-find-files-map」による彼の答えを使用して、無効な関数を取得しました。代わりに、「helm-map」キーマップを使用することができました。今のところ矛盾はなく、それは私が探していた行動です。

... (define-key helm-map (kbd "<return>") 'helm-execute-persistent-action) ...


-1

私は@ Fu86の答えを得ることができませんでしたが、次のことはうまくいきました:

(defun jkf/helm-find-files-navigate-forward (orig-fun &rest args)
  (if (file-directory-p (helm-get-selection)) 
      (helm-execute-persistent-action)
    (apply orig-fun args)))
(advice-add 'helm-confirm-and-exit-minibuffer 
   :around #'jkf/helm-find-files-navigate-forward)

参照:https : //stackoverflow.com/questions/27652371/how-can-i-change-emacs-helm-find-file-default-action-on-directory-to-be-go-insid

編集

私のソリューションはhelm-20141112.946で動作しますが、helm-20160211.934では動作せず、@ Fu86の答えがソリューションです

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