Как разработчик, было бы жаль не научиться использовать классические редакторы разработки, такие как Emacs и Vim. Эта статья призвана помочь новичкам начать использовать Emacs.

Найдите справку по любому контенту

Показать параметры справки

C-h ?

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

Поиск в справке по тексту

C-h a <any text> RET

Это означает, что вы вводите Ctrl+h, затем a, появится подсказка, как показано ниже.

Search for command (word list or regexp):

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

Помощь в поиске функций

M-x describe-function RET delete-selection-mode RET

Введите Alt+x, затем введите describe-function, а затем Enter, введите function name, как delete-selection-mode выше.

Попробуйте изучить все другие подкоманды справки. Возможно, вы найдете что-то удивительное.

Магит

По умолчанию magit считывает конфигурацию git из текущего репозитория, а не из глобальной конфигурации. Поэтому, если в текущем репозитории нет ограничений user.email и user.name, то при фиксации с помощью команды magit будут использоваться имя пользователя и адрес электронной почты по умолчанию, которые могут отличаться от глобальных настроенных значений.

В этом случае может возникнуть следующая проблема.

Enumerating objects: 40, done.
Counting objects: 100% (40/40), done.
Delta compression using up to 8 threads
Compressing objects: 100% (17/17), done.
Writing objects: 100% (22/22), 2.30 KiB | 261.00 KiB/s, done.
Total 22 (delta 11), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (11/11)
remote: Processing changes: refs: 1, done
remote:
remote: ERROR:  In commit 8f353574981447b17f8cfc73a2e3bc00850fdf70
remote: ERROR:  committer email address [email protected]
remote: ERROR:  does not match your user account.
remote: ERROR:
remote: ERROR:  The following addresses are currently registered:
remote: ERROR:    [email protected]
remote: ERROR:
remote: ERROR:  To register an email address, please visit:
remote: ERROR:  https://gerrit.codeart.com/#/settings/contact
remote:
remote:
To https://gerrit.codeart.com/a/auto/test
 ! [remote rejected] HEAD -> refs/publish/master (invalid committer)
error: failed to push some refs to 'https://gerrit.codeart.com/a/auto/autotest'

Чтобы решить эту проблему, просто настройте user.email и user.name в текущем репозитории.

git config user.name "Bruce Wen"
git config user.email "[email protected]"

Настройка

В Emacs мы можем настроить все с помощью команды M-x customize, а затем выбрать другую группу настройки для целевой настройки. Таким образом, вы можете вносить изменения в интерактивном режиме, применять и сохранять изменения.

Например, если вы хотите изменить отображение Emacs, включая шрифты, цвета и так далее. Вы можете выбрать [Faces] клавишей Enter. Затем он приведет вас к [Faces] подгруппам:

Там можно многое изменить. Кроме того, вы можете искать все, что хотите настроить, с помощью верхней панели поиска. Например, если вам не нравится цвет фона текстового поля поиска по умолчанию (желтый), вы можете выполнить поиск «поле», а затем найти, на каком лице отображается желтый цвет фона, а затем внести изменения. На самом деле это «[Поле виджета]». Я изменил его так, как показано ниже:

Теперь я перечислил некоторые из часто используемых настроек и то, как это сделать в файле инициализации.

Настройки шрифта

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

  • по умолчанию
  • мода-линия
  • панель вкладок
  • строка табуляции

Запустите команду M-x describe-face, а затем выберите default, чтобы помочь буферу, а затем нажмите настроить-это-лицо, чтобы открыть буфер Настроить лицо. Затем введите имя вашего любимого шрифта в Семейство шрифтов и нажмите Применить и сохранить. Сделайте то же самое для mode-line , tab-bar и tab-line . Мне нравится Hack Nerd Font. Вы также можете попробовать другие Nerd Fonts.

Показать номера строк

(global-display-line-numbers-mode 1)

Чтобы показать относительное число, добавьте строку ниже (Emacs 28+)

