--- description: 'Конфигурация, используемая в текстовых редакторах в проекте документации FreeBSD' next: books/fdp-primer/trademarks params: path: /books/fdp-primer/editor-config/ prev: books/fdp-primer/writing-style showBookMenu: 'true' tags: ["editor", "configuration", "vim", "emacs", "FreeBSD"] title: 'Глава 13. Настройка редактора' weight: 13 --- [[editor-config]] = Настройка редактора :doctype: book :toc: macro :toclevels: 1 :icons: font :sectnums: :sectnumlevels: 6 :sectnumoffset: 13 :partnums: :source-highlighter: rouge :experimental: :images-path: books/fdp-primer/ ifdef::env-beastie[] ifdef::backend-html5[] :imagesdir: ../../../../images/{images-path} endif::[] ifndef::book[] include::shared/authors.adoc[] include::shared/mirrors.adoc[] include::shared/releases.adoc[] include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists.adoc[] include::shared/{{% lang %}}/urls.adoc[] toc::[] endif::[] ifdef::backend-pdf,backend-epub3[] include::../../../../../shared/asciidoctor.adoc[] endif::[] endif::[] ifndef::env-beastie[] toc::[] include::../../../../../shared/asciidoctor.adoc[] endif::[] Настройка конфигурации текстового редактора может ускорить и упростить работу с документами, а также помочь им соответствовать рекомендациям FDP. [[editor-config-vim]] == Vim Установите из package:editors/vim[], затем следуйте инструкциям по настройке в разделе crossref:editor-config[editor-config-vim-config,Конфигурация]. Более опытные пользователи могут использовать полноценный линтер, например link:https://github.com/dense-analysis/ale[Ale], который также может работать как клиент link:https://langserver.org/[Language Server Protocol] для Vim. [[editor-config-vim-use]] === Использование Создатели страниц Справочника могут использовать следующие сочетания клавиш для переформатирования: * Нажмите kbd:[P], чтобы переформатировать абзацы или выделенный текст в режиме Visual. * Нажмите kbd:[T], чтобы заменить группы из восьми пробелов на табуляцию. В документацию добавлен линтер link:https://vale.sh[Vale] для проверки грамматических и стилистических ошибок. Vale поддерживает различные редакторы и IDE. Vale может быть уже установлен как зависимость мета-порта package:textproc/docproj[]. Если нет, установите package:textproc/vale[] с помощью: [source, console] .... $ pkg install vale .... Установите link:https://github.com/dense-analysis/ale[Ale] для интеграции в package:editors/vim[], чтобы использовать package:textproc/vale[]. [source, console?prompt=%] .... % mkdir -p ~/.vim/pack/vendor/start % git clone --depth 1 https://github.com/dense-analysis/ale.git ~/.vim/pack/vendor/start/ale .... Пользователи, использующие менеджеры плагинов для package:editors/vim[], не нуждаются в вышеописанном и должны следовать инструкциям своего менеджера плагинов для установки link:https://github.com/dense-analysis/ale[Ale]. В данный момент из-за ошибки в link:https://vale.sh[Vale] необходимо скопировать конфигурацию link:https://vale.sh[Vale] в домашний каталог. Учитывая, что репозиторий был склонирован в [.filename]#~/doc#, скопируйте следующим образом: [source, console?prompt=%] .... % cp -R ~/doc/.vale* ~/ .... [[editor-config-vim-config]] === Конфигурация Отредактируйте файл [.filename]#~/.vimrc#, добавив следующие строки в конец файла: [source.programlisting, viml] .`~/.vimrc` .... if has("autocmd") au BufNewFile,BufRead *.adoc call Set_ADOC() au BufNewFile,BufRead *.[1-9] call Set_MAN() endif " has(autocmd) function Set_Highlights() "match ExtraWhitespace /^\s* \s*\|\s\+$/ return 0 endfunction " Set_Highlights_Adoc() function Set_Highlights_MAN() highlight default link OverLength ErrorMsg match OverLength /\%71v.\+/ return 0 endfunction " Set_Highlights_MAN() function ShowSpecial() setlocal list listchars=tab:>>,trail:*,eol:$ hi def link nontext ErrorMsg return 0 endfunction " ShowSpecial() function Set_COMMON() setlocal number setlocal shiftwidth=2 setlocal tabstop=8 setlocal softtabstop=2 setlocal formatprg="fmt -p" setlocal autoindent setlocal smartindent call ShowSpecial() call Set_Highlights() return 0 endfunction " Set_COMMON() function Set_ADOC() setlocal syntax=asciidoc setlocal filetype=asciidoc call Set_COMMON() return 0 endfunction " Set_ADOC() function Set_MAN() setlocal syntax=man setlocal filetype=man setlocal textwidth=70 " Rewrap paragraphs noremap P gqj " Replace spaces with tabs noremap T :s/ /\t/ call Set_COMMON() call Set_Highlights_MAN() return 0 endfunction " Set_Man() let g:ale_fixers = { \ '*': ['remove_trailing_lines', 'trim_whitespace'], \} let g:ale_linters = { \ 'asciidoc': ['vale'], \} let g:ale_fix_on_save = 1 .... [IMPORTANT] ====== Приведённая выше конфигурация автоматически удалит конечную строку, конечные пробелы и множественные пробелы, которые могут отображать дополнительные нежелательные изменения в выводе `git diff`. В таких случаях обязательно укажите это в сообщении коммита. ====== [[editor-config-emacs]] == Emacs Установка из package:editors/emacs[] или package:editors/emacs-devel[]. [[editor-config-emacs-igor]] === Автоматизированная проверка правописания с Flycheck и Igor Пакет link:https://www.flycheck.org/[Flycheck] доступен из link:https://melpa.org/[Milkypostman's Emacs Lisp Package Archive] (MELPA). Если MELPA ещё не добавлен в packages-archives Emacs, его можно добавить, выполнив [source, emacs-lisp] .... (add-to-list 'package-archives '("melpa" . "http://stable.melpa.org/packages/") t) .... Добавьте строку в файл инициализации Emacs (один из [.filename]#~/.emacs#, [.filename]#~/.emacs.el# или [.filename]#~/.emacs.d/init.el#), чтобы сделать это изменение постоянным. Для установки Flycheck выполните [source, emacs-lisp] .... (package-install 'flycheck) .... Создайте проверяющий модуль Flycheck для package:textproc/igor[] с помощью выполнения [source, emacs-lisp] .... (flycheck-define-checker igor "FreeBSD Documentation Project sanity checker. See URLs https://www.freebsd.org/docproj/ and http://www.freshports.org/textproc/igor/." :command ("igor" "-X" source-inplace) :error-parser flycheck-parse-checkstyle :modes (nxml-mode) :standard-input t) (add-to-list 'flycheck-checkers 'igor 'append) .... Еще раз, добавьте эти строки в файл инициализации Emacs, чтобы изменения стали постоянными. [[editor-config-emacs-specifc]] === Специфичные настройки документации FreeBSD Чтобы применить настройки, специфичные для проекта документации FreeBSD, создайте файл [.filename]#.dir-locals.el# в корневом каталоге репозитория документации и добавьте в него следующие строки: [source, emacs-lisp] .... ;;; Directory Local Variables ;;; For more information see (info "(emacs) Directory Variables") ((nxml-mode (eval . (turn-on-auto-fill)) (fill-column . 70) (eval . (require 'flycheck)) (eval . (flycheck-mode 1)) (flycheck-checker . igor) (eval . (add-to-list 'rng-schema-locating-files "~/.emacs.d/schema/schemas.xml")))) .... [[editor-config-nano]] == nano Установка из package:editors/nano[]. [[editor-config-nano-config]] === Конфигурация В текущей версии nano нет файла подсветки синтаксиса для adoc/asciidoc. Поэтому создадим его с нуля, используя текстовый редактор для создания нового файла или добавления строк в [.filename]#~/.nanorc# со следующим содержимым: [source] .`~/.nanorc` .... syntax "asciidoc" "\.(adoc|asc|asciidoc)$" # main header color red "^====+$" # h1 color red "^==[[:space:]].*$" color red "^----+$" # h2 color magenta "^===[[:space:]].*$" color magenta "^~~~~+$" # h4 color green "^====[[:space:]].*$" color green "^\^\^\^\^+$" # h5 color brightblue "^=====[[:space:]].*$" color brightblue "^\+\+\+\++$" # attributes color brightgreen ":.*:" color brightred "\{[a-z0-9]*\}" color red "\\\{[a-z0-9]*\}" color red "\+\+\+\{[a-z0-9]*\}\+\+\+" # Paragraph Title color yellow "^\..*$" # source color magenta "^\[(source,.+|NOTE|TIP|IMPORTANT|WARNING|CAUTION)\]" # Other markup color yellow ".*[[:space:]]\+$" color yellow "_[^_]+_" color yellow "\*[^\*]+\*" color yellow "\+[^\+]+\+" color yellow "`[^`]+`" color yellow "\^[^\^]+\^" color yellow "~[^~]+~" color yellow "'[^']+'" color cyan "`{1,2}[^']+'{1,2}" # bullets color brightmagenta "^[[:space:]]*[\*\.-]{1,5}[[:space:]]" # anchors color brightwhite "\[\[.*\]\]" color brightwhite "<<.*>>" # trailing whitespace color ,blue "[[:space:]]+$" # multiples of eight spaces at the start a line # (after zero or more tabs) should be a tab color ,blue "^([TAB]*[ ]{8})+" # tabs after spaces color ,yellow "( )+TAB" # highlight indents that have an odd number of spaces color ,red "^(([ ]{2})+|(TAB+))*[ ]{1}[^ ]{1}" .... Обработать файл для создания встроенных табуляций: [source, console?prompt=%] .... % perl -i'' -pe 's/TAB/\t/g' ~/.nanorc .... [[editor-config-nano-use]] === Использование Укажите дополнительные полезные опции при запуске редактора: [source, console?prompt=%] .... % nano -AKipwz -T8 _index.adoc .... Пользователи man:csh[1] могут определить алиас в [.filename]#~/.cshrc#, чтобы автоматизировать эти параметры: [source, shell] .... alias nano "nano -AKipwz -r 70 -T8" .... После определения псевдонима параметры будут добавлены автоматически: [source, console?prompt=%] .... % nano _index.adoc ....