답변:
나는 초기 테스트에 작업 OK 보인다 뭔가 발견 : 기본적으로 바인딩 <tab>
에를 pcomplete-std-complete
,하지만 기능은 어떤 이유로 상호 작용하지 않기 때문에, 당신은 그것을 포장해야합니다
(define-key eshell-mode-map (kbd "<tab>")
(lambda () (interactive) (pcomplete-std-complete)))
pcompete-std-complete
시도가 기록 완료 사용하는 pcomplete
표준 완료 UI와 ivy
기본적으로 우선합니다 (아주 최근의 업데이트를, 그들은 버퍼 eshell에 가까운 점에서 좋은 오버레이 오른쪽에 나타납니다!).
의 소스 코드의 주석 pcomplete-completions-at-point
(이 pcomplete-std-complete
에 따라 다름) 잠재적 인 문제의 몇 가지를 언급 :
;; FIXME: it only completes the text before point, whereas the
;; standard UI may also consider text after point.
;; FIXME: the `pcomplete' UI may be used internally during
;; pcomplete-completions and then throw to `pcompleted', thus
;; imposing the pcomplete UI over the standard UI.
<tab>
입력 줄 끝을 제외하고는 누르지 않는다고 생각하기 때문에 첫 번째 것이 나에게 영향을 미치지 않을 것이라고 생각 합니다. 지금까지 두 번째 문제 표면을 보지 못했습니다.
편집 : eshell의 단점에 익숙하지 않은 사람들 (이것은 완곡 어입니다), 위에서 제안한 것처럼 eshell의 키를 리 바인드하려면 추가해야합니다.이 파일을 init 파일에 넣어야합니다.
(add-hook 'eshell-mode-hook
(lambda ()
(define-key eshell-mode-map (kbd "<tab>")
(lambda () (interactive) (pcomplete-std-complete)))))
당신이 낭비 키 바인딩 - 인 - 어 - 후크 안티 패턴에 대해 나에게 소리하기 전에, 내가 eshell가와의 키맵을 선언 있다고 설명하자 (defvar eshell-mode-map nil)
다음 않는 (setq-local eshell-mode-map (sparse-keymap))
내부 eshell-mode
! (이 코드에는 도움이 ;; FIXME: What the hell!?
됩니다.) 다시 eshell-mode
실행 한 후에야 키를 리 바인드 할 수 없습니다 ! 따라서 후크.
helm
하지는 않았지만 이미 eshell
탭 완성에 방해가되지 않으면 이 수정 사항이에 적용된다고 생각합니다 helm
.
(add-hook 'eshell-mode-hook '(lambda ()
감싸 야 할 것을 추가해야 할 것입니다 .