(setq display-line-numbers-type 'relative)

Показать номер строки курсора другим цветом переднего плана

(set-face-attribute 'line-number-current-line nil :background "default" :foreground "#ffb733")

Отображать линию курсора в другом цвете фона

(global-hl-line-mode 1)

Показать индикатор заполнения столбца

Во-первых, установить значение по умолчанию fill-column командой:

(setq-default fill-column 79)

Затем включите глобальное отображение индикатора заполнения столбца командой:

(global-display-fill-column-indicator-mode 1) 

Это сделает индикатор заполнения столбца видимым в том месте, где находится значение столбца заполнения.

Затем включите режим автозаполнения, чтобы включить автоматический перенос, когда длина строки превышает значение столбца заполнения.

Последний шаг: настройте значение столбца заполнения для разных режимов с помощью крючков:

(add-hook 'java-mode-hook (lambda () (setq fill-column 120)))
(add-hook 'python-mode-hook (lambda () (setq fill-column 79)))

В приведенном выше коде столбец заполнения будет автоматически изменен на 120, когда Emacs перейдет в режим java (файл *.java открыт в текущем буфере) и 79 для режима python. Это очень полезная конфигурация для большинства разработчиков, которые могут работать над проектами, используя разные языки программирования.

Показать описание справочного документа о функции или ключевом слове в строке курсора

M-x toggle-debug-on-error

Показывать вертикальную границу лучше

(set-face-attribute 'vertical-border nil :background "default" :foreground "#4e4e7d")
(set-display-table-slot standard-display-table
                        'vertical-border
                        (make-glyph-code ?│))

Показать пункт соответствия в индивидуальном цвете

(set-face-attribute 'show-paren-match-expression nil :background "yellow")

Развернуть окно и восстановить

Прежде всего, включите winner-mode на M-x winner-mode. Затем запустите команду M-x maximize-window, чтобы развернуть окно, и запустите команду C-c <, чтобы восстановить предыдущую компоновку окна. Затем выполните команду C-c >, чтобы переключиться на развернутое окно.

Настоятельно рекомендуется включить winner-mode по умолчанию. Очень полезно переключаться назад и вперед для макета окна или буфера.

Показать информацию о текущем основном режиме

Команда C-h m для отображения основного режима текущего буфера.

Сохраните настройку в настроенный файл, а не в файл инициализации

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

(setq custom-file "~/.config/emacs-custom.el")
(load custom-file)

Сохранить сеансы

Управление сессиями очень важно в IDE. Чтобы автоматически сохранять и восстанавливать сеанс для Emacs, добавьте следующую строку в файл инициализации:

(desktop-save-mode 1)

Обратитесь к разделу Сохранение сеансов Emacs для получения дополнительной информации.

Пакеты для установки

Все пакеты должны быть доступны на melpa, и вы можете установить их командой likeM-x package-install RET which-key RET.

  • пакет использования
  • прямой
  • смарт-режим-линия
  • дум-темы
  • emacs-какой-ключ
  • деревья
  • company — Модульная система автодополнения текста
  • снаряд

Если вы не можете получить доступ к melpa из-за проблем с сетью в вашей среде разработки, вы можете установить ее на другом компьютере и скопировать установленные пакеты в свою среду разработки. Обратите внимание, что и пакет, и его зависимости должны быть скопированы в папку ~/.emacs.d/elpa/.

Некоторые пакеты можно установить вручную, если их не нужно компилировать. Например, вы можете установить use-package, клонировав его по локальному пути и сконфигурировав его в файле init.el с помощью следующего кода:

(eval-when-compile
 (add-to-list 'load-path "/repo/egugwen/github/use-package")
 (require 'use-package))
(setq use-package-always-ensure t)

Elpy для разработки Python в Emacs

Формат исходного кода

Известные вопросы:

странная ошибка: «выход аварийный с кодом 1»

Эта ошибка может возникнуть, если некоторые зависимости не были установлены. Итак, проверьте командой elpy-config, какие зависимости не были установлены. Установите их командой elpy-rpc-reinstall-virtualenv или вручную активируйте elpy virtualenv (в терминале перейдите в $HOME/.emacs.d/elpy/rpc-venv/bin и запустите командуsource activate) и установите все пропущенные зависимости.

Ошибка во время повторного отображения: (jit-lock-function 24) сигнализируется (ошибка «Обнаружено перекрытие строк (начало = 24, последний конец = 28)»)

Настройка LSP для Emacs

См. Установка режима LSP.

Конфигурация завершения

lsp-завершение-показать-детали

Эта переменная предоставляется lsp-mode.

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

Установив переменную lsp-completion-show-detail как выключенную, она станет такой, как показано ниже:

компания-всплывающая подсказка-выравнивание-аннотации

Эта переменная предоставляется интерфейсами корпоративного режима.

Приведенные выше снимки имеют эту переменную как on . Когда это off , это будет выглядеть так: («Мехтод» невыровнен по правому краю)

Работа с ктэгами

Создайте файл тегов для вашего проекта для Emacs

Перейдите в каталог вашего проекта и запустите команду ctags -e -f ~/.emacs.d/TAGS $PWD, и она соберет теги и запишет в файл ~/.emacs.d/TAGS.

Настроить в файле инициализации

Добавьте строку ниже в файл init.el:

(setq tags-file-name "~/.emacs.d/TAGS")

Использовать теги при редактировании файла

По ключу M-. (xref-find-definitions) показывает определение идентификатора точки. (См. Поиск идентификаторов)

В новом окне перейдите к строке, показывающей интересующую ссылку на API, и нажмите Enter, и он откроет файл в этом месте в исходном окне и сосредоточится на месте ссылки в этом файле. Чтобы вернуться к предыдущему файлу, используйте M-, (Alt+,). (Мы также можем использовать клавишу для переключения буфера назад C-x > и вперед C-x < .)

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

Дополнительные полезные команды см. в разделе Команды внешних ссылок.

Тиркс

Редактировать несколько строк

  • Запустить режим прямоугольника: C-x SPC
  • Выберите целевую область содержимого: C-p / C-n
  • Чтобы добавить содержимое: Установите Целевую область с помощью : C-x r t, затем введите содержимое, а затем нажмите клавишу RET (Enter).
  • Чтобы удалить содержимое: Установите целевую область по: C-x r k, затем удалите содержимое выделенных областей.
  • Чтобы удалить специальный символ ^M, сгенерированный в Windows: M-x replace-string RET C-q C-m RET RET . Примечание: клавиша C-q C-m предназначена для ввода символа ^M.

Открыть несколько файлов

  • установите значение find-file-wildcards как t
  • при поиске файла по C-x C-f введите * или *.[ext], чтобы открыть все файлы или все файлы с .ext в каталоге.

ДЕЛАТЬ:

Запись видео с https://obsproject.com/welcome

Ссылаться на:

https://stackoverflow.com/questions/761706/edit-multiple-lines-at-once-in-emacs

Включить истинный цвет (24-битный цвет)

Обратитесь к https://www.gnu.org/software/emacs/manual/html_node/efaq/Colors-on-a-TTY.html

Я использовал приведенное ниже решение для версии Emacs 28.1 в Linux.

$ cat terminfo-custom.src

xterm-emacs|xterm with 24-bit direct color mode for Emacs,
  use=xterm-256color,
  setb24=\E[48\:2\:\:%p1%{65536}%/%d\:%p1%{256}%/%{255}%&\
     %d\:%p1%{255}%&%dm,
  setf24=\E[38\:2\:\:%p1%{65536}%/%d\:%p1%{256}%/%{255}%&\
     %d\:%p1%{255}%&%dm,

$ tic -x -o ~/.terminfo terminfo-custom.src

$ TERM=xterm-emacs emacs -nw

И это хорошо работает:

Проблема с цветом Windows

Когда я запускаю emacs -nw в Windows, он не может отображать 256 цветов, что плохо.

Я вижу только следующие цвета на выходе list-colors-display:

Мне удалось найти исходный код, который объясняет, почему в Windows Emacs поддерживает только 16 цветов.

emacs/src/dispnew.c

1 #ifdef WINDOWSNT                                                               │
6572   terminal_type = (char *)"w32console";                                        │                                                                                                                                                                                         1 #else                                                                          │
2   terminal_type = getenv ("TERM");                                             │
3 #endif

/* Open a display on the controlling tty. */
t = init_tty (0, terminal_type, 1); /* Errors are fatal. */

А init_tty определяется в emacs/src/term.c

   16 #ifdef WINDOWSNT                                                               │
   15   {                                                                            │
   14     struct frame *f = XFRAME (selected_frame);                                 │
   13     int height, width;                                                         │                                                                                                                                                                                        12                                                                                │
   11     initialize_w32_display (terminal, &width, &height);                        │                                                                                                                                                                                        10                                                                                │
    9     FrameRows (tty) = height;                                                  │
    8     FrameCols (tty) = width;                                                   │
    7     tty->specified_window = height;                                            │                                                                                                                                                                                         6                                                                                │
    5     FRAME_VERTICAL_SCROLL_BAR_TYPE (f) = vertical_scroll_bar_none;             │                                                                                                                                                                                         4     FRAME_HAS_HORIZONTAL_SCROLL_BARS (f) = 0;                                  │                                                                                                                                                                                         3     tty->char_ins_del_ok = 1;                                                  │                                                                                                                                                                                         2     baud_rate = 19200;                                                         │                                                                                                                                                                                         1   } 

Затем, проверив initialize_w32_display в emacs/src/w32console.c, мы увидим соответствующие методы: w32con_write_glyphs и w32_face_attributes.

Поэтому он не поддерживает 256 цветов для запуска Emacs в консоли Windows. И нет поддержки для запуска Emacs в Windows Terminal — он его не определяет. Итак, если мы хотим использовать 256 цветов в Windows Terminal Emacs, нам нужно успеть внести изменения в Emacs, а затем перестроить его. Для этого предназначен проект GitHub emacs-w32con-vt. Я не пробовал, но надеюсь, что это работает.

Ошибка собственного компилятора из-за пропущенных библиотек

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

Например, когда я пытался использовать smart-mode-line с smart-mode-line-powerline-theme, мне не удалось загрузить powerline-theme из-за отсутствия библиотеки gcc:

(require 'smart-mode-line)
(require 'smart-mode-line-powerline-theme)
(setq powerline-arrow-shape 'curve)
(setq powerline-default-separator-dir '(right . left))
(setq sml/theme 'dark)
(sml/setup)
Native compiler error: (lambda (arg6 &optional) (let ((f #'handle-switch-frame)) (funcall f arg6))), "Compiling /home/egugwen/.emacs.d/eln-cache/28.1-7901736e/subr--trampoline-68616e646c652d7377697463682d6672616d65_handle_switch_frame_0.eln...
ld: cannot find crtbeginS.o: No such file or directory
ld: cannot find -lgcc
ld: cannot find -lgcc_s
libgccjit.so: error: error invoking gcc driver
Debugger entered--Lisp error: (native-ice \"failed to compile\" \"/home/egugwen/.emacs.d/eln-cache/28.1-7901736e/sub...\" \"error invoking gcc driver\")
  comp--compile-ctxt-to-file(\"/home/egugwen/.emacs.d/eln-cache/28.1-7901736e/sub...\")
  comp-compile-ctxt-to-file(\"/home/egugwen/.emacs.d/eln-cache/28.1-7901736e/sub...\")
  comp-final1()
  load-with-code-conversion(\"/proj/crbs/user/egugwen/.tmp/emacs-int-comp-subr--...\" \"/proj/crbs/user/egugwen/.tmp/emacs-int-comp-subr--...\" nil t)
  command-line-1((\"-l\" \"/proj/crbs/user/egugwen/.tmp/emacs-int-comp-subr--...\"))
  command-line()
  normal-top-level()

Чтобы решить эту проблему, нам нужно установить библиотеки (например, скачать их с https://rhel.pkgs.org/8/epel-x86_64/libgccjit-8.5.0-17.el8.x86_64.rpm.html) или используйте альтернативные пакеты Emacs (в этом случае используйте другую тему, а не Powerline).

ojectile-bookmarks.eld заблокирован *** (pid 21342): (s, q, p, ?)?

Найдите все символические файлы по tree -a -f $PWD | grep -iE '\.#.*', а затем удалите их все

Часто используемые команды

Окна

  • Развернуть окно: M-x развернуть-окно
  • Окно восстановления: M-x balance-windows

Полезные ключи

Примечание. M — это клавиша Alt на большинстве клавиатур.

  • Shift-M-,: добавить комментарий после текущей строки.
  • М-. : Показать ссылки на идентификатор под курсором в новом окне
  • M-, : вернуться туда, где вы ранее вызывали M-. и друзья (xref-pop-marker-stack).
  • РС . : Символ поиска под курсором. (Поиск по символу)
  • M-u: Заглавные буквы слова после курсора.
  • M-l: в нижнем регистре слово после курсора.
  • C-x C-l: строчные буквы слова в регионе. Этот ключ по умолчанию отключен, команда downcase-region. Противоположные ключ и команда — C-x C-u и upcase-region.
  • C-M-\ : равно M-x области отступа для форматирования кода.
  • C-M-b : перейти назад к соответствующей скобке
  • C-M-f : Перейти вперед к соответствующей скобке
  • C-x z: выполнить последнюю команду, а затем нажать z для продолжения повторения. Очень полезно для команд переключения.
  • C-x C-q: включить/отключить режим только для чтения.
  • C-x p g: Найти регулярное выражение — например, grep -rE $PWD, выполнить поиск файлов, имеющих текст, совпадающий с заданным регулярным выражением в текущем проекте. Это ярлык пакета снаряд. Он зависит от переменной semantic-symref-filepattern-alist и команды grep. Если вы видите сообщение Настроить `semantic-symref-filepattern-alist' для *** major-mode, вам нужно добавить новое значение в semantic-symref-filepattern-alist, чтобы указать какие расширения файлов используются для выполнения grepдля какого основного режима. Например, (добавить в список ‘semantic-symref-filepattern-alist’ (режим scala “*.scala”)). Обычно это добавляется при установке пакета. См. снимок ниже.

Пакет emacs-which-key очень удобен для быстрого поиска нужного ключа или получения общего обзора всех ключей или подразделов.

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

Спасибо за прочтение!

Удачного кодирования!