Нет завершения табуляции для IPython в текстовом режиме Emacs

Когда я запускаю IPython внутри emacs в текстовом режиме (т.е. внутри терминала), я не получаю завершения табуляции. Вместо завершения табуляции выполняется переход на четыре пробела.

Когда я запускаю emacs в обычном режиме графического интерфейса, завершение табуляции прекрасное.

Есть ли способ исправить это для текстового режима?

Я использую Linux Mint 15, Emacs 24.3 и IPython 1.1.0.


person Mads Jensen    schedule 14.11.2013    source источник
comment
Получаете ли вы правильную подсветку синтаксиса Python в терминале? Если нет, emacs может не определить, что это файл python. Если подсветка синтаксиса правильная, что выводит C-h k TAB (в основном, к чему привязана клавиша)   -  person juanleon    schedule 14.11.2013
comment
Кроме того, проверьте буфер Messages на наличие ошибок или предупреждений, которые вы не получаете в режиме графического интерфейса.   -  person juanleon    schedule 14.11.2013
comment
спасибо за ответы. Я сделал C-hk TAB. В текстовом режиме я получил: TAB runs the command indent-for-tab-command, which is an interactive, а в режиме графического интерфейса я получил: <tab> runs the command python-shell-completion-complete-or-indent, which is an interactive compiled Lisp function in python.el'.` Думаю, это причина различного поведения.   -  person Mads Jensen    schedule 14.11.2013
comment
Вы уверены, что запускаете один и тот же Emacs в графическом интерфейсе и в терминальных случаях? Может быть, ваша настройка $ PATH не такая?   -  person Stefan    schedule 15.11.2013


Ответы (3)


Попробуй это:

(eval-after-load "python"
  '(define-key inferior-python-mode-map "\t" 'python-shell-completion-complete-or-indent)

Если это работает для вас, у вас может быть проблема с неправильной конфигурацией, которая мешает правильной загрузке режима python в вашей настройке.

person juanleon    schedule 14.11.2013
comment
это работает. Но при запуске выдает ошибку: Symbol's value as variable is void: python-shell-completion-complete-or-indent - person Mads Jensen; 15.11.2013
comment
@dYz IMO для определения нужна цитата: '(define-key, поэтому он не оценивается при чтении. Кстати, текущий python.el действительно устанавливает TAB таким образом, возможно, просто обновите его. - person Andreas Röhler; 15.11.2013
comment
Исправлено согласно комментарию @AndreasRöhler - person juanleon; 15.11.2013
comment
Спасибо!, это помогло. Кажется, у меня есть python.el из Emacs 24.2, а не 24.3. - person Mads Jensen; 15.11.2013

Недавно я столкнулся с той же проблемой и после некоторого поиска обнаружил, что эта проблема вызвана разницей между <tab> и TAB. В вики Emacs есть страница, описывающая разницу: http://www.emacswiki.org/emacs/TabKey .

В моем python.el python-shell-completion-complete-or-indent привязан к <tab>, что отлично работает для графического интерфейса, но не для CLI. Измените привязку на TAB, чтобы решить эту проблему.

person Haochen Wu    schedule 27.05.2015

Запускайте IPython не из чистой оболочки, а из python-режима.

т.е. M-x run-python RET с поставляемым python.el, соответствующим образом настроив python-shell-interpreter.

Отв. M-x IPython RET с python-mode.el

person Andreas Röhler    schedule 14.11.2013
comment
Вот как я запускаю IPython в Emacs. Я использую python.el, поставляемый с Emacs. - person Mads Jensen; 15.11.2013
comment
@dYz Хорошо, видя, что ключ просто не установлен по умолчанию, как вам это нужно. - person Andreas Röhler; 15.11.2013