2013-11-07 2 views
13

Как я могу сделать autocomplete eshell как Bash и Emacs вообще, то есть он предлагает список вариантов, а не произвольный, выбирает один для вас?Сделать вкладку вкладки eshell вести себя как Bash

Например, если у меня есть два каталога «Загрузить» и «Загрузки», когда я набираю «Вниз» и нажимаю «TAB», я ожидаю, что появится еще один буфер и покажет мне выбор. Но eshell просто завершает его для меня, т. Е. Если я нажимаю TAB, он заканчивается «Download»; снова нажмите TAB, он изменится на «Загрузки».

+0

Возможно, вы получаете некоторые помехи от своего пользовательского кода. Попробуйте 'emacs -q': он работает. –

+0

Я пробовал 'emacs -q', и это не сработало. Например, если у меня есть два каталога «Загрузка» и «Загрузки», когда я набираю «Вниз» и нажимаю TAB, я ожидаю, что появится еще один буфер и покажет мне выбор. Но eshell просто завершает его для меня, то есть, если я нажимаю TAB, он заканчивается «Download»; снова нажмите TAB, он изменится на «Загрузки». – Amumu

ответ

6

Используйте это:

(add-hook 
'eshell-mode-hook 
(lambda() 
    (setq pcomplete-cycle-completions nil))) 
+0

Это не сработало. Я попытался добавить его в свой файл инициализации, а также вручную изменить в моем запуске Emacs, а затем запустить новую оболочку. Все еще не было создано мое желание. – Amumu

+0

Вам нужно установить значение переменной в 'eshell-mode-hook' (или использовать setq-default) – juanleon

+0

Спасибо. Оно работает. – Amumu

6
(add-hook 
'eshell-mode-hook 
(lambda() 
    (setq pcomplete-cycle-completions nil))) 

и

(setq eshell-cmpl-cycle-completions nil) 

Оба, как ты просишь, и показать буфер со списком доработок, когда я запускаю Emacs, как 'Emacs -q', чтобы избежать мои собственные настройки. Это с emacs 23.3, вы используете гораздо более старую версию?

Также см. http://www.emacswiki.org/emacs/EshellCompletion, где я впервые пошел, чтобы проверить это.

шаги, чтобы попробовать это:

  1. Начало Emacs с помощью 'Emacs -q' в качестве команды - никаких других аргументов.
  2. Изменения к * нулю * буфер
  3. Paste или типа в одном из выше фрагментов кода
  4. Поместите курсор в конце фрагмента и нажмите «C-е», чтобы выполнить код.
  5. Start eshell
  6. тест
  7. если ни один работает, отчет назад здесь с информации о версии и любые другие соответствующие детали
+0

Спасибо. Я не знал, что мне нужно прикрепить к крючку с помощью eshell-mode. Вещи работают так, как ожидалось. Я использую последние Emacs. – Amumu

2

Вам только нужно иметь следующую строку:

(setq eshell-cmpl-cycle-completions nil) 

eshell-mode автоматически устанавливает pcomplete-cycle-completions на значение eshell-cmpl-cycle-completions локально.

Смежные вопросы