第 13 章. 编辑器配置

调整文本编辑器配置可以使处理文档文件更快更容易,并帮助文档符合 FDP 指南。

13.1. Vim

editors/vim 安装,然后按照 配置 中的配置说明进行操作。更高级的用户可以使用像 Ale 这样的合适的代码风格检查器,它也可以充当 Vim 语言服务器协议 客户端。

13.1.1. 使用

手册页编写者可以使用以下键盘快捷键重新格式化

  • P 重新格式化段落或在可视模式下已选中的文本。

  • T 将八个空格的组替换为制表符。

已引入名为 Vale 的代码风格检查器来检查文档中的语法和美观错误。Vale 支持各种编辑器和 IDE。

Vale 可能已经作为 textproc/docproj 元端口的依赖项安装。如果没有,请使用以下命令安装 textproc/vale

$ pkg install vale

安装 Ale 以集成到 editors/vim 中,用于使用 textproc/vale

% mkdir -p ~/.vim/pack/vendor/start
% git clone --depth 1 https://github.com/dense-analysis/ale.git ~/.vim/pack/vendor/start/ale

正在为 editors/vim 使用插件管理器,则无需执行上述操作,应按照该插件管理器的说明安装 Ale

目前,由于 Vale 中存在一个错误,因此需要将 Vale 配置复制到主目录。考虑到存储库已克隆到 ~/doc 中,请按以下方式复制:

% cp -R ~/doc/.vale* ~/

13.1.2. 配置

编辑 ~/.vimrc,将以下几行添加到文件的末尾

~/.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/<CR>
  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

上述配置将自动删除尾随换行符、尾随空格和多个空格,这些空格可能会在 git diff 输出中显示额外的不需要的更改。在这种情况下,请在提交日志中正确提及。

13.2. Emacs

13.2.1. 使用 Flycheck 和 Igor 自动校对

Flycheck 软件包可从 Milkypostman 的 Emacs Lisp 软件包存档 (MELPA) 获取。如果 MELPA 尚未在 Emacs 的 packages-archives 中,可以通过执行以下操作添加:

(add-to-list 'package-archives '("melpa" . "http://stable.melpa.org/packages/") t)

将该行添加到 Emacs 的初始化文件(~/.emacs~/.emacs.el~.emacs.d/init.el 之一)以使此更改永久生效。

要安装 Flycheck,请执行以下操作:

(package-install 'flycheck)

textproc/igor 创建 Flycheck 检查器,方法是执行以下操作:

(flycheck-define-checker igor
  "FreeBSD Documentation Project sanity checker.

See URLs https://freebsd.ac.cn/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 的初始化文件以使更改永久生效。

13.2.2. FreeBSD 文档特定设置

要应用 FreeBSD 文档项目特有的设置,请在文档存储库的根目录中创建 .dir-locals.el 并将以下几行添加到该文件中

;;; 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"))))

13.3. nano

editors/nano 安装。

13.3.1. 配置

目前,nano 分发版中没有 adoc/asciidoc 语法高亮文件。因此,让我们从头开始创建一个,并使用编辑器创建新文件或在 ~/.nanorc 中添加以下内容:

~/.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}"

处理文件以创建嵌入式制表符

% perl -i'' -pe 's/TAB/\t/g' ~/.nanorc

13.3.2. 使用

运行编辑器时指定其他有用的选项

% nano -AKipwz -T8 _index.adoc

csh(1) 的用户可以在 ~/.cshrc 中定义别名来自动执行这些选项

alias nano "nano -AKipwz -r 70 -T8"

定义别名后,将自动添加这些选项

% nano _index.adoc

**最后修改时间:**2024 年 9 月 20 日,作者:Fernando Apesteguía