Подтвердить что ты не робот

Как сделать удаленное развитие с помощью Emacs?

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

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

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

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

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

4b9b3361

Ответ 1

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

Ответ 2

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

(defun arbitrary-remote-command ()
  (interactive)
  (shell-command
   "ssh [email protected] arbitrary-command"))


(global-set-key (kbd "<f5>") 'arbitrary-remote-command)

Ответ 3

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

Подробнее о начале работы с screen см. в Руководстве по выживанию на экране GNU.

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

Ответ 4

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

Я не мог найти способ заставить 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
  • Состояние сохранения нескольких терминалов: SCREEN
  • Определить ключевые комбинации emacs для выполнения удаленные команды: см. Matthew Flaschen ответ
  • Удаленная компиляция: команда удаленная компиляция с помощью ControlMaster

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

Ответ 5

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

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

Поскольку вы ssh'd на удаленном компьютере, вам не нужно беспокоиться о выполнении команд оболочки "remote".

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

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

(если (fboundp 'режим меню) (режим меню-1))

(если (fboundp 'tool-bar-mode) (tool-bar-mode -1))

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

Ответ 6

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

Ответ 7

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

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

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

$ sshfs remote:dir localdir

и отредактируйте, как вам нравится, с тех пор!

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

Ответ 8

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

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

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

Ответ 9

Одна вещь, о которой никто не упоминал, - это запуск emacs с удаленной машины с допустимой переменной $DISPLAY, соответствующей текущему экрану.

Очевидно, что вы должны запускать X-сервер для локального отображения, но это не очень важно даже для Windows [использовать X-сервер, встроенный в Cygwin].

Это обычно требует задержки сети < 50мс. Если вы пингоруете этот удаленный ящик и получаете что-то > 50 мс, вы будете разочарованы этим подходом.

Ниже, отлично работает.

Вам нужно будет иметь SSH карту X-порта, там есть много документов.

Ответ 10

Что я использовал с 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, поэтому он будет очень отзывчивым и эффективным в течение длинных или медленных или перегруженных ссылок. Я обнаружил, что это еще больше предотвращает Fists of Network Rage.

Ответ 11

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

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

Ответ 12

Два цента: если пропускная способность не является большой проблемой, я бы дал трещину в VNC.