Как сделать удаленную разработку с Emacs? - PullRequest
36 голосов
/ 11 мая 2009

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

Основное использование, которое я даю, предназначено для разработки проекта C на удаленной машине с Linux (RHEL 5). До сих пор я использовал простой vim (только в качестве текстового редактора) и несколько сценариев оболочки, и однажды я решил попробовать emacs. Пока мне это нравится.

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

Я знаю о TRAMP, но насколько я знаю, он редактирует только удаленные файлы. Большим препятствием является запуск команд оболочки на удаленной машине одним нажатием клавиши (я назначил F5 для запуска специальной команды компиляции на emacs удаленной машины).

Как вы запускаете команды оболочки на удаленной машине одним нажатием клавиши emacs? Знаете ли вы какие-либо другие советы и рекомендации для полной удаленной разработки?

Ответы [ 12 ]

23 голосов
/ 11 мая 2009

TRAMP поддерживает компиляцию и отладку на удаленных машинах (на которых находятся файлы). Это должно быть автоматическим и относительно плавным. Ознакомьтесь с документацией для удаленных процессов .

20 голосов
/ 11 мая 2009

Не волнуйся. Вы можете запустить что угодно в Emacs одним нажатием клавиши. Другие отметили, как вы можете сделать это элегантно с помощью TRAMP, но если это не подходит (по какой-либо причине), вы можете просто создать свою собственную функцию, используя:

(defun arbitrary-remote-command ()
  (interactive)
  (shell-command
   "ssh user@remotehost arbitrary-command"))


(global-set-key (kbd "<f5>") 'arbitrary-remote-command)
10 голосов
/ 11 мая 2009

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

См. Вопрос GNU Screen Survival Guide для получения дополнительной информации о начале работы с screen.

У меня обычно один терминал открыт для операций управления исходным кодом, один для редактирования, один для компиляции (мне просто нужно переключиться на него и нажать UpArrow + Enter) и один для отладки. В зависимости от среды и приложения, над которым я работаю, у меня может быть больше или меньше этого, но это общий макет.

5 голосов
/ 15 мая 2009

Хороший ответ от Трея Джексона, но ответ от Мэтью Флэшена на самом деле помог мне больше.

Я не смог найти способ заставить TRAMP выполнить компиляцию, но случайно нашел команду remote-compile .

Теперь я просто добавляю эти строки в мой .emacs:

(setq remote-compile-user "root")
(setq remote-compile-host "localhost -p 3000")  ;This is just when tunneling
(setq compile-command " cd /usr/src/nexus/traffic && ./builder.sh compile ; cat builder.log")
(global-set-key (kbd "<f5>") 'remote-compile)

И прежде чем что-либо делать, настройте соединение ssh с помощью ControlMaster , и мне не нужно вводить пароли.

Подведение итогов:

  • Редактирование удаленных файлов: TRAMP
  • Состояние сохранения нескольких терминалов: ЭКРАН
  • Определить комбинации клавиш emacs для выполнения дистанционные команды: см. Мэтью Флашен ответ
  • Удаленная компиляция: команда удаленная компиляция с ControlMaster

Я думаю, что это охватывает некоторые важные действия для удаленной разработки.

2 голосов
/ 13 мая 2009

Я бы просто запустил ssh на удаленную машину и запустил emacs в режиме терминала вместо использования TRAMP. TRAMP действительно медленный, когда вы не ожидаете медлительности, по крайней мере, по моему опыту. Я также видел, как это провалилось странным образом, и не всегда очевидно, как это «исправить». Если вы войдете в систему, вы не сможете использовать пользовательский интерфейс emacs, например, меню и т. Д., Но поскольку вы привыкли к vi, это не должно быть проблемой для вас. Фактически, вы можете просто отключить их, чтобы ваш опыт работы с ssh emacs был очень похож на ваш локальный опыт (если локальный! = Режим терминала) (1).

Использование экрана может быть полезно, если вы заботитесь о сохранении сеанса на случай разрыва соединения - помимо этого вы получаете аналогичные функциональные возможности, как виртуальные терминалы с буферами emacs. Например, вы можете открыть много буферов оболочки и запускать различные команды оболочки в буферах emacs. Я использую это для запуска многих экземпляров sqlplus (используйте rename-buffer, чтобы дать им все приятные, понятные имена).

Поскольку вы работаете с ssh'd на удаленной машине, вам не нужно беспокоиться о запуске «удаленных» команд оболочки.

С другой стороны, я не уверен, что вы подразумеваете под "я вижу, что настройка среды для запуска emacs - это долгий путь". Если у вас есть контроль версий, это должно быть тривиально ... (Держу пари, у вас есть веская причина).

(1) выключить меню, панель инструментов и полосы прокрутки:

(if (fboundp 'mode-bar-mode) (menu-bar-mode -1))

(if (fboundp 'режим панели инструментов) (режим панели инструментов -1))

(if (fboundp 'режим полосы прокрутки) (режим полосы прокрутки -1))

1 голос
/ 19 мая 2011

О бродяге может зависеть от используемой вами версии бродяги.

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

На самом деле я нахожусь на машине с Windows и обращаюсь к Linux (RH5) для удаленной компиляции и просмотра каталогов, чтения / записи некоторых файлов, компиляции на удаленной машине работает нормально.

1 голос
/ 20 мая 2009

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

Я сейчас использую Emacs для редактирования файлов, смонтированных через sshfs mount. Это работает очень хорошо для меня.

Чтобы смонтировать удаленную файловую систему (если вы правильно настроили хост в .ssh/config и настроили открытые ключи для соединения без пароля)

$ sshfs remote:dir localdir

и редактируйте, как хотите, с этого момента!

Что касается компиляции, см. Другие ответы, они охватывают это полностью.

1 голос
/ 11 мая 2009

Если вы не хотите запускать emacs в терминальном режиме на вашем пульте машина то это довольно просто. Как вы знаете, вы можете использовать TRAMP для редактирования удаленные файлы. Я просто установил команду компиляции на 'ssh me @ remote "cd / path / to / root && make "'и покончим с этим.

0 голосов
/ 23 июня 2019

Для меня проблема с TRAMP заключается в том, что удаленный набор инструментов слишком стар, и часто он не находится под моим контролем.

Поэтому я написал пакет ( ppcompile ), чтобы помочь мне разрабатывать локально и удаленно компилировать, а затем исправлять ошибки компиляции локально с помощью next-error.

0 голосов
/ 17 апреля 2015

То, что я использовал с 1994 года:

cat <<-EOF >> ~/.emacs
(define-key global-map "\e`" 'compile)
(define-key global-map "\e~" 'remote-compile)
(require 'compile)
(setq remote-shell-program "ssh")
EOF

Теперь ESC-`запускает компиляцию, а ESC-~ запускается / удаленно / компилируется. Он спросит у вас имя хоста, а затем предварительно заполнит команду. Обе компиляции используют один и тот же буфер истории.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...