파일 이름을 이미 붙여 넣을 수있는 경우 Ido에게 방해가되지 않도록 지시하는 방법은 무엇입니까?


14

나는 스스로 Ido 모드를 사용하려고합니다. 언젠가는 좋지만 다른 경우에는 매우 어리 석습니다. 여기 가장 큰 실망이 있습니다.

전체 파일 이름으로 로그를 읽은 다음 하나의 이름을 복사하고 해당 파일을 열어보십시오.

이도없이 이것을하는 방법 : C-aC-yC-kRET

Ido에는 두 가지 주요 문제가 있습니다.

  1. 전체 파일 이름이 있으면 입력 할 방법이 없습니다 (첫 번째 슬래시를 제거해야합니다. 그렇지 않으면을 눌러도 //도움이되지 않습니다.

  2. 나머지는 수정하지 않고 파일 이름의 중간 부분을 편집 할 수 없습니다.

아니면 할 수 있습니까?


2
재고 find-fileC-x C-f있는 제품으로 되돌리고 정상적으로 붙여 넣을 수 있습니다 . 그러나 그것은 더 많은 키 입력입니다. 또는 풍부한 기능을 원하고 find-file해당 사용 사례를 여전히 만족시키는 경우 Helm 을 사용할 수 있습니다.
Tu Do

1
아, 덕분에, 아니, 나는이 작업을 수행하지 않습니다 너무 자주 두 개의 별도의 키 입력에 대해 불평 거라고. 이것은 실제로 내 필요에 대한 대답입니다. 감사!
wvxvw

@ 투두 아래 답변으로 내려 놓아야합니다. C-x C-f폴 백이 여러 번 유용하다는 것을 알았 습니다!
Kaushal Modi

답변:


17

ido명령이 활성화되어 있는 동안 ( 이 경우)에 대한 ido-default 바인딩 을 사용하여 동일한 명령 ( 이 경우)의 ido ido-find-file아닌 버전으로 되돌릴 수 있습니다 .find-fileC-x C-fido-fallback-command

당신에게 질문에 대답하기 위해

  • 첫 번째 C-x C-f는을 호출 ido-find-file합니다.
  • 두 번째 C-x C-f는로 넘어갑니다 find-file.
  • 그런 다음 C-a C-y C-k RET복사 한 파일 경로를 미니 버퍼에 넣는 것처럼 일반적으로 수행 할 수 있습니다.

참고 :에서가 ido, C-x C-f C-x C-f같은 일을 할 것입니다 C-x C-f C-f즉, 폴백, find-file.

정보 C-fido 에서 ido-mode, C-f바인딩됩니다 ido-magic-forward-char. 에서 ido.el,

(defun ido-magic-forward-char (아르 그)
  "사용자 입력을 진행하거나 마법의 행동을 수행하십시오.
사용자 입력이 없거나 입력이 끝나면 마법 작업을 수행하십시오.
Cx Cb ... Cf는`ido-find-file '로 전환합니다.
Cx Cf ... Cf Ido가 아닌`find-file '로 대체.
Cx Cd ... Cf Ido가 아닌 간단한`dired '로 대체.
Cx d ... Cf가 Ido가 아닌 'dired'로 대체되었습니다. "

2
나를 위해 단지 C-f로 돌아가는 것이 find-file아닙니다 C-x C-f. 나는 그것을 커스터마이징 한 것을 보지 못한다 ido.
harpo

1
@ harpo 방금 왜 C-x C-f C-f작동 하는지 설명하는 위의 답변을 업데이트했습니다 .
Kaushal Modi

대부분의 작업에 @kaushalmodi에게 감사합니다. 내 대답은 처음에는 주석처럼 간단합니다. 그의 대답이어야합니다 :) 신뢰성에 대한 메모.
Tu Do

절대 경로를 사용할 때 아이돌이 트램으로 잘 재생되지 않기 때문에 이것은 내 정신을 구했습니다. 감사합니다.
Jérémie

6

전체 경로 이름을 다루는 경우 다른 방법이 효과적 일 수 있습니다.

  • 사용 M-x ffap( find-file-at-point) : 경로 이름을 자동으로 읽고 파일을 엽니 다
  • 활성화 M-x compilation-shell-minor-mode하면 경로의 글꼴이 변경되고 "클릭 가능"하게됩니다 (입 또는 RET). 파일을 클릭하면 해당 파일과 특정 줄로 이동하여 사용 next-error하고 previous-error탐색 할 수 있습니다 . 나는 종종 shell-mode 에서처럼 그것을 사용 합니다 .

5

항상 여러 가지 방법이 있으므로 @ abo-abo의 아이디어는 일반적인 find 명령으로 돌아 가지 않고 ido 완료를 활성 상태로 유지하는 변형입니다.

(defun ido-yank ()
  (interactive)
  (let ((path (current-kill 0)))
    (if (file-exists-p path)
        (progn
          (let ((dir (file-name-directory path)))
            (if dir (ido-set-current-directory dir)))
          (setq ido-exit 'refresh)
          (setq ido-text-init (if (file-directory-p path) nil (file-name-nondirectory path)))
          (setq ido-rotate-temp t)
          (exit-minibuffer))
      (yank))))

(define-key ido-file-dir-completion-map (kbd "C-y") 'ido-yank)

이 바인딩으로 :

  • 현재 죽이 유효한 디렉토리 경로 인 경우 시작 ido-find-file, 히트 C-y꼴 디렉토리로 이동 한 다음 파일을 선택하는 이도 완료를 계속 사용합니다.

  • 현재 죽이 유효한 파일 경로 인 경우 시작 ido-find-file, 히트 C-y꼴 디렉토리로 이동하고 완료로 빠지게 파일 이름을 제공하고 해당 파일을 열려면 RET를 기록했다.

  • 현재 킬이 다른 것이면 정상적으로 멈 춥니 다.


let다양한 ido-...변수 를 묶는 것이 아니라 묶는 것이 더 좋지 않을 수 setq있습니까? 지금은 기능 수명 기간 동안 설정하지 않고 영구적으로 값을 설정하는 것처럼 보입니다.
Dan

@ Dan 나는 같은 ido 명령의 패턴을 따르고있다 ido-next-work-directory. 변수가 exit-minibuffer 호출과 후속 새로 고침 동안 살아남을 수 있도록 설정되었다고 생각합니다. 그러나 나는 아직도 아이도 내부를 완전히 이해하지 못했습니다!
glucas

그래, 나는 그들이 어쨌든 새로 고쳐질 지 궁금했다. 그냥 헤딩하고 싶었어
Dan

4

아마도 이런 식으로 :

(define-key ido-file-dir-completion-map (kbd "C-y") 'ido-yank)
(defun ido-yank ()
  (interactive)
  (if (file-exists-p (current-kill 0))
      (ido-fallback-command)
    (yank)))

현재 kill이 존재하는 파일 인 경우 C-y C-y 원하는 작업을 수행 해야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.