Я очень люблю ivy
дополнения и люблю, что простого (ivy-mode 1)
достаточно, чтобы получить ivy
почти везде, где Emacs использует какое-то завершение ( completeing-read
я полагаю, что это достигается путем переопределения ). Но это не настройка eshell
для использования ivy
для завершения вкладки. Мне нравится eshell
список кандидатов на завершение, но я бы предпочел, чтобы ivy
пользовательский интерфейс выбирал среди них. Есть ли какой-то способ повторно использовать все, что eshell
нужно для получения кандидатов на завершение и передачи их «плющу»?
16
(add-hook 'eshell-mode-hook '(lambda ()
нужно обернуть вокруг него.pcomplete
стандартный интерфейс завершения.Я нашел то , что , кажется, работает нормально при первоначальном тестировании: по существу Пересвяжите
<tab>
кpcomplete-std-complete
, но так как эта функция не является интерактивным по какой - то причине вам нужно обернуть его:В
pcompete-std-complete
пытаешься использовать доработки , написанные дляpcomplete
со стандартным заканчиванием UI, которыйivy
по умолчанию будет переопределять (с самим последним обновлением, они появляются в хорошем оверлее прямо в eshell буфер вблизи точке!).Комментарии в исходном коде
pcomplete-completions-at-point
(которыйpcomplete-std-complete
зависит от) упоминают пару потенциальных проблем:Я думаю, что первое не повлияет на меня, так как я не думаю, что когда-либо нажимаю,
<tab>
кроме как в конце строки ввода. Я еще не видел вторую проблемную поверхность.РЕДАКТИРОВАТЬ: Для тех, кто не знаком с причудами eshell (это эвфемизм), возможно, я должен добавить это, чтобы перепривязать ключ eshell, как предложено выше, вы должны поместить это в файл инициализации:
Прежде чем кричать на меня за расточительный антипаттерн сочетания клавиш, позвольте мне объяснить, что eshell объявляет свою таблицу ключей с,
(defvar eshell-mode-map nil)
а затем делает(setq-local eshell-mode-map (sparse-keymap))
внутриeshell-mode
! (Код полезен;; FIXME: What the hell!?
.) Это означает, что вы не можете перепривязать ключи до тех пор, пока неeshell-mode
запустите! Отсюда и крюк.источник
helm
еще не указывает наeshell
завершение табуляции, это исправление также применимо кhelm
.