Вопрос

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

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

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

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

Это было полезно?

Решение

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

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

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

Поиск в Google, без сомнения, выявит дополнительные примеры.

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

Другие советы

Я должен порекомендовать Браузер кода Emacs как более "традиционная" среда в стиле IDE для emacs.

Редактировать:Я также сейчас рекомендую Магит значительно превосходит стандартный интерфейс VCS в emacs.

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

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

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

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

функции 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, таких как blame (написание ваших собственных означает, что вы можете заставить их вести себя именно так, как вы хотите)...

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

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

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

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

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

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

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

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

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

Большинство из них находятся под сильным влиянием оригинала или основаны на нем pcl-cvs/ПКВС для резюме.Есть даже два из них, которые поставляются с subversion, psvn.el и dsvn.el.Существуют пакеты для git и т.д.

Итак, все присутствующие дают прекрасные советы, как сделать 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 server как 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 IDE за миллисекунды.Вы также можете захотеть добавить emacs --daemon в программу запуска вашей системы или создать файл рабочего стола для emacsclient.Это зависит от тебя.

Подробнее о демоне emacs и клиенте emacs можно найти в wiki;

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

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

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

Узнайте о привязках для управления версиями (например,vc-разница, vc-следующее действие и т.д.)

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

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

Он выполняет "следующую логическую операцию контроля версий" для текущего файла, в зависимости от состояния файла и серверной части VC.Таким образом, если файл не находится под контролем версий, он регистрирует его, если файл был изменен, изменения отправляются и т.д.

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

Привязка клавиш по умолчанию - это C-x v в

Там есть 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)
    

compile , next-error и previous-error - все это довольно важные команды для разработки на C ++ в Emacs (также отлично работает с выводом grep).Etags, visit-tags-table и find-tag также важны.завершение.el - один из величайших невоспетых хаков 20-го века, он может ускорить ваш взлом C ++ на порядок.Да, и давайте не будем забывать об эдиффе.

Мне еще предстоит научиться использовать систему управления версиями без посещения командной оболочки, но теперь, когда я запускаю коммиты намного чаще (с помощью git) Вероятно, мне придется это сделать.

Вы также можете найти панель вкладок полезный.Он эмулирует единственное поведение, которое я пропустил при переходе с Eclipse на Emacs.Привязанный к "," и "." для перехода к предыдущей и следующей панели вкладок это избавляет вас от необходимости постоянно переключать буфер с помощью Ctrl-x b.

К сожалению, упомянутая веб-страница не предоставляет правильную версию для загрузки.Однако большинство версий Ubuntu поставляют его в своих пакетах emacs-goodies.

Я использую emacs в Windows.модуль compile хорош, но я хотел, чтобы compile был умнее в отношении командной строки compile, которую он предлагает. Можно использовать "Файловые переменные" для указания compile-command, но я хотел чего-то немного поумнее этого.Поэтому я написал небольшую функцию, чтобы помочь вам.Он угадывает команду компиляции, которую нужно использовать, чтобы подсказать пользователю при запуске compile.

Функция guess ищет файл vbproj, csproj или sln, и если он найден, она предлагает msbuild.Затем он просматривает имя файла буфера и в зависимости от этого предлагает разные варианты.Файл .wxs означает, что это проект WIX, и вы, вероятно, хотите создать MSI, поэтому логика предположения предполагает команду nmake для MSI.Если это модуль Javascript, то предлагается запустить jslint-for-wsh.js для удаления файла .js.В качестве запасного варианта предлагается nmake.

Код, который я использую, выглядит примерно так:

