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

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

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

Будучи чрезвычайно настраиваемым, его можно легко настроить для использования в качестве C++ IDE. Поэтому сегодня мы рассмотрим, как можно настроить Emacs для разработки на C++ и превратить его в C++ IDE.

Интеграция C++ с Emacs

Чтобы интегрировать C++ с Emacs, мы будем использовать несколько пакетов, таких как автозаполнение, flycheck, magit и т.д. Теперь перейдем к процессу.

Добавление начальных команд в файл инициализации

При запуске Emacs первое, что обрабатывается, это файл инициализации (файл инициализации), который содержит команды, позволяющие пользователям настраивать и настраивать Emacs в соответствии со своими предпочтениями.

Итак, чтобы Emacs действовал как C++ IDE, нам нужно добавить несколько команд в этот файл.

Для этого откройте терминал и введите следующую команду, чтобы открыть файл инициализации:

1
$ emacs ~/.emacs

Теперь нам нужно добавить следующие строки кода:

1
2
3
4
5
6
7
8
9
(require 'package)
(add-to-list 'package-archives
             '("melpa" . "https://melpa.org/packages/") t)
(package-initialize)
(unless (package-installed-p 'use-package)
  (package-refresh-contents)
  (package-install 'use-package))
(use-package try :ensure t)
(use-package which-key :ensure t :config (which-key-mode))

Приведенный выше код в основном добавляет архив Melpa в список репозиториев пакетов, найденных в Emacs, и позволяет ему использовать эти пакеты.

Кроме того, он устанавливает пакет use-package, который можно использовать для установки других пакетов, установки привязок клавиш и настройки различных режимов Emacs.

Добавление пакета Yasnippet

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

Чтобы добавить это в наш файл инициализации, мы должны сначала установить его. Для этого откройте Emacs, нажмите Alt + x и введите package-list-packages. Теперь нажмите Ctrl + s и найдите yasnippet. Продолжайте нажимать Ctrl + s, пока не найдете пакет: yasnippet-snippets.

Вы можете либо щелкнуть по нему и выбрать Install, либо нажать i, а затем x, чтобы установить пакет yasnippet.

После установки yasnippet нажмите Ctrl + x, затем Ctrl + f и откройте файл ~/.emacs. Внутри этого добавьте следующие строки кода:

1
2
(require 'yasnippet)
(yas-global-mode 1)

Просто нажмите Ctrl + X, затем Ctrl + S, чтобы сохранить файл и перезапустить Emacs. Теперь откройте некоторые файлы C++, и вы увидите такие варианты выпадающего меню, которые предоставляют вам фрагмент при нажатии.

Варианты выпадающего меню:

Фрагмент дается после нажатия на один из вариантов:

Добавление некоторых дополнительных пакетов

Теперь мы собираемся добавить несколько дополнительных пакетов, которые дадут нам больше функциональных возможностей в Emacs для разработки на C++.

Прежде всего, мы добавим режим auto-complete, который, как следует из названия, является расширением автозаполнения. Добавьте следующие строки кода в файл инициализации:

1
2
3
4
5
6
7
(use-package auto-complete
  :ensure t
  :init
  (progn
    (ac-config-default)
    (global-auto-complete-mode t)
    ))

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

1
2
3
4
5
(use-package auto-complete
(use-package flycheck
  :ensure t
  :init
  (global-flycheck-mode t))

Наконец, мы добавим современный пакет шрифтов C++, который обеспечивает подсветку синтаксиса новейшего языка C++.

1
2
(use-package modern-cpp-font-lock
:ensure t)

Интеграция с Git с использованием Magit

Emacs также позволяет интегрироваться с Git с помощью Magit, инструмента git, который действует как интерфейс для Git. Мы можем включить это в Emacs, добавив следующие строки кода в наш файл инициализации:

1
2
3
4
5
(use-package magit
  :ensure t
  :init
  (progn
    (bind-key "C-x g" 'magit-status)))

Здесь мы устанавливаем привязку клавиш с помощью клавиш Ctrl + x, за которыми следует g, что позволяет нам видеть состояние наших файлов (untracked, staged, commits).

Чтобы увидеть команды Magit, нажмите клавишу со знаком вопроса (?). Некоторые команды, которые будут показаны:

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

Компиляция и запуск кода C++

Для компиляции и запуска кода C++ в Emacs мы будем использовать пользовательскую функцию и отладчик GDB. Это значительно упрощает процесс по сравнению с созданием make-файлов, а затем их компиляцией и сборкой. Для этого, прежде всего, добавьте следующий код в ваш файл инициализации:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
(defun code-compile ()
  (interactive)
  (unless (file-exists-p "Makefile")
    (set (make-local-variable 'compile-command)
     (let ((file (file-name-nondirectory buffer-file-name)))
       (format "%s -o %s %s"
           (if  (equal (file-name-extension file) "cpp") "g++" "gcc" )
           (file-name-sans-extension file)
           file)))
    (compile compile-command)))

(global-set-key [f9] 'code-compile)

Приведенный выше код позволяет нам скомпилировать файл C++ с помощью клавиши f9.

После компиляции, чтобы запустить файл C++, нажмите Alt + x и введите gdb. Вы получите что-то вроде этого:

Просто нажмите Enter, и gdb запустится. Теперь нажмите на кнопку Run, расположенную в верхней части Emacs, чтобы запустить программу C++.

На следующем рисунке показан выполняемый код C++:

Зачем использовать Emacs для C++?

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