Як сказати Ido вийти з шляху, коли я вже можу просто вставити ім'я файлу?


14

Я намагаюся змусити себе використовувати режим Ido. Деколи це приємно, але в інших випадках вкрай дурно. Ось моє найбільше розчарування.

Я читаю журнал із повними іменами файлів, потім копіюю одне ім’я, спробуйте відкрити цей файл.

Спосіб зробити це без Ido: C-aC-yC-kRET

З Ідо є дві основні проблеми:

  1. Якщо у мене є все ім'я файлу, немає способу ввести це (я повинен видалити першу косу рису, інакше навіть натискання //не допоможе.

  2. Я не можу редагувати проміжні частини імені файлу, залишаючи решту без змін.

Або я можу?


2
Ви можете залишити назад в запас find-fileз C-x C-fі вставити в звичайному режимі. Але потім, це більше натискань клавіш. Або ви можете використовувати Helm, якщо ви хочете, щоб ця функція була багатою find-fileі все ще задовольняла цей спосіб використання.
Tu Do

1
А, дякую, ні, я не роблю цього так часто, щоб скаржитися на два зайвих натискання клавіш. Це фактично відповіло б на мої потреби. Спасибі!
wvxvw

@Tu Do Ви повинні поставити це як відповідь нижче. Я вважаю, що C-x C-fрезервна копія корисна стільки разів!
Каушал Моді

Відповіді:


17

Поки idoкоманда активна ( ido-find-fileу цьому випадку), ви можете повернутися до версії не-ido тієї самої команди ( find-fileу цьому випадку), використовуючи прив'язку C-x C-fза замовчуванням ido для ido-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-fвido в ido-mode, C-fзобов'язаний ido-magic-forward-char. З ido.el,

(defun ido-magic-forward-char (arg)
  Msgstr "Просуньтесь у вводі користувача або виконайте магічну дію.
Якщо немає вводу користувача або в кінці введення, виконайте магічні дії:
Cx Cb ... Cf переключиться на `ido-find-file '.
Cx Cf ... Cf резервне копіювання до "find-file" без Ido.
Cx Cd ... Cf резервне копіювання до не-Ido короткого `dired '.
Cx d ... Cf резервна копія до "Ido 'dired". "

2
Для мене це просто C-fповернутися find-file, а не C-x C-f. Я не бачу, що я це налаштовував (і я, як і інші, тут багато покладаються на резервну копію. idoЦе майже стільки проблем, скільки варто, після того, як я зараз користуюся ним).
гарпо

1
@harpo Я просто оновив відповідь вище, пояснивши, чому C-x C-f C-fтакож працює.
Каушал Моді

Дякуємо @kaushalmodi за більшу частину роботи. Моя відповідь спочатку проста, як коментар. Це повинна бути його відповідь :) Просто записка про достовірність.
Ту чи

Це врятувало мою розсудливість, оскільки ido не грає гарно з бродягою при використанні абсолютних доріжок. Дякую.
Jérémie

6

Зважаючи на те, що ви маєте справу з повними іменами шляху, інші методи можуть працювати:

  • use M-x ffap( find-file-at-point): воно автоматично прочитає ім'я шляху та відкриє файл
  • активуйте, M-x compilation-shell-minor-modeщо змінить шрифт шляхів і зробить їх "клікабельними" (з ротом або RET). Натиснувши на нього, ви перейдете до цього файлу та конкретного рядка, і ви можете використовувати next-errorта previous-errorпереходити до нього. Я часто його використовую, як у режимі оболонки .

5

Оскільки завжди існує більше, ніж один спосіб зробити це, ось варіант ідеї @ abo-abo, який підтримує ido завершення активним, а не повертається до звичайної команди find.

(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 завершення, щоб вибрати файл.

  • Якщо поточне убивство - це дійсний шлях до файлу, ви можете почати ido-find-file, натисніть, C-yщоб перейти до викрученого каталогу та запропонувати ім'я зв'язаного файлу як завершення, і натисніть RET, щоб відкрити цей файл.

  • Якщо поточне вбивство - це щось інше, воно нормально вибивається.


Можливо, не буде краще letзв’язувати різні ido-...змінні, а не setqїх? Зараз, схоже, ви постійно встановлюєте значення, а не робите це протягом життя функції.
Дан

@Dan Я дотримуюся схеми команд ido типу ido-next-work-directory. Я думаю, що змінні встановлюються таким чином, що вони виживають через виклик minibuffer виходу та подальше оновлення. Але я все ще не в повній мірі ідолу внутрішніх справ!
глюкас

Так, мені було цікаво, чи згодом вони оновлюються. Просто хотілося поставити голову.
Дан

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

Якщо поточне вбивство є файлом, який існує, C-y C-y то, ймовірно, слід дати вам те, що ви хочете.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.