Как разработчик, было бы жаль не научиться использовать классические редакторы разработки, такие как 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
очень удобен для быстрого поиска нужного ключа или получения общего обзора всех ключей или подразделов.
На данный момент это то, чем я хочу поделиться. Больше контента может появиться позже.
Спасибо за прочтение!
Удачного кодирования!