Начать редактирование удаленного файла с помощью emacs tramp из сессии ssh - PullRequest
12 голосов
/ 09 февраля 2010

Это, вероятно, несколько необычный вопрос. Я использую tramp для редактирования удаленных файлов, но я также открываю несколько терминалов ssh-на эту удаленную машину, а также для других работ (у меня были проблемы с запуском ssh shell внутри emacs).

Часто во время работы терминала я хотел бы отредактировать какой-то файл, и моя текущая процедура - скопировать имя файла, а затем использовать emacs tramp, чтобы открыть этот файл (после того, как все пошло по пути, когда путь к файлу в tramp формат). Это слишком много работы для быстрого редактирования и довольно подвержено ошибкам в части обработки пути.

Вопрос: могу ли я выполнить некоторую команду в удаленном сеансе ssh, которая принимает имя файла, преобразовать его в формат tramp (это самая простая часть) и выполнить команду local (например, emacsclient blahblahblah ) чтобы я мог редактировать удаленный файл, используя tramp в моем локальном emacs?

Я не уверен, достаточно ли я ясен. Я не хочу запускать emacs на удаленной машине (ни в терминале, ни через сеанс x), но я хочу отправить файл в мой локальный emacs из удаленного приглашения, например:

user@remote-machien ~/ $ run_local_emacs somefile
# then the file "/ssh:user@remote-machine/:/home/user/somefile" shows up 
# in my local emacs

Ответы [ 5 ]

12 голосов
/ 09 февраля 2010

Вы можете настроить свой emacs-сервер на использование tcp-соединения (не только локального сокета), а затем на удаленной стороне указать emacsclient для подключения к этому tcp-соединению:

В вашем .emacs

(setq server-use-tcp t)
(setq server-host "name_of_local_machine")
(server-start)

А затем на удаленной стороне:

emacsclient -f ~/.emacs.d/server/server /`hostname`:/path/to/local/file

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

Если ваш домашний каталог не виден на удаленном компьютере, вам потребуется настроить переменную server-auth-dir следующим образом:

(setq server-auth-dir "/some/path/visible/on/both/machines")

Для получения дополнительной документации см. Опции Emacsclient .

1 голос
/ 16 марта 2011

Theres также http://www.emacswiki.org/emacs/AnsiTermHints#toc4

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

0 голосов
/ 07 октября 2015

То, что я здесь делаю, это обратное ssh-соединение от удаленного к локальному и запуска локально emacsclient:

me@remote-machine$ ssh -f me@local-machine emacsclient /ssh:remote-machine/$(realpath my-file-name)
0 голосов
/ 28 сентября 2015

Возможно, вы уже знаете об этом, и это не очень хорошо для вас работает, но когда мне нужно было сделать что-то подобное, завершение имени файла в TRAMP оказалось достаточно полезным, чтобы я никогда не думал о поиске альтернативы.

С-х C-F /ssh:remotehost:/ Вкладка Вкладка

Это лучше всего работает, когда у вас есть настроенные SSH-ключи или аналогичный пароль без доступа, но похоже, что вы уже это сделали.

0 голосов
/ 10 февраля 2010

Вы можете использовать urxvt (отличный эмулятор терминала) и написать расширение perl, чтобы сделать это, даже если emacsclient не установлен на удаленной машине.

...