(defun cheeso-guess-compile-command ()
  "set `compile-command' intelligently depending on the
current buffer, or the contents of the current directory."
  (interactive)
  (set (make-local-variable 'compile-command)
       (cond
        ((or (file-expand-wildcards "*.csproj" t)
             (file-expand-wildcards "*.vcproj" t)
             (file-expand-wildcards "*.vbproj" t)
             (file-expand-wildcards "*.shfbproj" t)
             (file-expand-wildcards "*.sln" t))
         "msbuild ")

        ;; sometimes, not sure why, the buffer-file-name is
        ;; not set.  Can use it only if set.
        (buffer-file-name
         (let ((filename (file-name-nondirectory buffer-file-name)))
           (cond

            ;; editing a .wxs (WIX Soluition) file
            ((string-equal (substring buffer-file-name -4) ".wxs")
             (concat "nmake "
                     ;; (substring buffer-file-name 0 -4) ;; includes full path
                     (file-name-sans-extension filename)
                     ".msi" ))

            ;; a javascript file - run jslint
            ((string-equal (substring buffer-file-name -3) ".js")
             (concat (getenv "windir")
                     "\\system32\\cscript.exe c:\\users\\cheeso\\bin\\jslint-for-wsh.js "
                     filename))

            ;; something else - do a typical .exe build
            (t
             (concat "nmake "
                     (file-name-sans-extension filename)
                     ".exe")))))
        (t
         "nmake "))))


(defun cheeso-invoke-compile-interactively ()
  "fn to wrap the `compile' function.  This simply
checks to see if `compile-command' has been previously set, and
if not, invokes `cheeso-guess-compile-command' to set the value.
Then it invokes the `compile' function, interactively."
  (interactive)
  (cond
   ((not (boundp 'cheeso-local-compile-command-has-been-set))
    (cheeso-guess-compile-command)
    (set (make-local-variable 'cheeso-local-compile-command-has-been-set) t)))
  ;; local compile command has now been set
  (call-interactively 'compile))

;; in lieu of binding to `compile', bind to my monkeypatched function
(global-set-key "\C-x\C-e"  'cheeso-invoke-compile-interactively)

Я попытался сделать это как "предыдущий совет" для функции компиляции, но не смог заставить ее работать удовлетворительно.Итак, я определил новую функцию и привязал ее к той же комбинации нажатий клавиш, которую я использовал для compile.


Редактировать теперь есть " .smarter-компилировать.el" что продвигает эту идею еще на один шаг вперед.

О поиске документации:это зависит от вашего языка (ов) программирования.

Библиотеки C и системные вызовы обычно документируются на справочных страницах.Для этого вы можете использовать M-x man.Некоторые вещи могут быть лучше задокументированы на информационных страницах;использование M-x info.

Для самого elisp используйте C-h f.Для python используйте >>> help(<function, class, module>) в переводчике.

Я обнаружил, что большинство других языков предлагают документацию в виде html.Для этого попробуйте встроенный браузер (я использую w3m).Установите свой BROWSER переменная окружения для скрипта-оболочки вокруг emacsclient -e "(w3m-goto-url-new-session \"$@\")" (на * nix), на случай, если что-то может открыть браузер, и вы хотите, чтобы это было открыто внутри emacs.

Я знаю, что это очень старый пост.Но этот вопрос актуален для новичков в emacs.

IMO лучший способ использовать emacs в качестве ide - это использовать протокол языкового сервера с помощью emacs.Вы можете найти всю информацию о языковых серверах на соответствующем веб-сайте.

Для быстрой настройки я бы настоятельно рекомендовал вам перейти на эту страницу эглот .IMO eglot выполняет свою работу довольно хорошо.Он хорошо интегрируется с пакетами автоматического завершения, такими как company.Предоставляет ссылку на поиск и многое другое.

Кроме того, для отладчика вам могут понадобиться специальные отладчики для определенных языков.Вы можете использовать gdb из emacs.Просто введите M-x gdb .

Для компиляции вашего кода лучше всего использовать shell-команды.Я работаю над этим проектом eproj.Потребуется некоторое время, чтобы завершить это.Но все, что он делает, - это сопоставляет команду оболочки с типом проекта.И создает ваш проект через оболочку.Он делает то же самое для выполнения команды.Возможно, мне понадобится помощь в завершении этого проекта.Он не готов к использованию, но если вы немного разбираетесь в elisp, вы можете ознакомиться с кодом.

Кроме того, всегда лучше использовать команду компиляции emacs.

Что касается контроля версий, я пока не видел ни одного другого пакета, который мог бы сравниться по мощности с магит.Это специфично для git.Также для git есть еще один пакет git-timemachine, который я нахожу очень полезным.

Поиск объектов и классов обеспечивается протоколом языкового сервера.

Дерево проекта может быть использовано для интерфейса, подобного ide, с древесные маки.

Существует также библиотека взаимодействия с проектом, которая называется снаряд.

Для автоматического завершения я нахожу корпоративный режим очень полезно.

Действительно, emacs можно заставить делать все, что угодно.

В последние годы Clang стал важной частью поддержки Emacs C ++.Атила Невес выступил с докладом на CppCon 2015:"Emacs как среда разработки C ++"

Это 16-минутный доклад, в котором он показывает решения по следующим темам:

  • Переход к определению
  • Автоматическое завершение
  • Подсветка синтаксиса "на лету"
  • Найти файл в проекте

Слайды можно найти здесь.

В стиле Unix или X Windows я не знаю, существует ли интегрированная IDE, которая работает для всего.

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

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

Отказ от ответственности:Я работаю на realgud

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top