Непосредственно открыть удаленную оболочку с бродягой в Emacs


5

Я считаю, что лучше всего запускать мои оболочки на удаленных машинах в emacs с помощью TRAMP (используя ssh команда в локальной оболочке не работает для моих нужд). Тем не менее, я знаю, как запустить оболочку TRAMP, только если я впервые посещаю удаленный файл с C-x C-f а затем сделать M-x shell из этого буфера. Тем не менее, я хотел бы открыть оболочку на удаленной машине, используя TRAMP, до открыть любой файл на этом удаленном хосте, но не могу найти объяснения, как это сделать в моих поисках. Возможно ли это сделать?


Пожалуйста, добавьте дополнительное объяснение того, что вы ищете. Понятно, что вы более продвинуты, чем просто хотите узнать, как подключиться к удаленной машине из буфера оболочки, но это направление, в котором ваш вопрос ведет читателя. Итак, вы хотите, чтобы функция открывала буфер оболочки и автоматически вставляла ssh в вашу удаленную машину - чтобы вы были в командной строке и на пути к удаленному серверу? Или вы хотите, чтобы буфер режима оболочки уже был открыт, а затем просто нажмите команду автоматического входа? Ты используешь sshpass? Вы бы предпочли вводить пароль каждый раз?
lawlist

Спасибо @lawlist! Я перефразировал вопрос в надежде, что он станет более понятным. Чтобы ответить на ваши вопросы: я хочу каким-нибудь способом, который бы позволил tramp открыть буфер удаленной оболочки на машине, которую я указал Ожидаемое поведение - emacs запрашивает мой пароль, когда я пытаюсь это сделать.
jmlorenzi

Ответы:


4

Tramp вступает в игру, когда каталог по умолчанию является удаленным. Таким образом, вы можете изменить его, как вы делаете это с открытием удаленного файла (или каталога) заранее.

Но вы можете написать небольшую команду, например так:

(defun my-shell () (interactive) (let ((default-directory "/ssh:user@host:")) (shell)))

Тогда вы можете позвонить M-x my-shell


1
Если emacs работает на Windows, и вы хотите войти на хост Linux, вы можете установить с помощью M-x customize-variable explicit-shell-file-name в \bin\bash чтобы избежать пропущенных ошибок оболочки.
kwarnke

2

я использую 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/")

Пожалуйста, перепечатайте ответ здесь, так как ссылки на фактический ответ не рекомендуется, чтобы избежать гниения ссылок
Jarmund

Ответ был размещен.
mandark

Голосование изменилось соответственно.
Jarmund

0

Хотя в руководстве не указано слишком четко C-u M-x shell позволяет указать имя буфера оболочки, а также что более важно в вашем случае позволяет вам указать Default directory, который может взять строку, как Бродяга /ssh:server:/my/path,

Альтернативой является открытие dired ( C-x d ), а не фактический файл, если вы M-x shell из директории оболочка открывается с контекстом директории dired.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.