Использование Emacs в качестве IDE - PullRequest
164 голосов
/ 15 сентября 2008

В настоящее время мой рабочий процесс с Emacs, когда я пишу код на C или C ++, включает три окна. Самый большой справа содержит файл, с которым я работаю. Левая часть разделена на две части, нижняя часть представляет собой оболочку, которую я использую для ввода команд компиляции или создания, а верхняя часть часто представляет собой какую-то документацию или файл README, с которыми я хочу ознакомиться во время работы. Теперь я знаю, что есть некоторые довольно опытные пользователи Emacs, и мне любопытно, что функционально полезно другим Emacs, если предполагается использовать его как полноценную IDE. В частности, большинство IDE обычно выполняют эти функции в той или иной форме:

  • Редактор исходного кода
  • Compiler
  • Debugging
  • Поиск документации
  • Контроль версий
  • Функции OO, такие как поиск классов и инспектор объектов

Для некоторых из них довольно очевидно, как Emacs может соответствовать этим функциям, но как насчет остальных? Кроме того, если конкретный язык должен быть сфокусирован, я бы сказал, что это должен быть C ++.

Редактировать: Один пользователь указал, что я должен был быть более конкретным, когда сказал «как насчет остальных». В основном мне было интересно узнать об эффективном контроле версий, а также о поиске документации. Например, в SLIME довольно просто выполнить быстрый поиск гиперспека для функции Lisp. Есть ли быстрый способ найти что-то в документации C ++ STL (если я забыл точный синтаксис hash_map , например)?

Ответы [ 17 ]

73 голосов
/ 15 сентября 2008

Вы должны быть конкретны в отношении того, что вы подразумеваете под «остальными». За исключением инспектора объектов (о котором я знаю), emacs выполняет все вышеперечисленное довольно легко:

  • редактор (очевидный)
  • compiler - просто запустите M-x compile и введите команду компиляции. С этого момента вы можете просто M-x compile и использовать значение по умолчанию. Emacs будет фиксировать ошибки компилятора C / C ++ (лучше всего работает с GCC) и поможет вам перейти к строкам с предупреждениями или ошибками.
  • Отладка - аналогично, когда вы хотите отладить, введите M-x gdb, и он создаст буфер GDB со специальными привязками
  • Поиск документации - emacs имеет отличные привязки CScope для навигации по коду. Для другой документации: в Emacs также есть читатель man-страниц, а для всего остального есть сеть и книги.
  • контроль версий - существует множество привязок Emacs для различных бэкэндов VCS (CVS, SCCS, RCS, SVN, GIT - все приходит на ум)

Редактировать: я понимаю, что мой ответ о поиске документации действительно имел отношение к навигации по коду. Вот еще несколько точных сведений:

Поиск в Google, несомненно, покажет дальнейшие примеры.

Как видно из второй ссылки, поиск функций (и всего остального) в другой документации может быть выполнен, даже если он не поддерживается "из коробки".

29 голосов
/ 16 сентября 2008

Я рекомендую Emacs Code Browser в качестве более "традиционной" среды стиля IDE для emacs.

РЕДАКТИРОВАТЬ : я также сейчас рекомендую Magit значительно выше стандартного интерфейса VCS в emacs.

19 голосов
/ 15 сентября 2008

Вместо запуска команды make в окне оболочки вы пробовали M-x compile? Он запустит вашу команду make, отобразит ошибки и во многих случаях упростит переход к строке кода, которая вызвала ошибку, если выходные данные содержат имена файлов и номера строк.

Если вы поклонник IDE, вы также можете взглянуть на пакет скоростных панелей emacs (скоростная панель M-x). И, если вы еще этого не сделали, узнайте, как использовать таблицы тегов для навигации по вашему коду.

15 голосов
/ 02 февраля 2009

Есть уголки Emacs, которые когда-то обнаружили, делают вас более продуктивным, чем вы никогда не думали. Как уже упоминали другие, использование тегов - это фантастический и быстрый способ масштабирования исходного кода, а использование M- / (dabbrev-expand) часто дает именно то, что вы ожидаете при заполнении имени переменной.

Использовать происходит, чтобы получить буфер со всеми вхождениями регулярного выражения в буфере. Это очень удобно при рефакторинге кода и поиске фрагментов кода или использования переменных, или если вы используете маркеры TODO в своих исходных файлах и хотите посетить их все.

Функции flush-lines, sort-numeric-fields, replace-regexp и rectangle могут быть действительно полезны для получения дампа из какого-либо инструмента и преобразования его в полезные данные, такие как программа elisp или электронная таблица с разделителями-запятыми.

Я написал страницу об IDE, как то, что вы можете делать с emacs

http://justinsboringpage.blogspot.com/2007/09/11-visual-studio-tricks-in-emacs.html

Изучение elisp - это еще один отличный способ ответить на вопрос, что еще может сделать emacs помимо того, что может сделать типичная IDE.

Например, я писал в блоге о написании вспомогательных функций Perforce, таких как «вина» (написание своего означает, что вы можете заставить его вести себя именно так, как вам хочется) ...

http://justinsboringpage.blogspot.com/2009/01/who-changed-line-your-working-on-last.html

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

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

10 голосов
/ 04 ноября 2008

Подробное описание интеграции с emacs и контролем версий вы можете найти на моем сайте . Я также работаю над статьей об использовании Emacs в качестве среды разработки для многих языков - C / C ++, Java, Perl, Lisp / Scheme, Erlang и т. Д ...

