Начать редактирование удаленного файла с помощью emacs tramp из сессии ssh

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

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

Вопрос: могу ли я выполнить некоторую команду в удаленном сеансе ssh, которая принимает имя файла, преобразовать его в формат tramp (это самая простая часть) и выполнить локальную команду (например, 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 ответов

Решение

Вы можете настроить свой 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.

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

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

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

CxCf/ssh:remotehost:/TabTab

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

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

me@remote-machine$ ssh -f me@local-machine emacsclient /ssh:remote-machine/$(realpath my-file-name)

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

Другие вопросы по тегам