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>파일 이름을 완성 하기 위해 칠 필요가 없습니다 . 그러나 우리는 환경 설정에 대해 논쟁하고 있습니다. 저는 "입력"이 "지점에서 선택"을 의미하고 싶습니다. 그리고 저에게 그것은 "열린 사망"을 의미하지 않습니다. 껍질에 있으면 다른 행동을 기대합니다.
zck

4
나는 zck와 함께 근육 근육 기억은 몇 년 동안 ido를 사용하고 (그리고 가장 기대되는 행동은 드릴 다운되고), 이것은 조타에 익숙해지는 동안 주요 고통 지점이었습니다. 그 후 오른쪽 화살표 키를 사용하여 드릴 다운 (일주일 정도
소요됨

1
나는 또한 zck와 함께 있습니다. ido에서 탐색하는 것은 기본 표준 동작보다 훨씬 직관적입니다. 특히 백 스페이스 키. 검색에서 문자를 삭제하거나 아무것도 삽입되지 않은 경우 폴더로 되돌아갑니다. 이 기능을 사용하기 위해 키를 다시 연결하는 방법이 있습니까?
Fu86

1
현재 투구 2.6.1 원하는 동작은 기본이다.
amitp

답변:


19

나는 또한 많이 사용 ido-mode하고 근육 기억을 훈련했습니다 :) 스타일이 접근 방식 보다 직관적 이라고 생각합니다 . 웹 브라우저의 검색 / 주소 표시 줄과 같이 물건을 검색하고 (일부 문자로 입력) 찾기 (히트 )를 수행합니다. 선택이 디렉토리 인 경우이 디렉토리를 입력하고이 디렉토리에서 다시 검색을 시작합니다. 이것은 나에게 자연스러운 것처럼 보이 므로이 기계공을 강요하기 위해 작은 조언을 썼습니다 .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키를 약간 최적화했습니다 . 무언가를 입력하고 수정하고 싶다면 백 스페이스를 누르십시오. 하나의 문자가 삭제됩니다. 디렉토리의 시작 부분에 있고 다시 백 스페이스를 누르면 한 레벨 위로 이동합니다. 탐색 속도가 크게 향상됩니다!

(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
그러나 Helm 접근법은 재고와 일치 find-file합니다. 그리고 현재 또는 상위 디렉토리에서 Dired를 갑자기 열고 싶지 않을 때 .and ..는 실제로 쓸모가 없습니다. 그리고을 C-l누르는 것보다 빠릅니다 backspace.
Tu Do

나는이 동작을 조금 더 커스터마이징하기 위해 돌고 있습니다. 여기에 조언을 사용하고 fu / helm-find-files-navigate-forward를 직접 바인딩하지 않는 이유가 (kbd "<return>")있습니까? 새로운 함수 내에서 직접 helm-execute-persistent-action을 호출하는 것이 조금 더 깔끔해 보입니다.
zck April

불행히도, 이것은 나를 위해 작동하지 않습니다. 우선, 나는 얻는다 Symbol's value as variable is void: helm-find-files-map. 내가 넣을 때 (helm-mode 1)(require 'helm), 나는 그런 오류가 없지만,이 중 하나가 작동하지 않습니다. 내가 잃어버린 것이 무엇입니까? 내 완전한 init.el입니다 : pastebin.com/drFZsDxW Emacs 버전은 24.4.1 (i686-pc-mingw32)
Geier

나를 위해 작동하지 않았다. 으로도 find-file minibuffer를 define-key시도해 C-h k RET도 여전히 helm-confirm-and-exit-minibuffer바운드로 표시 됩니다.
Rafael Ibraim

@RafaelIbraim 사용 (kbd "RET")
netawater

0

담당자로 인해 Fu86의 답변에 대해서는 언급 할 수 없지만 피기 백하고 있습니다 (정상적인 프로토콜이 아닌 경우 죄송합니다). "helm-find-files-map"으로 인해 그의 대답을 사용하여 void 함수를 얻었습니다. 대신 "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 : //.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.