[ПРИМЕЧАНИЕ] этот ответ был сильно отредактирован, чтобы следить за обновлениями with-editor
событий. Большинство комментариев, скорее всего, больше не будут иметь смысла. Есть некоторые новые комментарии , которые делают смысл.
Magit содержит библиотеку с именем, with-editor
доступной по адресу https://github.com/magit/with-editor, которая позволяет вам использовать ваш локальный Emacs в качестве $ EDITOR на удаленных машинах через TRAMP.
Другой альтернативой является https://github.com/habnabit/remote-emacsclient , но он кажется более сложным и менее общим.
Самый простой способ установки with-editor
через MELPA:
M-x package-install with-editor
В противном случае просто скачайте https://github.com/magit/with-editor/blob/master/with-editor.el где-нибудь путь загрузки, и require
это (это также зависит от тире).
Затем просто начать shell
, eshell
или ansi-term
и выполните следующие действия :
M-x with-editor-export-editor
Он спросит вас, какой $ EDITOR вас интересует, просто нажмите ввод для EDITOR
переменной по умолчанию . Затем внутри оболочки вы можете напечатать crontab -e
и отредактировать ваш crontab в emacs. Нажмите, C-c C-cчтобы сохранить crontab или C-c C-kотменить редактирование.
Если вы хотите более постоянную настройку:
(add-hook 'shell-mode-hook 'with-editor-export-editor)
(add-hook 'term-mode-hook 'with-editor-export-editor)
(add-hook 'eshell-mode-hook 'with-editor-export-editor)
Кроме того, вы можете использовать M-x with-editor-async-shell-command crontab -e RETдля быстрых команд.
with-editor
библиотека относится к этому вопросу? Звучит полезно$EDITOR
переменную на удаленном компьютере, чтобы это работало? Это просто зацепитьemacsclient
?git-modes
. Я внимательно слежу за этой библиотекой, и просто ее автор (@tarsius) занят выпуском magit, но в конечном итоге это будет собственный пакет. Что касается $ EDITOR, вам не нужно устанавливать его на что-либо самостоятельно, это делается при необходимости, когда вы запускаете любые команды, которые его используют. Magit использует эту библиотеку вместе с $ GIT_EDITOR.shell-mode
/term-mode
буфера. Эту проблему можно решить с помощью дополнительной настройки, см. Emacs.stackexchange.com/questions/5589/… . Если вы все же заставите его работать, сообщите о своих результатах по адресу github.com/magit/magit/issues/1638 .Отказ от ответственности: я не пробовал это.
Вы могли бы пройти часть пути, выполнив вывод команды function для команды открыть файл с помощью TRAMP. Дыра в безопасности? Да. Функциональная? Вероятно.
Используйте
shell-mode
крючок, чтобы добавить крюкafter-change-hook
вshell-mode
. Этот крючок следит за определенной последовательностью. Пример:Затем он использует
tramp-find-file
для открытия файла. Это относительно безопасно, потому что единственное, что может сделать пульт, - это активироватьtramp-find-file
. Сначала подтверждение будет хорошим, но необязательным.Когда редактирование завершено, другой хук может вызвать выход из фиктивной программы (например, отправив
C-c
).Худший случай (для безопасности) - найти способ запустить произвольный код. Если у вас установлены переменные буфера для постоянной оценки, злоумышленник может перезаписать важные настройки без вашего ведома. Они также могут запустить атаку типа «отказ в обслуживании», открыв множество буферов. Подтверждения могут предотвратить все вышеперечисленное.
Программа на пульте может быть тривиально реализована на C (или любом другом языке).
источник
https://stackoverflow.com/questions/2231902/originate-edit-of-remote-file-using-emacs-tramp-from-ssh-session имеет довольно простой принятый ответ, который составляет
а затем использовать
Существует также https://stackoverflow.com/questions/12546722/using-emacs-server-and-emacsclient-on-other-machines-as-other-users, который является более сложным, но где ответы также (примерно) касаются аналогичных основы.
источник
У меня есть крошечный скрипт в моем пути на удаленном хосте
~/bin/ec
, сокращенное обозначение emacsclient.Этот скрипт передает
-n
и+
аргументы без изменений в emacsclient, в противном случае аргументы обрабатываются как файлы для открытия в вашем локальном Emacs. Каждый файл имеет префикс протокола TRAMP и хоста, поэтому Emacs знает, как его открыть. Приssh:
желании вы можете перейти на другой протокол TRAMP.Вы должны заменить
z
имя хоста вашей удаленной машины. Это используется локальными Emacs для подключения через TRAMP. (Вы можете использоватьhostname
здесь для общности. Для краткости я предпочитаю использовать крошечные записи, например,z
в моем локальном сообщенииssh_config
, и пульт не имеет ни малейшего представления, что я это делаю. Попробуйте!)Использование:
ec file
в удаленной оболочке открывает файл в локальном Emacs и ждетec -n file
в удаленной оболочке открывает файл в локальном Emacs и возвращаетexport EDITOR=~/bin/ec
в дистанционном.bashrc
режиме происходит волшебствоЧтобы убедиться, что мой
server
файл в порядке, у меня есть это локально.emacs
, снова используя крошечное имя хостаz
:Порт 9999 является RemoteForward. Я поместил это в мой локальный,
~/.ssh/ssh_config
чтобы автоматизировать пересылку, плюс вещи ControlMaster для скорости.Наконец, убедитесь, что TRAMP знает о вашем,
ssh_config
если вы используете его:источник
Возможно, потребуется немного доработать, но вот идея:
источник
Гарольд Абнабит придумал такой подход 1 :
http://blog.habnab.it/blog/2013/06/25/emacsclient-and-tramp/
1 на основе более ранней статьи Райана Барретта (на которую он ссылается).
Также есть https://stackoverflow.com/q/5154224/324105, в котором Петри Лехтинен предложил https://gist.github.com/akheron/850795 . Я полагаю, что более сложные решения лучше, но очень простой подход все еще может представлять интерес.
источник
Действительно удивлен, никто еще не упомянул
sshfs
. Это то, что я обычно делаю, когда ухожу удаленно:Хотя
multi-term
он не синхронизирует локальный рабочий каталог с удаленным каталогом, он превосходит все другие решения, которые я пробовал в долгосрочной перспективе. Хотя dir tracking наверняка будет приветствоваться.источник