Начать редактирование удаленного файла с помощью 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 не установлен на удаленной машине.