Исходное редактирование удаленного файла с использованием emacs tramp из сеанса ssh

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

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

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

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

[email protected] ~/ $ run_local_emacs somefile
# then the file "/ssh:[email protected]/:/home/user/somefile" shows up 
# in my local emacs

Ответ 1

Вы можете настроить ваш 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 вызывает локальный файл на машине "remote" в вашем Emacs, запущенном на локальной машине. Очевидно, вы можете обернуть вызов emacsclient в любом виде script, который вы хотите облегчить.

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

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

Дополнительные сведения см. в Параметры Emacsclient.

Ответ 2

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

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

Ответ 3

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

Ответ 4

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

C-x C-f /ssh:remotehost:/ Tab Tab

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

Ответ 5

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

[email protected]$ ssh -f [email protected] emacsclient /ssh:remote-machine/$(realpath my-file-name)