Emacs удаленная оболочка - PullRequest
10 голосов
/ 16 июля 2009

Я склонен запускать свою оболочку в emacs, но когда я использую ее для запуска ssh на другом компьютере, это нарушает завершение табуляции. Есть ли способ это исправить?

Ответы [ 7 ]

9 голосов
/ 16 июля 2009

Попробуйте:

M-x cd /hostname:/current/path/in/the/shell

Это должно настроить ange-ftp (или tramp), а затем завершение TAB для путей должно работать правильно для этой оболочки - пока вы не войдете в другую машину.

Вы можете настроить фильтр процессов comint для распознавания, когда вы набираете ssh, чтобы сделать это автоматически, но это трудно понять, так как он должен вернуться после выхода из сеанса ssh, но не будет обманут другие виды использования exit.

Для автоматизированного решения я бы предложил расширить подход, который я лично использую , чтобы синхронизировать Emacs с текущим рабочим каталогом буфера оболочки. Просто добавьте дополнительный бит информации с именем хоста и используйте его для установки имени хоста и пути, как показано выше.

2 голосов
/ 27 октября 2009

в другой теме, кто-то упомянул eshell, который я никогда не использовал, но я попробовал его с SSH, и все виды приятной интеграции происходят. Время выучить eshell.

1 голос
/ 16 июля 2009

Вы можете попробовать M-x ansi-term для размещения вашей оболочки, если вы получаете неожиданное поведение с отображениями клавиш. Сказав, что я не могу воспроизвести проблему, которую вы описали при настройке.

0 голосов
/ 23 апреля 2015

Я использую dired для доступа к удаленной машине и открытия там оболочки.

Вот функция, которую я использую, взятая и измененная из Конфигурация emacs Тихона Джелвиса :

(defun anr-shell (buffer)
  "Opens a new shell buffer where the given buffer is located."
  (interactive "sBuffer: ")
  (pop-to-buffer (concat "*" buffer "*"))
  (unless (eq major-mode 'shell-mode)
    (dired buffer)
    (shell buffer)
    (sleep-for 0 200)
    (delete-region (point-min) (point-max))
    (comint-simple-send (get-buffer-process (current-buffer)) 
                        (concat "export PS1=\"\033[33m" buffer "\033[0m:\033[35m\\W\033[0m>\""))))

Пример:

(anr-shell "/vagrant@localhost#2222:/vagrant/")
0 голосов
/ 03 февраля 2015

Оболочка M-x, вызванная в буфере A, переключится на буфер оболочки B; обычно оболочка . Неудивительно, что при необходимости создается B. Префикс arg заставит его запросить имя B. Если A просматривает что-то на удаленном хосте, то оболочка будет запущена на удаленном хосте. Но только если он не может найти существующий B. В этот момент будет работать завершение имени файла.

В вики emacs есть несколько заметок о том, как с этим повозиться. См., Например, функцию my-shell в этом разделе , которая расширит имя по умолчанию для B, чтобы удаленные файлы получали удаленные оболочки. Я делаю то же самое, советуя функции оболочки .

Автозаполнение имени файла будет работать нормально. Автозаполнение команды? В меньшей степени. Для меня это блокирует emacs, а затем фактически не работает.

0 голосов
/ 29 ноября 2011

Я только что написал небольшую функцию для открытия оболочки на удаленном хосте. Вызов cd перед shell заставляет завершить работу вкладки.

Это может отличаться от того, что вы хотите, так как он открывает новую оболочку вместо ssh'ing в локальной оболочке. Кроме того, вы можете посмотреть на взлом emacs Отслеживание каталогов (или посмотреть, у кого еще есть).

(defun remote-shell (&optional host)
  "Open a remote shell to a host."
  (interactive)
  (with-temp-buffer
    (let ((host (if host host (read-string "Host: "))))
      (cd (concat "/scp:" host ":"))
      (shell (concat "*" host "*")))))

(defun myserver-shell () (interactive) (remote-shell "myserver"))
0 голосов
/ 16 июля 2009

У меня была похожая проблема, я думаю, и решил ее, отредактировав мой ~ / .bash_login на удаленном компьютере и добавив

export TERM=xterm

Я использую OS X и у меня были проблемы при подключении к Linux (Debian Lenny)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...