8 голосов
/ 01 февраля 2013

Хорошо, все здесь дают отличные советы, чтобы сделать Emacs отличной IDE.

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

Чтобы обойти это, я настоятельно рекомендую использовать emacs в server mode.

Это довольно просто в использовании, нет необходимости настраивать файл инициализации. Вам просто нужно запустить emacs в режиме демона;

emacs --daemon

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

alias ec="emacsclient -t"
alias ecc="emacsclient -c &"
# some people also prefer this but no need to fight here;
alias vi="emacsclient -t"

Таким образом, emacs будет запускаться даже быстрее, чем gedit, обещаю.

Единственная возможная проблема здесь: если вы запускаете emacs daemon от своего обычного пользователя, вы, вероятно, не сможете подключиться к серверу emacs как root.

Итак, если вам нужно открыть файл с правами root-доступа; используйте вместо этого tramp. Просто запустите ваш клиент emacs с обычным пользователем и откройте файлы, как это;

C-x C-f
/sudo:root@localhost/some/file/that/has/root/access/permissions
# on some linux distro it might be `/su:root@...` 

Это сделало мою жизнь проще, я могу открыть свою мощную специализированную среду разработки Python за миллисекунды таким образом. Вы также можете добавить emacs --daemon в вашу систему или создать файл рабочего стола для emacsclient. Это зависит от вас.

Более подробную информацию о демонах emacs и клиенте emacs можно найти на вики;

http://www.emacswiki.org/emacs/EmacsAsDaemon

http://www.emacswiki.org/emacs/EmacsClient

8 голосов
/ 02 октября 2008

Для контроля версий есть несколько вещей, которые вы можете использовать, в зависимости от того, какую систему контроля версий вы используете. Но некоторые функции являются общими для всех из них.

vc.el - это встроенный способ управления версиями на уровне файлов. Он имеет бэкэнды для большинства систем контроля версий. Например, бэкэнд Subversion поставляется с Emacs, и есть git-бэкэнды и другие, доступные из других источников.

Самая полезная команда - C-x v v (vc-next-action), которая выполняет соответствующее следующее действие для файла, который вы просматриваете. Это может означать обновление из репозитория или сохранение ваших изменений, vc.el также повторно связывает C-x C-q , чтобы проверять и извлекать файлы, если вы используете систему, которая нуждается в этом (например, RCS).

Другие очень полезные команды: C-x v l и C-x v = , которые показывают журнал и текущий diff для файла, который вы используете.

Но для реальной производительности вам следует избегать использования однофайловых команд vc.el, кроме простых вещей. Существует несколько пакетов, которые могут дать вам обзор состояния всего дерева и дать вам больше возможностей, не говоря уже о возможности создавать согласованные коммиты, охватывающие несколько файлов.

Большинство из них находятся под сильным влиянием или основаны на исходных pcl-cvs / pcvs для CVS. Есть даже два из них, которые поставляются с Subversion, psvn.el и dsvn.el . Есть пакеты для мерзавцев и т. Д.

7 голосов
/ 15 сентября 2008

Я согласен, что вы должны узнать о компиляции M-x (свяжите это и M-x next-error с последовательностью коротких клавиш).

Узнайте о привязках для контроля версий (например, vc-diff, vc-next-action и т. Д.)

Загляни в регистры. Вы можете помнить не только местоположения в буферах, но и целые конфигурации окон (C-x r w - конфигурация окна для регистрации).

6 голосов
/ 17 сентября 2008

Отправной точкой (которая может быть неочевидна) для изучения возможностей VC в Emacs является M-x vc-next-action .

Выполняет «следующую логическую операцию контроля версий» для текущего файла, в зависимости от состояния файла и серверной части VC. Поэтому, если файл не находится под контролем версий, он регистрирует его, если файл был изменен, изменения передаются и т. Д.

Требуется немного привыкнуть, но я нахожу это очень полезным.

Связывание клавиш по умолчанию: C-x v v

4 голосов
/ 24 октября 2009

Существует TFS.el для интеграции emacs в Microsoft TFS . Он работает с любой TFS, включая TFS, на которой работает Codeplex.com.

Основные этапы настройки:

  1. Поместите tfs.el в путь загрузки.

  2. В вашем файле .emacs:

    (require 'tfs)
    (setq tfs/tf-exe  "c:\\vs2008\\common7\\ide\\tf.exe")
    (setq tfs/login "/login:domain\\userid,password")
          -or-
    (setq tfs/login (getenv "TFSLOGIN"))  ;; if you have this set
    
  3. также в вашем файле .emacs, установите локальные или глобальные привязки клавиш для команд tfs. вот так:

    (global-set-key  "\C-xvo" 'tfs/checkout)
    (global-set-key  "\C-xvi" 'tfs/checkin)
    (global-set-key  "\C-xvp" 'tfs/properties)
    (global-set-key  "\C-xvr" 'tfs/rename)
    (global-set-key  "\C-xvg" 'tfs/get)
    (global-set-key  "\C-xvh" 'tfs/history)
    (global-set-key  "\C-xvu" 'tfs/undo)
    (global-set-key  "\C-xvd" 'tfs/diff)
    (global-set-key  "\C-xv-" 'tfs/delete)
    (global-set-key  "\C-xv+" 'tfs/add)
    (global-set-key  "\C-xvs" 'tfs/status)
    (global-set-key  "\C-xva" 'tfs/annotate)
    (global-set-key  "\C-xvw" 'tfs/workitem)
    
...