> For the complete documentation index, see [llms.txt](https://book.bsdcn.org/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://book.bsdcn.org/man/man1/less.1.md).

# less.1

`less` — display the contents of a file in a terminal

## 名称

`less`

## 概要

`less [-[+]aABcCdeEfFgGiIJKLmMnNqQrRsSuUVwWX~] [-b size] [-D color] [-h lines] [-j line] [-k key-file] [-{o|O} log-file] [-p pattern] [-P prompt] [-t tag] [-T tags-file] [-x tab[,tab...]] [-y lines] [-z lines] [-"cc] [-# shift] [+command] [--] [file ...]`

`less -?`

`less --help`

`less -V`

`less --version`

（有关使用长选项名的替代选项语法，请参见选项章节。）

## 描述

`less` 是一个类似于 [more(1)](https://github.com/FreeBSD-Ask/freebsd-man-sc/blob/main/man1/more.1.md) 的程序，但它具有更多功能。`less` 不需要在启动前读取整个输入文件，因此对于大型输入文件，它的启动速度比 [vi(1)](/man/man1/vi.1.md) 等文本编辑器更快。`less` 使用 termcap（或在某些系统上使用 terminfo），因此可以在多种终端上运行。甚至对硬拷贝终端也有有限的支持。（在硬拷贝终端上，应在屏幕顶部打印的行以脱字符为前缀。）

## 命令

命令基于 [more(1)](https://github.com/FreeBSD-Ask/freebsd-man-sc/blob/main/man1/more.1.md) 和 [vi(1)](/man/man1/vi.1.md)。命令前可以加一个十进制数字，在以下描述中称为 N。该数字被某些命令使用，如所述。

在以下描述中，`^X` 表示 control-X。`ESC` 代表 ESCAPE 键；例如 `ESC-v` 表示两字符序列"ESCAPE"，然后是"v"。

`h` 或 `H`：帮助：显示这些命令的摘要。如果忘记了所有其他命令，请记住这一条。

`SPACE` 或 `^V` 或 `f` 或 `^F`：向前滚动 N 行，默认一屏（参见下文的 `-z` 选项）。如果 N 大于屏幕大小，仅显示最后一屏。警告：某些系统将 `^V` 用作特殊字面化字符。

`z`：与 `SPACE` 类似，但如果指定了 N，它将成为新的窗口大小。

`ENTER` 或 `RETURN` 或 `^N` 或 `e` 或 `^E` 或 `j` 或 `^J`：向前滚动 N 行，默认 1。即使 N 大于屏幕大小，也会显示全部 N 行。

`d` 或 `^D`：向前滚动 N 行，默认屏幕大小的一半。如果指定了 N，它将成为后续 `d` 和 `u` 命令的新默认值。

`b` 或 `^B` 或 `ESC-v`：向后滚动 N 行，默认一屏（参见下文的 `-z` 选项）。如果 N 大于屏幕大小，仅显示最后一屏。

`w`：与 `ESC-v` 类似，但如果指定了 N，它将成为新的窗口大小。

`y` 或 `^Y` 或 `^P` 或 `k` 或 `^K`：向后滚动 N 行，默认 1。即使 N 大于屏幕大小，也会显示全部 N 行。警告：某些系统将 `^Y` 用作特殊作业控制字符。

`u` 或 `^U`：向后滚动 N 行，默认屏幕大小的一半。如果指定了 N，它将成为后续 `d` 和 `u` 命令的新默认值。

`J`：与 `j` 类似，但继续滚动超过文件末尾。

`K` 或 `Y`：与 `k` 类似，但继续滚动超过文件开头。

`ESC-SPACE`：与 `SPACE` 类似，但滚动整屏，即使到达文件末尾。

`ESC-b`：与 `b` 类似，但滚动整屏，即使到达文件开头。

`ESC-j`：向前滚动 N 个文件行，默认 1。文件行是文件中的完整行，以换行符终止。

`ESC-k`：向后滚动 N 个文件行，默认 1。

`ESC-)` 或 `RIGHTARROW`：向右水平滚动 N 个字符，默认屏幕宽度的一半（参见 `-#` 选项）。如果指定了数字 N，它将成为未来 `RIGHTARROW` 和 `LEFTARROW` 命令的默认值。当文本滚动时，它的行为就像 `-S` 选项（截断行）生效一样。

`ESC-(` 或 `LEFTARROW`：向左水平滚动 N 个字符，默认屏幕宽度的一半（参见 `-#` 选项）。如果指定了数字 N，它将成为未来 `RIGHTARROW` 和 `LEFTARROW` 命令的默认值。

`ESC-}` 或 `^RIGHTARROW` 或 `SHIFT-RIGHTARROW`：向右水平滚动以显示最长显示行的末尾。

`ESC-{` 或 `^LEFTARROW` 或 `SHIFT-LEFTARROW`：向左水平滚动回到第一列。

`^END` 或 `SHIFT-END`：转到文件中的第 N 行，默认为文件末尾，并向右水平滚动以显示最长显示行的末尾。

`^HOME` 或 `SHIFT-HOME`：转到文件中的第 N 行，默认为 1（文件开头），并向左水平滚动回到第一列。

`r` 或 `^R` 或 `^L`：重绘屏幕。

`R`：重绘屏幕，丢弃任何缓冲输入。即重新加载当前文件。如果文件在查看时正在更改，这很有用。

`F`：向前滚动，并在到达文件末尾时继续尝试读取。通常此命令在已到达文件末尾时使用。这是一种监视正在增长的文件尾部的方法。（行为类似于 `tail -f` 命令。）要停止等待更多数据，请输入中断字符（通常是 `^C`）。在支持 [poll(2)](https://github.com/FreeBSD-Ask/freebsd-man-sc/blob/main/man2/poll.2.md) 的系统上，你也可以使用 `^X` 或 `--intr` 选项指定的字符。如果输入是管道且 `--exit-follow-on-close` 选项生效，当管道的输入端关闭时，`less` 将自动停止等待数据。

`ESC-f`：与 `F` 类似，但每次找到匹配最后搜索模式的行时，终端响铃。

`ESC-F`：与 `F` 类似，但一旦找到匹配最后搜索模式的行，终端响铃并停止向前滚动。

`g` 或 `<` 或 `ESC-<` 或 `HOME`：转到文件中的第 N 行，默认为 1（文件开头）。（警告：如果 N 很大，这可能会很慢。）

`G` 或 `>` 或 `ESC->` 或 `END`：转到文件中的第 N 行，默认为文件末尾。（警告：如果 N 很大，或者未指定 N 且正在读取标准输入而非文件，这可能会很慢。）

`ESC-G`：与 `G` 相同，但如果未指定数字 N 且输入是标准输入，则转到当前缓冲的最后一行。

`p` 或 `%`：转到文件中 N 百分比的位置。N 应在 0 到 100 之间，可以包含小数点。

`P`：转到文件中包含字节偏移量 N 的行。

`{`：如果屏幕顶部显示的行中出现左花括号，`{` 命令将转到匹配的右花括号。匹配的右花括号位于屏幕底行。如果顶行有多个左花括号，可以使用数字 N 指定该行上的第 N 个括号。

`}`：如果屏幕底部显示的行中出现右花括号，`}` 命令将转到匹配的左花括号。匹配的左花括号位于屏幕顶行。如果底行有多个右花括号，可以使用数字 N 指定该行上的第 N 个括号。

`(`：与 `{` 类似，但适用于圆括号而非花括号。

`)`：与 `}` 类似，但适用于圆括号而非花括号。

`[`：与 `{` 类似，但适用于方括号而非花括号。

`]`：与 `}` 类似，但适用于方括号而非花括号。

`ESC-^F`：后跟两个字符，作用类似 `{`，但使用这两个字符分别作为开括号和闭括号。例如，`ESC ^F < >` 可用于向前转到与顶部显示行中 `<` 匹配的 `>`。

`ESC-^B`：后跟两个字符，作用类似 `}`，但使用这两个字符分别作为开括号和闭括号。例如，`ESC ^B < >` 可用于向后转到与底部显示行中 `>` 匹配的 `<`。

`m`：后跟任意小写或大写字母，用该字母标记第一个显示行。如果通过 `-J` 选项启用了状态列，状态列会显示标记的行。

`M`：作用类似 `m`，但标记的是最后一个显示行而非第一个显示行。

`'`（单引号）：后跟任意小写或大写字母，返回到之前用该字母标记的位置。后跟另一个单引号，返回到上一次执行"大"移动命令的位置。后跟 `^` 或 `$`，分别跳转到文件开头或末尾。在 `less` 的单次调用中检查新文件时，标记会被保留，因此 `'` 命令可用于在输入文件之间切换。`--save-marks` 选项使标记在不同 `less` 调用之间保留。

`^X^X`：与单引号相同。

`ESC-m`：后跟任意小写或大写字母，清除该字母标识的标记。

`/pattern`：在文件中向前搜索包含该模式的第 N 行。N 默认为 1。模式是正则表达式，由系统提供的正则表达式库识别。默认情况下，搜索区分大小写（大写和小写被视为不同）；可以使用 `-i` 选项更改此行为。搜索从第一个显示行开始（但参见 `-a` 和 `-j` 选项，它们会更改此行为）。

某些字符在模式开头输入时是特殊的；它们修改搜索类型而不是成为模式的一部分：

`^N` 或 `!`：搜索不匹配模式的行。

`^E` 或 `*`：搜索多个文件。即，如果搜索到达当前文件末尾而未找到匹配项，搜索将继续到命令行列表中的下一个文件。

`^F` 或 `@`：从命令行列表中第一个文件的第一行开始搜索，无论屏幕上当前显示什么或 `-a` 或 `-j` 选项的设置如何。

`^K`：高亮当前屏幕上匹配模式的任何文本，但不移动到第一个匹配项（保持当前位置）。

`^R`：不解释正则表达式元字符；即进行简单的文本比较。

`^S`：后跟 1 到 5 之间的数字 N。仅对第 N 个带括号子模式有非空匹配的文本才被视为匹配模式。例如，搜索 `"(abc)|(def)"` 并用 `^S1` 修改将搜索 `abc` 的实例，但会高亮 `abc` 和 `def` 的实例。（仅在 `less` 使用 `posix`、`pcre` 或 `pcre2` 正则表达式库之一构建时支持。）可以指定多个 `^S` 修饰符，以匹配多个子模式。

`^W`：在当前文件中环绕搜索。即，如果搜索到达当前文件末尾而未找到匹配项，搜索将从当前文件的第一行继续到搜索开始的行。如果设置了 `^W` 修饰符，`^E` 修饰符将被忽略。

`^L`：下一个字符按字面意义处理；即，即使它是上述搜索修饰字符之一，它也会成为模式的一部分。

`?pattern`：在文件中向后搜索包含该模式的第 N 行。搜索从最后一个显示行开始（但参见 `-a` 和 `-j` 选项，它们会更改此行为）。

某些字符是特殊的，与 `/` 命令中相同：

`^N` 或 `!`：搜索不匹配模式的行。

`^E` 或 `*`：搜索多个文件。即，如果搜索到达当前文件开头而未找到匹配项，搜索将继续到命令行列表中的前一个文件。

`^F` 或 `@`：从命令行列表中最后一个文件的最后一行开始搜索，无论屏幕上当前显示什么或 `-a` 或 `-j` 选项的设置如何。

`^K`：与向前搜索相同。

`^R`：与向前搜索相同。

`^S`：与向前搜索相同。

`^W`：在当前文件中环绕搜索。即，如果搜索到达当前文件开头而未找到匹配项，搜索将从当前文件的最后一行继续到搜索开始的行。

`^L`：与向前搜索相同。

`ESC-/pattern`：与 `/*` 相同。

`ESC-?pattern`：与 `?*` 相同。

`n`：重复上一次搜索，搜索包含最后模式的第 N 行。如果上一次搜索被 `^N` 修改，则搜索不包含该模式的第 N 行。如果上一次搜索被 `^E` 修改，在当前文件中未满足时搜索继续到下一个（或上一个）文件。如果上一次搜索被 `^R` 修改，搜索不使用正则表达式。如果上一次搜索被 `^W` 修改，搜索在文件末尾（或开头）环绕。如果上一次搜索被 `^F` 或 `^K` 修改则无效果。

`N`：重复上一次搜索，但方向相反。

`ESC-n`：重复上一次搜索，但跨越文件边界。效果如同上一次搜索被 `*` 修改。

`ESC-N`：重复上一次搜索，但方向相反且跨越文件边界。

`ESC-u`：撤销搜索高亮。关闭匹配当前搜索模式的字符串的高亮。如果由于之前的 `ESC-u` 命令高亮已关闭，则重新打开高亮。任何搜索命令也会重新打开高亮。（也可以通过切换 `-G` 选项来禁用高亮；在这种情况下，搜索命令不会重新打开高亮。）

`ESC-U`：与 `ESC-u` 类似，但还清除保存的搜索模式。如果通过 `-J` 选项启用了状态列，这将清除状态列中标记的所有搜索匹配。

`&pattern`：仅显示匹配模式的行；不匹配模式的行不显示。如果模式为空（如果你输入 `&` 后立即按 `ENTER`），任何过滤都将关闭，所有行都会显示。过滤生效时，提示开头会显示一个与号，提醒文件中某些行可能被隐藏。可以输入多个 `&` 命令，在这种情况下仅显示匹配所有模式的行。

某些字符是特殊的，与 `/` 命令中相同：

`^N` 或 `!`：仅显示不匹配模式的行。

`^R`：不解释正则表达式元字符；即进行简单的文本比较。

`:e` `[filename]`：检查新文件。如果文件名缺失，将重新检查命令行文件列表中的"当前"文件（参见下文的 `:n` 和 `:p` 命令）。文件名中的百分号（%）被替换为当前文件名。井号（#）被替换为之前检查的文件名。但是，两个连续的百分号被简单替换为单个百分号。这允许你输入名称中包含百分号的文件名。类似地，两个连续的井号被替换为单个井号。文件名被插入到命令行文件列表中，以便后续的 `:n` 和 `:p` 命令可以看到它。如果文件名由多个文件组成，它们都会被插入到文件列表中，并检查第一个文件。如果文件名包含一个或多个空格，整个文件名应该用双引号括起来（另参见 `-"` 选项）。

`^X^V` 或 `E`：与 `:e` 相同。警告：某些系统将 `^V` 用作特殊字面化字符。在此类系统上，你可能无法使用 `^V`。

`:n`：检查下一个文件（来自命令行中给出的文件列表）。如果指定了数字 N，则检查第 N 个下一个文件。

`:p`：检查命令行列表中的上一个文件。如果指定了数字 N，则检查第 N 个上一个文件。

`:x`：检查命令行列表中的第一个文件。如果指定了数字 N，则检查列表中的第 N 个文件。

`:d`：从文件列表中删除当前文件。

`t`：如果当前标签有多个匹配项，转到下一个标签。有关标签的更多详细信息，请参见 `-t` 选项。

`T`：如果当前标签有多个匹配项，转到上一个标签。

`^O^N` 或 `^On`：在文件中向前搜索第 N 个下一个 OSC 8 超链接。

`^O^P` 或 `^Op`：在文件中向后搜索第 N 个上一个 OSC 8 超链接。

`^O^L` 或 `^Ol`：跳转到当前选中的 OSC 8 超链接。

`=` 或 `^G` 或 `:f`：打印有关正在查看的文件的一些信息，包括其名称以及底部显示行的行号和字节偏移量。如果可能，还会打印文件长度、文件中的行数以及最后显示行上方的文件百分比。

`-`：后跟一个命令行选项字母（参见下文的选项），这将更改该选项的设置并打印描述新设置的消息。如果在破折号后立即输入 `^P`（CONTROL-P），选项的设置会更改但不打印消息。如果选项字母有数值（如 `-b` 或 `-h`），或字符串值（如 `-P` 或 `-t`），可以在选项字母后输入新值。如果未输入新值，则打印描述当前设置的消息，不做任何更改。

`--`：与 `-` 命令类似，但采用长选项名（参见下文选项）而非单个选项字母。输入选项名后按 `ENTER` 或 `RETURN` 来更改它。你可以只输入选项名的开头，然后按 `TAB` 查找所有以该字符串开头的选项名。在第二个破折号后立即输入 `^P` 会抑制描述新设置的消息打印，与 `-` 命令相同。

`-+`：后跟一个命令行选项字母，这将把选项重置为默认设置并打印描述新设置的消息。（"-+X" 命令与命令行上的 `"-+X"` 作用相同。）这对字符串值选项不起作用。

`--+`：与 `-+` 命令类似，但采用长选项名而非单个选项字母。

`-!`：后跟一个命令行选项字母，这将把选项重置为其默认设置的"相反"值，并打印描述新设置的消息。这对数值或字符串值选项不起作用。

`--!`：与 `-!` 命令类似，但采用长选项名而非单个选项字母。

`_`（下划线）：后跟一个命令行选项字母，这将打印该选项当前设置的描述。选项的设置不会更改。

`__`（双下划线）：与 `_`（下划线）命令类似，但采用长选项名而非单个选项字母。输入选项名后必须按 `ENTER` 或 `RETURN`。

`+cmd`：使指定的 cmd 在每次检查新文件时执行。例如，`+G` 使 `less` 最初从文件末尾而非开头显示每个文件。

`V`：打印正在运行的 `less` 的版本号。

`q` 或 `Q` 或 `:q` 或 `:Q` 或 `ZZ`：退出 `less`。

以下七个命令可能有效也可能无效，取决于你的特定安装。

`v`：调用编辑器编辑当前正在查看的文件。编辑器取自环境变量 `VISUAL`（如果已定义），或 `EDITOR`（如果 `VISUAL` 未定义），如果两者都未定义则默认为 `vi`。另参见下文提示章节中关于 `LESSEDIT` 的讨论。

`!` shell-command：调用 shell 运行给定的 shell-command。命令中的百分号（%）被替换为当前文件名。井号（#）被替换为之前检查的文件名。`!!` 重复上一次 shell 命令。不带 shell 命令的 `!` 调用交互式 shell。如果在 `!` 后立即输入 `^P`（CONTROL-P），shell 命令执行后不打印"done"消息。在 Unix 系统上，shell 取自环境变量 `SHELL`，或默认为 `sh`。在 MS-DOS、Windows 和 OS/2 系统上，shell 是正常的命令处理器。

`#` shell-command：与 `!` 命令类似，但命令的扩展方式与提示字符串相同。例如，当前文件名将以 `%f` 形式给出。

`|` `<m>` shell-command：`<m>` 代表任何标记字母。将输入文件的一部分通过管道传送给给定的 shell 命令。通过管道传送的文件部分位于该字母标记的位置和当前屏幕之间。无论标记位置在当前屏幕之前还是之后，整个当前屏幕都包括在内。`<m>` 也可以是 `^` 或 `$`，分别表示文件开头或末尾。如果 `<m>` 是 `.` 或换行符，则通过管道传送当前屏幕。如果在标记字母后立即输入 `^P`（CONTROL-P），shell 命令执行后不打印"done"消息。

`s` filename：将输入保存到文件。这仅在输入是管道而非普通文件时有效。

`^O^O`：运行 shell 命令以打开当前 OSC 8 超链接中的 URI，该超链接由之前的 `^O^N` 或 `^O^P` 命令选中。为了找到 shell 命令，读取名为 `LESS_OSC8_xxx` 的环境变量，其中 `xxx` 是 URI 中的方案（第一个冒号之前的部分），如果 URI 中没有冒号则为空。然后环境变量的值以与提示字符串相同的方式扩展（特别是，任何 `%o` 实例都被替换为 URI），以生成 OSC 8 "处理器" shell 命令。处理器的标准输出是一个"打开器" shell 命令，然后执行该命令来打开 URI。

有两种特殊情况：

1. 如果 URI 以 `#` 开头，URI 的其余部分被视为同一文件中另一个 OSC 8 链接中 id 参数的值，`^O^O` 将直接跳转到该链接。
2. 如果打开器以字符 `:e` 开头，后跟空格和文件名，则不将打开器作为 shell 命令运行，而是在当前 `less` 实例中打开指定文件名。

在打开器接受完整 URI 作为命令行参数的简单情况下，处理器可以简单如：

```sh
echo mybrowser '%o'
```

在其他情况下，URI 可能需要修改，因此处理器可能需要对 `%o` 值进行一些操作。

如果未设置 `LESS_OSC8_xxx` 变量，则尝试 `LESS_OSC8_ANY` 变量。如果 `LESS_OSC8_xxx` 和 `LESS_OSC8_ANY` 都未设置，则无法打开使用 `xxx` 方案的链接。但是，`man` 方案（`LESS_OSC8_man` 未设置时使用）和 `file` 方案（`LESS_OSC8_file` 未设置时使用）有默认处理器，它们应在提供 [sed(1)](/man/man1/sed.1.md) 命令和与 Bourne shell [sh(1)](/man/man1/sh.1.md) 语法兼容的 shell 的系统上工作。如果使用 `LESS_OSC8_ANY` 覆盖 `LESS_OSC8_file`，必须将 `LESS_OSC8_file` 设置为 `-` 以表示不应使用默认值，`LESS_OSC8_man` 亦然。

通过 `%o` 传递给 OSC8 处理器的 URI 保证不包含任何单引号或双引号字符，但可能包含其他 shell 元字符，如分号、美元符号、与号等。处理器应注意在打开器命令中适当引用参数，以防止在打开包含 shell 元字符的 URI 时执行意外的 shell 命令。此外，由于处理器命令像命令提示一样扩展，任何由提示扩展解释的元字符（如百分号、点、冒号、反斜杠等）必须用反斜杠转义（详见提示章节）。

`^X`：当显示"Waiting for data"消息时（例如在 `F` 命令期间），按 `^X` 会停止 `less` 等待并返回提示。这可能使 `less` 认为文件在当前位置结束，因此可能需要使用 `R` 或 `F` 命令来查看更多数据。`--intr` 选项可用于指定使用不同字符代替 `^X`。此命令仅在支持 [poll(2)](https://github.com/FreeBSD-Ask/freebsd-man-sc/blob/main/man2/poll.2.md) 函数的系统上有效。在不支持 [poll(2)](https://github.com/FreeBSD-Ask/freebsd-man-sc/blob/main/man2/poll.2.md) 的系统上，可改用中断字符（通常是 `^C`）。

## 选项

命令行选项描述如下。大多数选项可以在 `less` 运行时通过 `-` 命令更改。

某些选项可以以两种形式之一给出：破折号后跟单个字母，或两个破折号后跟长选项名。长选项名可以缩写，只要缩写无歧义。例如，`--mouse` 可以缩写为 `--mou`，但不能缩写为 `--mo`，因为 `--mouse` 和 `--modelines` 都以 `--mo` 开头。某些长选项名是大写的，如 `--QUIT-AT-EOF`，以区别于 `--quit-at-eof`。此类选项名只需首字母大写；名称的其余部分可以是任意大小写。例如，`--Quit-at-eof` 等价于 `--QUIT-AT-EOF`。

选项也取自环境变量 `LESS`。例如，为避免每次调用 `less` 时都输入 `less -options ...`，你可以告诉 `csh`：

```sh
setenv LESS "-options"
```

或者如果你使用 `sh`：

```sh
LESS="-options"; export LESS
```

在 MS-DOS 和 Windows 上，你不需要引号，但应注意选项字符串中的百分号不被解释为环境变量扩展。

环境变量在命令行之前解析，因此命令行选项覆盖 `LESS` 环境变量。如果某个选项出现在 `LESS` 变量中，可以在命令行上通过以 `"-+"` 开头来将其重置为默认值。

某些选项如 `-k` 或 `-D` 要求选项字母后跟一个字符串。该选项的字符串在找到美元符号（$）时结束。例如，你可以这样设置两个 `-D` 选项：

```sh
LESS="Dnwb$Dsbw"
```

如果 `--use-backslash` 选项在选项中较早出现，则可以在选项字符串中通过在美元符号或反斜杠前加反斜杠来包含它们的字面值。如果 `--use-backslash` 选项未生效，则反斜杠不被特殊处理，无法在选项字符串中包含美元符号。

`-?` 或 `--help`：显示 `less` 接受的命令摘要（与 `h` 命令相同）。（取决于你的 shell 如何解释问号，可能需要引用问号，即 `"-e?"`。）

`-a` 或 `--search-skip-screen`：默认情况下，向前搜索从显示屏幕的顶部开始，向后搜索从显示屏幕的底部开始（`n` 或 `N` 命令调用的重复搜索除外，它们分别从"目标"行之后或之前开始；参见 `-j` 选项了解目标行的更多信息）。`-a` 选项使向前搜索改为从屏幕底部开始，向后搜索从屏幕顶部开始，从而跳过屏幕上显示的所有行。

`-A` 或 `--SEARCH-SKIP-SCREEN`：使所有向前搜索（不仅仅是非重复搜索）从目标行之后开始，所有向后搜索从目标行之前开始。因此，向前搜索将跳过显示屏幕的一部分（从第一行到并包括目标行）。类似地，向后搜索将跳过从最后一行到并包括目标行的显示屏幕。这是 less 441 之前版本的默认行为。

`-bn` 或 `--buffers=n`：指定 `less` 为每个文件使用的缓冲区空间量，以千字节（1024 字节）为单位。默认情况下，每个文件使用 64 KB 缓冲区空间（除非文件是管道；参见 `-B` 选项）。`-b` 选项指定每个文件应使用 n 千字节缓冲区空间。如果 n 为 -1，缓冲区空间无限制；即整个文件可以读入内存。

`-B` 或 `--auto-buffers`：默认情况下，从管道读取数据时，会根据需要自动分配缓冲区。如果从管道读取大量数据，可能导致分配大量内存。`-B` 选项禁用管道的自动缓冲区分配，因此管道仅使用 64 KB（或 `-b` 选项指定的空间量）。警告：使用 `-B` 可能导致显示错误，因为管道数据中只有最近查看的部分保留在内存中；任何较早的数据都会丢失。丢失的字符显示为问号。

`-c` 或 `--clear-screen`：使全屏重绘从顶行向下绘制。默认情况下，全屏重绘通过从屏幕底部滚动来完成。

`-C` 或 `--CLEAR-SCREEN`：与 `-c` 相同，用于与旧版 `less` 兼容。

`-d` 或 `--dumb`：`-d` 选项抑制终端为哑终端时通常显示的错误消息；即缺少某些重要功能，如清除屏幕或向后滚动的能力。`-d` 选项不会以其他方式更改 `less` 在哑终端上的行为。

`-Dxcolor` 或 `--color=xcolor`：更改显示文本不同部分的颜色。x 是单个字符，用于选择要设置颜色的文本类型：

* `*`：二进制字符。
* `C`：控制字符。
* `E`：错误和信息消息。
* `H`：通过 `--header` 选项设置的标题行和列。
* `M`：状态列中的标记字母。
* `N`：通过 `-N` 选项启用的行号。
* `P`：提示。
* `r`：rscroll 字符。
* `S`：搜索结果。
* `W`：通过 `-w` 选项启用的高亮。
* `1-5`：搜索结果中匹配第一到第五个带括号子模式的文本。子模式着色仅在 `less` 使用 `posix`、`pcre` 或 `pcre2` 正则表达式库之一构建时有效。
* `d`：粗体文本。
* `k`：闪烁文本。
* `s`：醒目文本。
* `u`：下划线文本。

大写字母和数字仅在启用了 `--use-color` 选项时使用。当文本颜色同时由大写字母和小写字母指定时，大写字母优先。例如，错误消息通常显示为醒目文本。因此，如果 `s` 和 `E` 都被指定了颜色，`E` 颜色适用于错误消息，`s` 颜色适用于其他醒目文本。小写字母指的是通过退格符覆盖形成的粗体和下划线文本（参见 `-U` 选项）以及非内容文本（如行号和提示），但不包括使用 `-R` 选项的 ANSI 转义序列格式化的文本（但在 Windows 和 MS-DOS 上的不同行为见下文说明）。

小写字母后可以跟 `+`，表示应同时使用常规格式更改和指定颜色。例如，`-Dug` 将下划线文本显示为绿色而不加下划线；绿色取代了通常的下划线格式。但 `-Du+g` 将下划线文本同时显示为绿色和下划线格式。

color 是 4 位颜色字符串或 8 位颜色字符串：

4 位颜色字符串是一到两个字符，其中第一个字符指定前景色，第二个指定背景色，如下：

* `b`：蓝色
* `c`：青色
* `g`：绿色
* `k`：黑色
* `m`：洋红色
* `r`：红色
* `w`：白色
* `y`：黄色

对应的大写字母表示更亮的颜色。例如，`-DNGk` 将行号显示为黑底亮绿色文本，`-DEbR` 将错误消息显示为亮红底蓝色文本。如果任一字符为 `-` 或省略，对应颜色设置为正常文本的颜色。

8 位颜色字符串是以点分隔的一到两个十进制整数，其中第一个整数指定前景色，第二个指定背景色。每个整数是 0 到 255（含）之间的值，选择一个 "CSI 38;5" 颜色值（参见 <https://en.wikipedia.org/wiki/ANSI_escape_code#SGR>）。如果任一整数为 `-` 或省略，对应颜色设置为正常文本的颜色。

4 位或 8 位颜色字符串后可以跟以下一个或多个字符来设置除颜色外的文本属性：

* `s` 或 `~`：醒目（反显）
* `u` 或 `_`：下划线
* `d` 或 `*`：粗体
* `l` 或 `&`：闪烁

在 MS-DOS 和 Windows 上，`--color` 选项在以下方面与上述描述的行为不同：

* 颜色字符串末尾的粗体（`d` 和 `*`）和闪烁（`l` 和 `&`）文本属性不受支持。
* 小写颜色选择字母指的是通过 `-R` 的 ANSI 转义序列格式化的文本，以及覆盖式和非内容文本（但参见 `-Da`）。
* 由于历史原因，当小写颜色选择字母后跟数值颜色值时，该数字不被解释为上述 "CSI 38;5" 颜色值，而是被解释为 4 位 CHAR\_INFO.Attributes 值，介于 0 到 15（含）之间（参见 <https://learn.microsoft.com/en-us/windows/console/char-info-str>）。
* 为避免混淆，建议在 MS-DOS/Windows 上小写颜色选择器后使用等效字母而非数字。
* Windows 10 之前的系统不支持大写颜色选择字母后的数值颜色值（"CSI 38;5" 颜色）。
* 只有一组有限的 ANSI 转义序列可以在内容中设置颜色。4 位颜色序列有效，但 "CSI 38;5" 颜色序列无效。
* `-Da` 选项使 `--color` 的行为更接近非 MS-DOS/Windows 系统上的行为，方法是（1）使小写颜色选择字母不影响 ANSI 转义序列格式化的文本，（2）允许内容中的 "CSI 38;5" 颜色序列通过将其传递给终端来工作（仅在 Windows 10 及更高版本上；在更早的 Windows 系统上，无论 `-Da` 设置如何，此类序列都无效）。

`-e` 或 `--quit-at-eof`：使 `less` 在第二次到达文件末尾时自动退出。默认情况下，退出 `less` 的唯一方式是通过 `q` 命令。

`-E` 或 `--QUIT-AT-EOF`：使 `less` 在第一次到达文件末尾时自动退出。

`-f` 或 `--force`：强制打开非普通文件。（非普通文件是目录或设备特殊文件。）同时抑制打开二进制文件时的警告消息。默认情况下，`less` 将拒绝打开非普通文件。注意，某些操作系统不允许读取目录，即使设置了 `-f`。

`-F` 或 `--quit-if-one-screen`：如果整个文件可以在第一屏显示，则使 `less` 自动退出。另参见下文 `LESS_SHELL_LINES` 环境变量的描述。

`-g` 或 `--hilite-search`：通常，`less` 会高亮所有匹配最后搜索命令的字符串。`-g` 选项更改此行为，仅高亮上次搜索命令找到的特定字符串。这可以使 `less` 的运行速度比默认情况下更快。

`-G` 或 `--HILITE-SEARCH`：`-G` 选项抑制搜索命令找到的字符串的所有高亮。

`-hn` 或 `--max-back-scroll=n`：指定向后滚动的最大行数。如果需要向后滚动超过 n 行，则改为向前方向重绘屏幕。（如果终端没有向后滚动的能力，则隐含 `-h0`。）

`-i` 或 `--ignore-case`：使搜索忽略大小写；即大写和小写视为相同。如果搜索模式中出现任何大写字母，则忽略此选项；换言之，如果模式包含大写字母，则该搜索不忽略大小写。

`-I` 或 `--IGNORE-CASE`：与 `-i` 类似，但即使模式包含大写字母，搜索也忽略大小写。

`-jn` 或 `--jump-target=n`：指定屏幕上"目标"行要定位的行。目标行是由搜索模式、跳转到行号、跳转到文件百分比或跳转到标签的命令指定的行。屏幕行可以用数字指定：屏幕顶行为 1，下一行为 2，依此类推。数字可以为负以指定相对于屏幕底部的行：屏幕底行为 -1，倒数第二行为 -2，依此类推。或者，屏幕行可以指定为屏幕高度的分数，以小数点开头：.5 在屏幕中间，.3 在第一行下方十分之三处，依此类推。如果行被指定为分数，则在终端窗口调整大小时重新计算实际行号。如果使用了 `--header` 选项且 `-j` 指定的目标行会被标题遮挡，目标行将移到标题之后的第一行。

如果使用任何形式的 `-j` 选项，重复的向前搜索（用 `n` 或 `N` 调用）从目标行之后的行开始，重复的向后搜索从目标行开始，除非被 `-a` 或 `-A` 更改。例如，如果使用 `"-j4"`，目标行是屏幕上的第四行，因此向前搜索从屏幕第五行开始。但是，非重复搜索（用 `/` 或 `?` 调用）始终分别从屏幕的第一行或最后一行开始。

`-J` 或 `--status-column`：在屏幕左边缘显示状态列。状态列中显示的字符可能是以下之一：

* `>`：该行被 `-S` 选项截断，且屏幕右边缘之外被截断的文本包含当前搜索的匹配项。
* `<`：该行被水平移动，且屏幕左侧之外被移动的文本包含当前搜索的匹配项。
* `=`：该行既被截断又被移动，屏幕两侧之外都有匹配项。
* `*`：匹配项在行的可见部分中，但右侧或左侧没有匹配项。
* `a-z`、`A-Z`：该行已通过 `m` 或 `M` 命令用相应字母标记。
* `#`：该行已通过在 `--mouse` 选项生效时用鼠标左键单击来标记。

`-kfilename` 或 `--lesskey-file=filename`：使 `less` 打开并将指定文件解释为 [lesskey(1)](https://github.com/FreeBSD-Ask/freebsd-man-sc/blob/main/man1/lesskey.1.md) 二进制文件。可以指定多个 `-k` 选项。如果设置了 `LESSKEY` 或 `LESSKEY_SYSTEM` 环境变量，或者在标准位置找到了 lesskey 文件（参见键绑定），它也被用作 `lesskey` 文件。注意下文 `--lesskey-content` 下的警告。

`--lesskey-src=filename`：使 `less` 打开并将指定文件解释为 [lesskey(1)](https://github.com/FreeBSD-Ask/freebsd-man-sc/blob/main/man1/lesskey.1.md) 源文件。如果设置了 `LESSKEYIN` 或 `LESSKEYIN_SYSTEM` 环境变量，或者在标准位置找到了 lesskey 源文件（参见键绑定），它也被用作 lesskey 源文件。在 582 版本之前，需要运行 `lesskey` 程序将 lesskey *源*文件转换为 lesskey *二进制*文件供 `less` 使用。较新版本的 `less` 直接读取 lesskey 源文件，如果源文件存在则忽略二进制文件。注意下文 `--lesskey-content` 下的警告。

`--lesskey-content=text`：使 `less` 将指定文本解释为 [lesskey(1)](https://github.com/FreeBSD-Ask/freebsd-man-sc/blob/main/man1/lesskey.1.md) 源文件的内容。在文本中，`lesskey` 行可以用通常的换行符或分号分隔。字面分号可以用反斜杠后跟分号表示。

警告：某些环境变量如 `LESS`、`LESSSECURE`、`LESSCHARSET` 等在启动早期使用，不能在命令行选项指定的文件中设置（`--lesskey`、`--lesskey-src` 或 `--lesskey-content`）。使用 `lesskey` 文件设置环境变量时，使用默认 lesskey 文件或使用 `LESSKEYIN` 或 `LESSKEY_CONTENT` 环境变量指定文件更安全，而不是使用命令行选项。

`-K` 或 `--quit-on-intr`：使 `less` 在输入中断字符（通常是 `^C`）时立即退出（状态为 2）。通常，中断字符使 `less` 停止当前操作并返回命令提示。

`-L` 或 `--no-lessopen`：忽略 `LESSOPEN` 环境变量（参见下文输入预处理器章节）。此选项可以在 `less` 内部设置，但仅适用于随后打开的文件，不适用于当前打开的文件。

`-m` 或 `--long-prompt`：使 `less` 详细提示（如 [more(1)](https://github.com/FreeBSD-Ask/freebsd-man-sc/blob/main/man1/more.1.md)），显示文件中的百分比。默认情况下，`less` 用冒号提示。

`-M` 或 `--LONG-PROMPT`：使 `less` 的提示比 [more(1)](https://github.com/FreeBSD-Ask/freebsd-man-sc/blob/main/man1/more.1.md) 更详细。

`-n` 或 `--line-numbers`：抑制行号。默认（使用行号）可能在某些情况下使 `less` 运行更慢，特别是对于非常大的输入文件。使用行号意味着：行号将显示在详细提示和 `=` 命令中，`v` 命令会将当前行号传递给编辑器（另参见下文提示中关于 `LESSEDIT` 的讨论）。

`-N` 或 `--LINE-NUMBERS`：使每行开头显示行号。

`-ofilename` 或 `--log-file=filename`：使 `less` 在查看时将输入复制到指定文件。这仅在输入文件是管道而非普通文件时适用。如果文件已存在，`less` 在覆盖前会要求确认。

`-Ofilename` 或 `--LOG-FILE=filename`：`-O` 选项类似 `-o`，但它会不经确认直接覆盖现有文件。

如果未指定日志文件，`-o` 和 `-O` 选项可以在 `less` 内部使用来指定日志文件。不带文件名时，它们仅报告日志文件名。`s` 命令等同于在 `less` 内部指定 `-o`。

`-ppattern` 或 `--pattern=pattern`：命令行上的 `-p` 选项等同于指定 `+/pattern`；即它告诉 `less` 从文件中模式第一次出现的位置开始。

`-Pprompt` 或 `--prompt=prompt`：提供了一种按自己喜好定制三种提示样式的方法。此选项通常放在 `LESS` 环境变量中，而不是每次 `less` 命令都输入。此类选项必须是 `LESS` 变量中的最后一个选项，或以美元符号终止。

* `-Ps` 后跟字符串更改默认（短）提示为该字符串。
* `-Pm` 更改中等（`-m`）提示。
* `-PM` 更改长（`-M`）提示。
* `-Ph` 更改帮助屏幕的提示。
* `-P=` 更改 `=` 命令打印的消息。
* `-Pw` 更改等待数据时（在 `F` 命令中）打印的消息。

所有提示字符串由一系列字母和特殊转义序列组成。更多详细信息请参见提示章节。

`-q` 或 `--quiet` 或 `--silent`：适度的"安静"操作：如果尝试滚动超过文件末尾或文件开头之前，终端不响铃。如果终端有"可视响铃"，则改用之。在某些其他错误时仍会响铃，如输入无效字符。默认在所有这些情况下都响铃。

`-Q` 或 `--QUIET` 或 `--SILENT`：完全"安静"操作：终端从不响铃。如果终端有"可视响铃"，在所有本应响铃的情况下都使用它。

`-r` 或 `--raw-control-chars`：使"原始"控制字符显示。默认使用脱字符表示法显示控制字符；例如，control-A（八进制 001）显示为 `^A`（有一些例外，如 `-U` 选项所述）。警告：使用 `-r` 选项时，`less` 无法跟踪屏幕的实际外观（因为这取决于屏幕对每种控制字符的响应方式）。因此，可能导致各种显示问题，如长行在错误位置被分割。

使用 `-r` 选项是危险的，不推荐使用。`-r` 选项可以在命令行上或通过 `-` 命令设置，但为避免无意使用，不能在 `LESS` 环境变量中设置。如果 `-r` 出现在 `LESS` 环境变量中，它被视为 `-R`。

`-R` 或 `--RAW-CONTROL-CHARS`：与 `-r` 类似，但只有有限的转义序列集以"原始"形式输出。与 `-r` 不同，屏幕外观可以正确保持。以原始形式输出的序列有：

1. ANSI SGR（"颜色"）序列
2. OSC 8 超链接
3. 其他 OSC 序列，如果 OSC 类型号列在 `LESSANSIOSCALLOW` 环境变量中
4. 以非标准引导字符（即非 `]` 的字符）开头的 OSC 序列，如果该字符列在 `LESSANSIOSCCHARS` 环境变量中且后跟星号

ANSI 颜色转义序列是以下形式的序列：

```
ESC [ ... m
```

其中 `...` 是零个或多个颜色规范字符。颜色转义序列仅在颜色在一行内更改时支持，不跨行。换言之，每行开头假定为正常（非彩色），无论前一行中有任何转义序列。

你可以通过将环境变量 `LESSANSIENDCHARS` 设置为可以结束颜色转义序列的字符列表，使 `less` 认为除 `m` 之外的字符也可以结束 ANSI 颜色转义序列。你还可以通过将环境变量 `LESSANSIMIDCHARS` 设置为可以出现在 `ESC` 和 `m` 之间的字符列表，使 `less` 认为标准字符之外的其他字符可以出现在它们之间。

OSC 序列是以下形式：

```
ESC ] N ; ... ^G
```

其中 OSC 类型号 N 是十进制整数。终止序列可以是 BEL 字符（`^G`）如上，或两字符序列 `ESC \`。

`-s` 或 `--squeeze-blank-lines`：使连续的空行压缩为单个空行。这在查看 [nroff(1)](https://github.com/FreeBSD-Ask/freebsd-man-sc/blob/main/man1/nroff.1.md) 输出时很有用。

`-S` 或 `--chop-long-lines`：使长于屏幕宽度的行被截断而非折行。即，长行中不适合屏幕宽度的部分在你按 `RIGHT-ARROW` 之前不显示。默认是折行；即，在下一行显示剩余部分。另参见 `--wordwrap` 选项。`--header` 选项激活时，`-S` 选项被忽略，长于屏幕宽度的行被截断。

`-ttag` 或 `--tag=tag`：`-t` 选项后跟一个标签，将编辑包含该标签的文件。为此，标签信息必须可用；例如，当前目录中可能有一个名为 `tags` 的文件，之前由 [ctags(1)](https://github.com/FreeBSD-Ask/freebsd-man-sc/blob/main/man1/ctags.1.md) 或等效命令构建。如果设置了环境变量 `LESSGLOBALTAGS`，它被视为与 [global(1)](https://github.com/FreeBSD-Ask/freebsd-man-sc/blob/main/man1/global.1.md) 兼容的命令名，并执行该命令来查找标签（参见 <http://www.gnu.org/software/global/global.html>）。`-t` 选项也可以在 `less` 内部指定（使用 `-` 命令）作为检查新文件的方式。命令 `:t` 等同于在 `less` 内部指定 `-t`。

`-Ttagsfile` 或 `--tag-file=tagsfile`：指定要使用的标签文件而非 `tags`。

`-u` 或 `--underline-special`：使退格符和回车符被视为可打印字符；即，它们在输入中出现时被发送到终端。

`-U` 或 `--UNDERLINE-SPECIAL`：使退格符、制表符、回车符和"格式化字符"（由 Unicode 定义）被视为控制字符；即，它们按 `-r` 选项指定的方式处理。

默认情况下，如果未给出 `-u` 或 `-U`，相邻下划线字符的退格符被特殊处理：下划线文本使用终端的硬件下划线功能显示。此外，两个相同字符之间的退格符被特殊处理：覆盖文本使用终端的硬件粗体功能打印。其他退格符与前一个字符一起删除。紧跟换行符的回车符被删除。其他回车符按 `-r` 选项指定的方式处理。Unicode 格式化字符，如字节顺序标记，被发送到终端。如果 `-u` 和 `-U` 都未生效，可以搜索覆盖或下划线文本。

另参见 `--proc-backspace`、`--proc-tab` 和 `--proc-return` 选项。

`-V` 或 `--version`：显示 `less` 的版本号。

`-w` 或 `--hilite-unread`：临时高亮向前移动整页后第一个"新"行。第一个"新"行是之前在屏幕底部行之后的行。还会高亮 `g` 或 `p` 命令后的目标行。高亮在下一个导致移动的命令时移除。如果 `--status-line` 选项生效，整行（屏幕宽度）被高亮。否则，仅高亮行中的文本，除非 `-J` 选项生效，在这种情况下仅高亮状态列。

`-W` 或 `--HILITE-UNREAD`：与 `-w` 类似，但临时高亮任何大于一行的向前移动命令后的第一个新行。

`-xn,...` 或 `--tabs=n,...`：设置制表位。如果仅指定一个 n，制表位设在 n 的倍数处。如果指定多个以逗号分隔的值，制表位设在这些位置，然后以最后两个的相同间距继续。例如，`-x9,17` 将在位置 9、17、25、33 等处设置制表位。n 的默认值为 8。

`-X` 或 `--no-init`：禁用向终端发送 termcap 初始化和去初始化字符串。如果初始化或去初始化做了不必要的事情（如清除屏幕），这有时是可取的。注意，某些终端需要初始化字符串才能正常工作，因此使用 `-X` 时它们可能无法完全正常工作。

`-yn` 或 `--max-forw-scroll=n`：指定向前滚动的最大行数。如果需要向前滚动超过 n 行，则改为重绘屏幕。如果需要，可以使用 `-c` 或 `-C` 选项从屏幕顶部重绘。默认情况下，任何向前移动都导致滚动。

`-zn` 或 `--window=n` 或 `-n`：将默认滚动窗口大小更改为 n 行。默认为一屏。`z` 和 `w` 命令也可用于更改窗口大小。为与某些版本的 [more(1)](https://github.com/FreeBSD-Ask/freebsd-man-sc/blob/main/man1/more.1.md) 兼容，`z` 可以省略。如果数字 n 为负，表示比当前屏幕大小少 n 行。例如，如果屏幕为 24 行，`-z-4` 将滚动窗口设置为 20 行。如果屏幕随后调整为 40 行，滚动窗口自动更改为 36 行。

`-"cc` 或 `--quotes=cc`：更改文件名引用字符。如果你试图命名同时包含空格和引号字符的文件，这可能很有必要。后跟单个字符时，将引号字符更改为该字符。包含空格的文件名应该用该字符而非双引号包围。后跟两个字符时，将开引号更改为第一个字符，闭引号更改为第二个字符。包含空格的文件名应该以开引号字符开头，以闭引号字符结尾。注意，即使引号字符更改后，此选项仍为 `-"`（破折号后跟双引号）。

`-~` 或 `--tilde`：通常，文件末尾之后的行显示为单个波浪号（`~`）。此选项使文件末尾之后的行显示为空行。

`-#` 或 `--shift`：指定 `RIGHTARROW` 和 `LEFTARROW` 命令中水平滚动的默认位置数。如果指定的数字为零，则将默认位置数设置为屏幕宽度的一半。或者，数字可以指定为屏幕宽度的分数，以小数点开头：.5 是屏幕宽度的一半，.3 是屏幕宽度的十分之三，依此类推。如果数字指定为分数，则在终端窗口调整大小时重新计算实际滚动位置数。

`--autosave=actions`：通常，历史文件仅在 `less` 退出时保存。此选项指定将导致历史文件保存的其他操作。每个操作由 actions 字符串中的单个字符定义：

* `m`：在 `--save-marks` 生效时设置或清除标记。
* `/`：搜索。
* `!`：运行 shell 命令。
* `*`：任何操作；等同于 `m/!`。

可以设置为 `-` 以指定默认值，即仅退出 `less` 才会导致历史文件保存。注意，取决于你的 shell，如果在命令行上指定此选项，`!` 和 `*` 字符可能需要转义或引用。

`--cmd=commands`：指定字符串被视为 `less` 的初始命令。这类似于指定 `"+commands"`，区别在于 `--cmd` 指定的命令在 `less` 因使用 `-E` 或 `-F` 选项而立即退出时不执行，而 `+` 选项指定的命令即使 `less` 立即退出也会执行。

`--exit-follow-on-close`：在管道上使用 `F` 命令时，当管道的输入端关闭时，`less` 将自动停止等待更多数据。

`--file-size`：如果指定了 `--file-size`，`less` 将在打开文件后立即确定文件大小。然后 `=` 命令将显示文件中的行数。通常不这样做，因为如果输入文件不可寻位（如管道）且很大，可能会很慢。

`--follow-name`：通常，如果在执行 `F` 命令时输入文件被重命名，`less` 将继续显示原始文件的内容，尽管其名称已更改。如果指定了 `--follow-name`，在 `F` 命令期间，`less` 将定期尝试按名称重新打开文件。如果重新打开成功且文件是与原始文件不同的文件（意味着已创建一个与原始（现已重命名）文件同名的新文件），`less` 将显示该新文件的内容。

`--form-feed`：在文件中向前或向后滚动时，如果到达以换页字符（`^L`）开头的行，则停止。这在查看在页面之间使用换页符的文件时很有用。

`--header=L,C,N`：设置屏幕上显示的标题行数和列数。标题行数设置为 L。如果 L 为 0，禁用标题行。如果 L 为空或缺失，标题行数不变。标题列数设置为 C。如果 C 为 0，禁用标题列。如果 C 为空或缺失，标题列数不变。第一个标题行设置为文件中的行号 N。如果 N 为空或缺失，则取屏幕第一行当前显示的行号（如果 `--header` 命令是从 `less` 内部发出的），或 1（如果 `--header` 选项在命令行上给出）。特殊形式 `--header=-` 禁用标题行和标题列，等同于 `--header=0,0`。

当 L 非零时，屏幕顶部的前 L 行被替换为从第 N 行开始的文件的 L 行，无论正在查看文件的哪一部分。显示标题行时，标题行之前的任何文件内容都无法查看。当 C 非零时，每行开头显示的前 C 个字符被替换为该行的前 C 个字符，即使行的其余部分水平滚动。

`--header` 选项激活时，长于屏幕宽度的行被截断，`-S` 选项被忽略。

`--incsearch`：后续搜索命令将是"增量"的；即，`less` 会在输入模式的每个字符时前进到包含搜索模式的下一行。

`--intr=c`：使用字符 c 而非 `^X` 来在显示"Waiting for data"消息时中断读取。c 必须是 ASCII 字符；即值在 1 到 127（含）之间的字符。脱字符后跟单个字符可用于指定控制字符。

`--line-num-width=n`：将 `-N` 选项生效时行号字段的最小宽度设置为 n 个字符。默认为 7。

`--match-shift=n`：当 `-S` 生效时，如果搜索匹配项因被移动到当前可见屏幕的左侧或右侧而不可见，文本将水平移动以确保搜索匹配项可见。此选项选择移动后搜索匹配项第一个字符将放置的列。换言之，搜索匹配项左侧将有 n 个可见字符。

或者，数字可以指定为屏幕宽度的分数，以小数点开头：.5 是屏幕宽度的一半，.3 是屏幕宽度的十分之三，依此类推。如果数字指定为分数，则在终端窗口调整大小时重新计算实际滚动位置数。

`--modelines=n`：在显示文件之前，`less` 将读取前 n 行以尝试查找与 vim 兼容的 modeline。如果 n 为零，`less` 不尝试查找 modeline。通过使用 modeline，文件本身可以指定查看它时应使用的制表位。

modeline 在行中的任何位置包含一个程序名（`vi`、`vim`、`ex` 或 `less`），后跟一个冒号，可能后跟单词 `set`，最后后跟零个或多个选项设置。如果使用单词 `set`，选项设置以空格分隔，并在第一个冒号处结束。如果未使用单词 `set`，选项设置可以以空格或冒号分隔。如果程序名为 `less` 则需要单词 `set`，但如果使用其他三个名称之一则是可选的。如果任何选项设置的形式为 `tabstop=n` 或 `ts=n`，则自动设置制表位，如同给出了 `--tabs=n`。有关可接受的 n 值，请参见 `--tabs` 描述。

`--mouse`：启用鼠标输入：向下滚动鼠标滚轮在文件中向前移动，向上滚动鼠标滚轮在文件中向后移动，左键单击将 `#` 标记设置到鼠标单击的行，右键单击（或任何其他按钮）返回到 `#` 标记位置。按住左键拖动也在文件中移动。如果左键单击时鼠标光标位于 OSC 8 超链接上，该超链接被选中，如同通过 `^O^N` 命令。如果左键单击时鼠标光标位于已选中的 OSC 8 超链接上，该超链接被打开，如同通过 `^O^O` 命令。滚动滚轮时的行数可以通过 `--wheel-lines` 选项设置。鼠标输入仅在支持 X11 鼠标报告的终端和 Windows 上有效。

`--MOUSE`：与 `--mouse` 类似，但鼠标滚轮移动的滚动方向相反。

`--no-edit-warn`：在使用 `v` 命令处理通过 `LESSOPEN` 预处理器打开的文件时，不打印警告消息（参见下文输入预处理器章节）。

`--no-keypad`：禁用向终端发送键盘初始化和去初始化字符串。如果键盘字符串使数字键盘以不理想的方式运行，这有时很有用。

`--no-histdups`：此选项更改行为，使得如果输入了搜索字符串或文件名，且相同的字符串已在历史列表中，则在添加新字符串之前从历史列表中删除现有副本。因此，给定字符串在历史列表中只出现一次。通常，字符串可能多次出现。

`--no-number-headers`：标题行（通过 `--header` 选项定义）不分配行号。行号 1 分配给任何标题行之后的第一行。

`--no-paste`：如果终端支持 `xterm` 兼容的"括号粘贴"，粘贴到 `less` 中的任何文本都将被忽略，但一行文本可以粘贴到屏幕底部的命令行中（搜索字符串、文件名等）。即，粘贴到命令行中的第一个换行符文本及其后的任何文本都被忽略。

`--no-search-header-lines`：搜索不包括标题行，但仍包括标题列。

`--no-search-header-columns`：搜索不包括标题列，但仍包括标题行。

`--no-search-headers`：搜索不包括标题行或标题列。

`--no-vbell`：禁用终端的可视响铃。

`--proc-backspace`：如果设置，退格符的处理如同未设置 `-u` 和 `-U` 选项。即，相邻下划线符的退格使文本以下划线模式显示，相同字符之间的退格使文本以粗体模式显示。此选项覆盖 `-u` 和 `-U` 选项，使退格符的显示可以与制表符和回车符分开控制。如果未设置，退格符显示由 `-u` 和 `-U` 选项控制。

`--PROC-BACKSPACE`：如果设置，退格符的处理如同设置了 `-U` 选项；即退格符被视为控制字符。

`--proc-return`：如果设置，回车符的处理如同未设置 `-u` 和 `-U` 选项。即，紧接换行符之前的回车符被删除。此选项覆盖 `-u` 和 `-U` 选项，使回车符的显示可以与退格符和制表符的显示分开控制。如果未设置，回车符显示由 `-u` 和 `-U` 选项控制。

`--PROC-RETURN`：如果设置，回车符的处理如同设置了 `-U` 选项；即回车符被视为控制字符。

`--proc-tab`：如果设置，制表符的处理如同未设置 `-U` 选项。即，制表符扩展为空格。此选项覆盖 `-U` 选项，使制表符的显示可以与退格符和回车符的显示分开控制。如果未设置，制表符显示由 `-U` 选项控制。

`--PROC-TAB`：如果设置，制表符的处理如同设置了 `-U` 选项；即制表符被视为控制字符。

`--redraw-on-quit`：退出时，在发送终端去初始化字符串后，重绘整个最后屏幕。在终端去初始化字符串导致终端从备用屏幕切换的终端上，这使当前文件的最后屏幕在 `less` 退出后仍然可见。

`--rscroll=c`：此选项更改用于标记截断行的字符。它可以以类似 `LESSBINFMT` 的两字符属性指示符开头。如果没有属性指示符，则使用醒目。如果设置为 `-`，截断行不被标记。

`--save-marks`：在历史文件中保存标记，使标记在不同 `less` 调用之间保留。

`--search-options=...`：设置默认搜索修饰符。值是一个或多个字符 `E`、`F`、`K`、`N`、`R` 或 `W` 的字符串。设置其中任何一个的效果等同于在每个搜索模式开头输入该控制字符。例如，设置 `--search-options=W` 等同于在每个模式开头输入 `^W`。值还可以包含 1 到 5 之间的数字，效果等同于在每个搜索模式开头输入 `^S` 后跟该数字。值 `-` 禁用所有默认搜索修饰符。

`--show-preproc-errors`：如果 `LESSOPEN` 预处理器产生数据后以非零退出码退出，`less` 将显示警告。

`--status-col-width=n`：设置 `-J` 选项生效时状态列的宽度。默认为 2 个字符。

`--status-line`：如果行被标记，整行（而非仅状态列）被高亮。由于 `-w` 选项高亮的行也将整行高亮。如果设置了 `--use-color`，行被着色而非高亮。

`--use-backslash`：此选项更改后续选项的解释。在 `--use-backslash` 选项之后，选项字符串中的任何反斜杠都被移除，后面的字符按字面意义处理。这允许在选项字符串中包含美元符号。

`--use-color`：在各处启用彩色文本。`-D` 选项可用于更改颜色。彩色文本仅在终端支持 ANSI 颜色转义序列时有效（参见 <https://www.ecma-international.org/publications-and-standards/standards/ecma-48>）。

`--wheel-lines=n`：设置滚动鼠标滚轮且 `--mouse` 或 `--MOUSE` 选项生效时的滚动行数。默认为 1 行。

`--wordwrap`：当 `-S` 选项未使用时，如果可能，在每个空格或制表符处折行，使单词不被分割到两行。默认是在任何字符处折行。

`--`：命令行参数 `--` 标记选项参数的结束。此后的任何参数都被解释为文件名。这在查看名称以 `-` 或 `+` 开头的文件时很有用。否则，选项参数和文件名参数可以混合；即，选项参数不需要出现在文件名参数之前，除非设置了环境变量 `POSIXLY_CORRECT`。

`+`：如果命令行选项以 `+` 开头，该选项的其余部分被视为 `less` 的初始命令。例如，`+G` 告诉 `less` 从文件末尾而非开头开始，`+/xyz` 告诉它从文件中 `xyz` 第一次出现的位置开始。作为特殊情况，`+<number>` 的作用类似 `+<number>g`；即，它从指定行号开始显示（但是，参见上文 `g` 命令下的注意事项）。如果选项以 `++` 开头，初始命令适用于每个正在查看的文件，不仅仅是第一个。前面描述的 `+` 命令也可用于设置（或更改）每个文件的初始命令。另参见 `--cmd` 选项。

## 行编辑

在屏幕底部输入命令行时（例如，`:e` 命令的文件名，或搜索命令的模式），某些键可用于操作命令行。大多数命令有 `[括号]` 中的替代形式，可在特定键盘上不存在某个键时使用。（注意，以 `ESC` 开头的形式在某些 MS-DOS 和 Windows 系统上不起作用，因为 `ESC` 是行擦除字符。）任何这些特殊键可以通过在前面加"字面"字符 `^V` 或 `^A` 来按字面输入。反斜杠本身也可以通过输入两个反斜杠来按字面输入。

`LEFTARROW` \[`ESC-h`]：将光标向左移动一个空格。

`RIGHTARROW` \[`ESC-l`]：将光标向右移动一个空格。

`^LEFTARROW` \[`ESC-b` 或 `ESC-LEFTARROW`]：（即 CONTROL 和 LEFTARROW 同时按下。）将光标向左移动一个单词。

`^RIGHTARROW` \[`ESC-w` 或 `ESC-RIGHTARROW`]：（即 CONTROL 和 RIGHTARROW 同时按下。）将光标向右移动一个单词。

`HOME` \[`ESC-0`]：将光标移到行首。

`END` \[`ESC-$`]：将光标移到行尾。

`BACKSPACE`：删除光标左侧的字符，或如果命令行为空则取消命令。

`DELETE` 或 \[`ESC-x`]：删除光标下的字符。

`^BACKSPACE` \[`ESC-BACKSPACE`]：（即 CONTROL 和 BACKSPACE 同时按下。）删除光标左侧的单词。

`^DELETE` \[`ESC-X` 或 `ESC-DELETE`]：（即 CONTROL 和 DELETE 同时按下。）删除光标下的单词。

`UPARROW` \[`ESC-k`]：检索上一个命令行。如果你先输入一些文本然后按 `UPARROW`，它将检索以该文本开头的上一个命令。

`DOWNARROW` \[`ESC-j`]：检索下一个命令行。如果你先输入一些文本然后按 `DOWNARROW`，它将检索以该文本开头的下一个命令。

`TAB`：补全光标左侧的部分文件名。如果匹配多个文件名，第一个匹配项被输入到命令行。重复按 `TAB` 将循环通过其他匹配的文件名。如果补全的文件名是目录，`/` 被附加到文件名。（在 MS-DOS 和 Windows 系统上，附加 `\`。）环境变量 `LESSSEPARATOR` 可用于指定附加到目录名的不同字符。

`BACKTAB`（SHIFT-TAB）\[`ESC-TAB`]：与 `TAB` 类似，但以相反方向循环匹配的文件名。

`^L`：补全光标左侧的部分文件名。如果匹配多个文件名，所有匹配项被输入到命令行（如果它们放得下）。

`^U`（Unix 和 OS/2）或 `ESC`（MS-DOS 和 Windows）：删除整个命令行，或如果光标在命令行开头则取消命令。如果你在 Unix 中将行删除字符更改为 `^U` 以外的字符，则使用该字符代替 `^U`。

`^G`：删除整个命令行并返回主提示。

## 键绑定

你可以通过创建 lesskey 源文件来定义自己的 `less` 命令。此文件指定一组命令键和与每个键关联的操作。你还可以更改行编辑键（参见行编辑），并设置 `less` 使用的环境变量。有关文件格式的详细信息，请参见 [lesskey(1)](https://github.com/FreeBSD-Ask/freebsd-man-sc/blob/main/man1/lesskey.1.md) 手册页。

如果设置了环境变量 `LESSKEYIN`，`less` 使用它作为 lesskey 源文件名。否则，`less` 在标准位置查找 lesskey 源文件：在 Unix 系统上，`less` 查找名为 **$XDG\_CONFIG\_HOME/lesskey** 或 **$HOME/.config/lesskey** 或 **$HOME/.lesskey** 的 lesskey 文件。在 MS-DOS 和 Windows 系统上，`less` 查找名为 **$HOME/\_lesskey** 的 lesskey 文件，如果未找到，则在 `PATH` 环境变量指定的任何目录中查找名为 `_lesskey` 的 lesskey 文件。在 OS/2 系统上，`less` 查找名为 **$HOME/lesskey.ini** 的 lesskey 文件，如果未找到，则在 `INIT` 环境变量指定的任何目录中查找名为 `lesskey.ini` 的 lesskey 文件，如果仍未找到，则在 `PATH` 环境变量指定的任何目录中查找名为 `lesskey.ini` 的 lesskey 文件。

也可以设置系统范围的 lesskey 源文件来提供键绑定。如果某个键同时在本地 lesskey 文件和系统范围文件中定义，本地文件中的键绑定优先于系统范围文件中的键绑定。如果设置了环境变量 `LESSKEYIN_SYSTEM`，`less` 使用它作为系统范围 lesskey 文件名。否则，`less` 在标准位置查找系统范围 lesskey 文件：在 Unix 系统上，系统范围 lesskey 文件是 **/usr/local/etc/syslesskey**。（但是，如果 `less` 构建时的 sysconf 目录不同于 **/usr/local/etc**，则在该目录中查找 sysless 文件。）在 MS-DOS 和 Windows 系统上，系统范围 lesskey 文件是 **C:\_syslesskey**。在 OS/2 系统上，系统范围 lesskey 文件是 **C:\syslesskey.ini**。

旧版本的 `less`（v582 之前）使用 `lesskey` 程序生成的二进制格式 lesskey 文件。不再需要使用 `lesskey` 程序。

## 输入预处理器

你可以为 `less` 定义"输入预处理器"。在 `less` 打开文件之前，它首先给输入预处理器一个机会来修改文件内容的显示方式。输入预处理器只是一个可执行程序（或 shell 脚本），它将文件内容写入另一个文件，称为替换文件。然后替换文件的内容代替原始文件的内容显示。但是，对用户来说，看起来像是打开了原始文件；即 `less` 将原始文件名显示为当前文件名。

输入预处理器接收一个命令行参数，即用户输入的原始文件名。它应该创建替换文件，完成后将替换文件名打印到其标准输出。如果输入预处理器不输出替换文件名，`less` 像正常一样使用原始文件。查看标准输入时不调用输入预处理器。要设置输入预处理器，将 `LESSOPEN` 环境变量设置为将调用你的输入预处理器的命令行。此命令行应包含一次字符串 `%s`，当调用输入预处理器命令时，它将被文件名替换。

当 `less` 关闭以这种方式打开的文件时，它将调用另一个程序，称为输入后处理器，它可以执行任何所需的清理操作（如删除 `LESSOPEN` 创建的替换文件）。此程序接收两个命令行参数，用户输入的原始文件名和替换文件名。要设置输入后处理器，将 `LESSCLOSE` 环境变量设置为将调用你的输入后处理器的命令行。它可以包含两次字符串 `%s`；第一个被替换为文件的原始名称，第二个被替换为 `LESSOPEN` 输出的替换文件名。

例如，在许多 Unix 系统上，这两个脚本允许你以压缩格式保存文件，但仍让 `less` 直接查看它们：

lessopen.sh：

```sh
#! /bin/sh
case "$1" in
*.Z)	TEMPFILE=$(mktemp)
	uncompress -c $1 >$TEMPFILE 2>/dev/null
	if [ -s $TEMPFILE ]; then
		echo $TEMPFILE
	else
		rm -f $TEMPFILE
	fi
	;;
esac
```

lessclose.sh：

```sh
#! /bin/sh
rm $2
```

要使用这些脚本，将它们放在可执行的位置，并设置 `LESSOPEN="lessopen.sh %s"` 和 `LESSCLOSE="lessclose.sh %s %s"`。可以编写更复杂的 `LESSOPEN` 和 `LESSCLOSE` 脚本来接受其他类型的压缩文件等。

还可以设置输入预处理器将文件数据直接通过管道传送给 `less`，而不是将数据放入替换文件。这避免了在开始查看之前解压整个文件的需要。以这种方式工作的输入预处理器称为输入管道。输入管道不在标准输出上写入替换文件名，而是在标准输出上写入替换文件的全部内容。如果输入管道不在标准输出上写入任何字符，则没有替换文件，`less` 像正常一样使用原始文件。要使用输入管道，将 `LESSOPEN` 环境变量中的第一个字符设为竖线（`|`），表示输入预处理器是输入管道。与非管道输入预处理器一样，命令字符串必须包含一次 `%s`，它被替换为输入文件的文件名。

例如，在许多 Unix 系统上，此脚本的作用类似于前面的示例脚本：

lesspipe.sh：

```sh
#! /bin/sh
case "$1" in
*.Z)	uncompress -c $1 2>/dev/null
	;;
*)	exit 1
	;;
esac
exit $?
```

要使用此脚本，将其放在可执行的位置，并设置 `LESSOPEN="|lesspipe.sh %s"`。

注意，预处理器不能输出空文件，因为这被解释为没有替换，使用原始文件。为避免这种情况，如果 `LESSOPEN` 以两个竖线开头，脚本输出的退出状态决定输出为空时的行为。如果输出为空且退出状态为零，空输出被视为替换文本。如果输出为空且退出状态非零，使用原始文件。为了与以前版本的 `less` 兼容，如果 `LESSOPEN` 仅以一个竖线开头，预处理器的退出状态被忽略。

使用输入管道时，可以使用 `LESSCLOSE` 后处理器，但通常不需要，因为没有替换文件需要清理。在这种情况下，传递给 `LESSCLOSE` 后处理器的替换文件名是 `-`。

为了与以前版本的 `less` 兼容，如果 `less` 正在查看标准输入，则不使用输入预处理器或管道。但是，如果 `LESSOPEN` 的第一个字符是破折号（`-`），输入预处理器用于标准输入和其他文件。在这种情况下，破折号不被视为预处理器命令的一部分。如果正在查看标准输入，输入预处理器被传递一个由单个破折号组成的文件名。类似地，如果 `LESSOPEN` 的前两个字符是竖线和破折号（`|-`）或两个竖线和破折号（`||-`），输入管道用于标准输入和其他文件。同样，在这种情况下，破折号不被视为输入管道命令的一部分。

## 国家字符集

输入文件中有五种类型的字符：

* 普通字符可以直接显示到屏幕。
* 控制字符不应直接显示，但预期会出现在普通文本文件中（如退格符和制表符）。
* 二进制字符不应直接显示，且预期不会出现在文本文件中。
* 组合字符不单独显示，而是修改前一个字符的显示。（仅在 `LESSCHARSET` 为 `utf8` 时。）
* 删除字符仅从输入中删除而不显示。（仅在 `LESSCHARSET` 为 `utf8` 时。）

"字符集"是描述每个字符属于哪个类别的说明。`LESSCHARSET` 环境变量可用于选择字符集。`LESSCHARSET` 的可能值为：

`ascii`：BS、TAB、NL 和 formfeed 是控制字符，值在 32 到 126 之间的所有字符是普通字符，所有其他字符是二进制字符。

`iso8859`：选择 ISO 8859 字符集。与 ASCII 相同，但值在 160 到 255 之间的字符被视为普通字符。

`latin1`：与 iso8859 相同。

`latin9`：与 iso8859 相同。

`dos`：选择适用于 MS-DOS 的字符集。

`ebcdic`：选择 EBCDIC 字符集。

`IBM-1047`：选择 OS/390 Unix Services 使用的 EBCDIC 字符集。这是 latin1 的 EBCDIC 对应。在环境中设置 `LESSCHARSET=IBM-1047` 或 `LC_CTYPE=en_US` 可以获得类似结果。

`koi8-r`：选择俄语字符集。

`next`：选择适用于 NeXT 计算机的字符集。

`utf-8`：选择 ISO 10646 字符集的 UTF-8 编码。UTF-8 的特殊之处在于它支持输入文件中的多字节字符。它是唯一支持多字节字符的字符集。

`windows`：选择适用于 Microsoft Windows（cp 1252）的字符集。

在极少数情况下，可能需要定制 `less` 使用 `LESSCHARSET` 可定义字符集以外的字符集。在这种情况下，可以使用 `LESSCHARDEF` 环境变量定义字符集。它应设置为字符串，其中字符串中的每个字符代表字符集中的一个字符。字符 `.` 用于普通字符，`c` 用于控制字符，`b` 用于二进制字符。十进制数可用于重复。例如，`bccc4b.` 表示字符 0 是二进制字符，1、2 和 3 是控制字符，4、5、6 和 7 是二进制字符，8 是普通字符。最后一个字符之后的所有字符被视为与最后一个相同，因此字符 9 到 255 将是普通字符。（这是一个示例，不一定代表任何实际字符集。）

下表显示了与 `LESSCHARSET` 的每个可能值等价的 `LESSCHARDEF` 值：

| 字符集      | LESSCHARDEF                                                                |
| -------- | -------------------------------------------------------------------------- |
| ascii    | 8bcccbcc18b95.b                                                            |
| dos      | 8bcccbcc12bc5b95.b.                                                        |
| ebcdic   | 5bc6bcc7bcc41b.9b7.9b5.b..8b6.10b6.b9.7b9.8b8.17b3.3b9.7b9.8b8.6b10.b.b.b. |
| IBM-1047 | 4cbcbc3b9cbccbccbb4c6bcc5b3cbbc4bc4bccbc191.b                              |
| iso8859  | 8bcccbcc18b95.33b.                                                         |
| koi8-r   | 8bcccbcc18b95.b128.                                                        |
| latin1   | 8bcccbcc18b95.33b.                                                         |
| next     | 8bcccbcc18b95.bb125.bb                                                     |

如果未设置 `LESSCHARSET` 和 `LESSCHARDEF`，但在 `LC_ALL`、`LC_CTYPE` 或 `LANG` 环境变量中找到 `UTF-8`、`UTF8`、`utf-8` 或 `utf8` 字符串之一，则默认字符集为 utf-8。

如果未找到该字符串，但你的系统支持 [setlocale(3)](https://github.com/FreeBSD-Ask/freebsd-man-sc/blob/main/man3/setlocale.3.md) 接口，`less` 将使用 setlocale 确定字符集。setlocale 通过设置 `LANG` 或 `LC_CTYPE` 环境变量来控制。

最后，如果 `setlocale` 接口也不可用，默认字符集为 utf-8。

控制和二进制字符以醒目（反显）方式显示。每个此类字符尽可能以脱字符表示法显示（例如 control-A 显示为 `^A`）。仅当反转 0100 位导致正常可打印字符时才使用脱字符表示法。否则，字符以尖括号中的十六进制数显示。此格式可以通过设置 `LESSBINFMT` 环境变量来更改。`LESSBINFMT` 可以以 `*` 和一个字符开头来选择显示属性：`*k` 为闪烁，`*d` 为粗体，`*u` 为下划线，`*s` 为醒目，`*n` 为正常。如果 `LESSBINFMT` 不以 `*` 开头，则假定为正常属性。`LESSBINFMT` 的其余部分是可以包含一个 printf 风格转义序列（`%` 后跟 x、X、o、d 等）的字符串。例如，如果 `LESSBINFMT` 为 `*u[%x]`，二进制字符以括号中的下划线十六进制显示。未指定 `LESSBINFMT` 时的默认值为 `*s<%02X>`。警告：通过 `LESSBINFMT` 展开字符的结果必须少于 31 个字符。

当字符集为 utf-8 时，`LESSUTFBINFMT` 环境变量的作用类似 `LESSBINFMT`，但它适用于已成功解码但不适合显示的 Unicode 码点（例如未分配的码点）。其默认值为 `<U+%04lX>`。注意，`LESSUTFBINFMT` 和 `LESSBINFMT` 共享显示属性设置（`*x`），因此指定一个会影响两者；`LESSUTFBINFMT` 在 `LESSBINFMT` 之后读取，因此其设置（如果有）优先。UTF-8 文件中的问题字节（截断序列的字节、完整但非最短形式序列的字节、无效字节和多余尾字节）使用 `LESSBINFMT` 单独显示，以便于诊断 UTF-8 文件的格式问题。

当字符集为 utf-8 时，在极少数情况下可能需要覆盖某些字符类型的 Unicode 定义。例如，私有使用区中的字符通常被视为二进制字符，但如果你使用在该范围内有可打印字符的自定义字体，可能需要告诉 `less` 将此类字符视为可打印字符。这可以通过将 `LESSUTFCHARDEF` 环境变量设置为以逗号分隔的*字符类型*定义列表来完成。每个字符类型定义由一个十六进制码点或一对以破折号分隔的码点组成，后跟冒号和类型字符。每个十六进制码点可以选择以 `U` 或 `U+` 开头。如果给出一对码点，则为两个值之间（含）的所有字符设置类型。如果有多个以逗号分隔的码点值，它们必须按升序排列。类型字符可以是以下之一：

* `p`：普通可打印字符。
* `w`：宽（2 空格）可打印字符。
* `b`：二进制（不可打印）字符。
* `c`：组合（零宽度）字符。
* `d`：删除字符（从输入中删除而不显示）。

例如，将 `LESSUTFCHARDEF` 设置为

```sh
E000-F8FF:p,F0000-FFFFD:p,100000-10FFFD:p
```

将使所有私有使用区字符被视为可打印字符。

默认情况下，emoji 修饰符、组件和变体选择器被删除，因为许多终端不能正确显示它们。如果你使用的终端能正确显示部分或全部这些字符，可以通过将 `LESSUTFCHARDEF` 设置为将它们视为组合字符来使它们显示。例如，这将它们全部设置为组合字符：

```sh
FE00-FE0F:c,1F3FB-1F3FF:c,1F9B0-1F9B3:c,E0100-E01EF:c
```

## 提示

`-P` 选项允许你按自己的喜好定制提示。给予 `-P` 选项的字符串替换指定的提示字符串。字符串中的某些字符被特殊解释。提示机制相当复杂以提供灵活性，但普通用户无需了解构建个性化提示字符串的细节。

百分号后跟单个字符根据后续字符进行展开。（下文对输入文件大小的引用是指预处理后的大小，如果使用了输入预处理器。）

`%bX`：替换为当前输入文件中的字节偏移量。`b` 后跟单个字符（上面显示为 X），指定要使用字节偏移量的行。如果字符为 `t`，使用显示中顶行的字节偏移量；`m` 表示使用中间行；`b` 表示使用底行；`B` 表示使用底行之后的行；`j` 表示使用 `-j` 选项指定的"目标"行。

`%B`：替换为当前输入文件的大小。

`%c`：替换为屏幕第一列中显示的文本的列号。

`%C`：替换为屏幕最后一列中显示（或将显示）的文本的列号。

`%dX`：替换为输入文件中某行的页码。要使用的行由 X 确定，与 `%b` 选项相同。

`%D`：替换为输入文件中的页数，或等价地，输入文件最后一行的页码。

`%E`：替换为编辑器名称（来自 `VISUAL` 环境变量，如果 `VISUAL` 未定义则来自 `EDITOR` 环境变量）。参见下文 `LESSEDIT` 功能的讨论。

`%f`：替换为当前输入文件的名称。

`%F`：替换为当前输入文件名的最后一个路径分量。

`%g`：替换为当前输入文件的 shell 转义名称。这在扩展字符串将用于 shell 命令时很有用，如在 `LESSEDIT` 中。

`%i`：替换为当前文件在输入文件列表中的索引。

`%lX`：替换为输入文件中某行的行号。要使用的行由 X 确定，与 `%b` 选项相同。

`%L`：替换为输入文件最后一行的行号。

`%m`：替换为输入文件的总数。

`%o`：替换为当前选中的 OSC 8 超链接的 URI，如果没有选中超链接则为问号。这由 OSC 8 处理器使用，如 `^O^O` 命令描述中所述。

`%pX`：替换为当前输入文件中的百分比，基于字节偏移量。使用的行由 X 确定，与 `%b` 选项相同。

`%PX`：替换为当前输入文件中的百分比，基于行号。使用的行由 X 确定，与 `%b` 选项相同。

`%Q`：替换为屏幕上显示的最后一列文本相对于当前显示的最长行长度的百分比（即 `%C` 除以 `%W`）。注意，使用此序列可能使显示提示比平时更慢。

`%s`：与 `%B` 相同。

`%t`：使任何尾随空格被移除。通常用于字符串末尾，但可以出现在任何位置。

`%T`：通常展开为单词"file"。但是，如果通过标签列表使用 `-t` 选项查看文件，它展开为单词"tag"。

`%W`：替换为当前显示在屏幕上的最长行的宽度。注意，使用此序列可能使显示提示比平时更慢。

`%x`：替换为列表中下一个输入文件的名称。

如果任何项目未知（例如，输入是管道时的文件大小），则打印问号。

提示字符串的格式可以根据某些条件更改。问号后跟单个字符的作用类似"IF"：根据后续字符，评估一个条件。如果条件为真，问号和条件字符之后的任何字符（直到句点）都包含在提示中。如果条件为假，则不包含这些字符。问号和句点之间出现的冒号可用于建立"ELSE"：当且仅当 IF 条件为假时，冒号和句点之间的任何字符都包含在字符串中。条件字符（跟在问号之后）可以是：

`?a`：如果到目前为止提示中已包含任何字符，则为真。

`?bX`：如果指定行的字节偏移量已知，则为真。

`?B`：如果当前输入文件的大小已知，则为真。

`?c`：如果文本被水平移动（`%c` 不为零），则为真。

`?dX`：如果指定行的页码已知，则为真。

`?e`：如果在文件末尾，则为真。

`?f`：如果有输入文件名（即输入不是管道），则为真。

`?lX`：如果指定行的行号已知，则为真。

`?L`：如果文件最后一行的行号已知，则为真。

`?m`：如果有多个输入文件，则为真。

`?n`：如果这是新输入文件中的第一个提示，则为真。

`?pX`：如果指定行的当前输入文件百分比（基于字节偏移量）已知，则为真。

`?PX`：如果指定行的当前输入文件百分比（基于行号）已知，则为真。

`?Q`：如果 `%Q` 小于 100，则为真。注意，使用此序列可能使显示提示比平时更慢。

`?s`：与 `?B` 相同。

`?x`：如果有下一个输入文件（即当前输入文件不是最后一个），则为真。

除特殊字符（问号、冒号、句点、百分号和反斜杠）以外的任何字符都成为提示的字面部分。任何特殊字符都可以通过在前面加反斜杠来字面包含在提示中。

一些示例：

```
?f%f:Standard input.
```

此提示打印文件名（如果已知）；否则打印字符串"Standard input"。

```
?f%f .?ltLine %lt:?pt%pte%:?btByte %bt:-...
```

此提示将打印文件名（如果已知）。文件名后跟行号（如果已知），否则是百分比（如果已知），否则是字节偏移量（如果已知）。否则，打印破折号。注意每个问号如何有匹配的句点，以及 `%pt` 后的 `%` 如何通过用反斜杠转义来字面包含。

```
?n?f%f\ .?m(%T %i of %m)\ ..?e(END)\ ?x-\ Next\:\ %x..%t
```

如果这是文件中的第一个提示，这会打印文件名，如果有多个输入文件，后跟"file N of N"消息。然后，如果在文件末尾，打印字符串"(END)"，后跟下一个文件的名称（如果有）。最后，截断任何尾随空格。这是默认提示。供参考，以下是其他两个提示（`-m` 和 `-M`）的默认值。为便于阅读，每个都分为两行。

```
?n?f%f\ .?m(%T\ %i\ of\ %m)\ ..?e(END)\ ?x-\ Next\:\ %x.:
	?pB%pBe%:byte\ %bB?s/%s...%t

?f%f\ .?n?m(%T\ %i\ of\ %m)\ ..?ltlines\ %lt-%lb?L/%L.\ :
	byte\ %bB?s/%s.\ .?e(END)\ ?x-\ Next\:\ %x.:?pB%pBe%..?c\ (column\ %c).%t
```

以下是 `=` 命令产生的默认消息：

```
?f%f\ .?m(%T\ %i\ of\ %m)\ .?ltlines\ %lt-%lb?L/%L.\ .
	byte\ %bB?s/%s.\ ?e(END)\ :?pB%pBe%..?c\ (column\ %c).%t
```

提示展开功能还用于另一个目的：如果定义了环境变量 `LESSEDIT`，它用作调用 `v` 命令时执行的命令。`LESSEDIT` 字符串以与提示字符串相同的方式展开。`LESSEDIT` 的默认值为：

```
	%E\ ?lm+%lm.\ %g
```

注意，这展开为编辑器名称，后跟 `+` 和行号，后跟 shell 转义的文件名。如果你的编辑器不接受 `+linenumber` 语法，或调用语法有其他差异，可以更改 `LESSEDIT` 变量来修改此默认值。

## 安全

当环境变量 `LESSSECURE` 设置为 1 时，`less` 以"安全"模式运行。在此模式下，以下功能被禁用：

* `edit`：编辑命令（`v`）
* `examine`：检查命令（`:e`）
* `glob`：文件名中的元字符如 `*`，以及文件名补全（`TAB`、`^L`）
* `history`：历史文件
* `lesskey`：使用 lesskey 文件（`-k` 和 `--lesskey-src`）
* `lessopen`：输入预处理器（`LESSOPEN` 环境变量）
* `logfile`：日志文件（`s` 和 `-o`）
* `osc8`：打开 OSC 8 链接（`^O^O`）
* `pipe`：管道命令（`|`）
* `shell`：shell 和 pshell 命令（`!` 和 `#`）
* `stop`：通过 SIGTSTP 信号停止 `less`
* `tags`：使用标签文件（`-t`）

`LESSSECURE_ALLOW` 环境变量可以设置为以逗号分隔的功能名称列表，这些功能在 `LESSSECURE` 设置时被选择性启用。每个功能名称是上述列表中每行的第一个单词。功能名称可以缩写，只要缩写无歧义。例如，如果设置了 `LESSSECURE=1` 和 `LESSSECURE_ALLOW=hist,edit`，则上述所有功能都将被禁用，历史文件和编辑命令除外。

`less` 也可以编译为永久处于"安全"模式。在这种情况下，`LESSSECURE` 和 `LESSSECURE_ALLOW` 变量被忽略。

## 与 more 的兼容性

如果环境变量 `LESS_IS_MORE` 设置为 1，或者程序通过名为 `more` 的文件链接调用且环境变量 `LESS_IS_MORE` 未设置为 0，`less` 的行为（大部分）符合 POSIX [more(1)](https://github.com/FreeBSD-Ask/freebsd-man-sc/blob/main/man1/more.1.md) 命令规范。在此模式下，`less` 在以下方面行为不同：

`-e` 选项的工作方式不同。如果未设置 `-e` 选项，`less` 的行为如同设置了 `-e` 选项。如果设置了 `-e` 选项，`less` 的行为如同设置了 `-E` 选项。

`-m` 选项的工作方式不同。如果未设置 `-m` 选项，使用中等提示，并以字符串 `--More--` 为前缀。如果设置了 `-m` 选项，使用短提示。

`-n` 选项的作用类似 `-z` 选项。此模式下 `-n` 选项的正常行为不可用。

`-p` 选项的参数被视为 `less` 命令而非搜索模式。

`LESS` 环境变量被忽略，使用 `MORE` 环境变量代替。

## 环境变量

环境变量可以像通常一样在系统环境中指定，或在 [lesskey(1)](https://github.com/FreeBSD-Ask/freebsd-man-sc/blob/main/man1/lesskey.1.md) 文件中指定。如果环境变量在多个地方定义，本地 lesskey 文件中定义的变量优先于系统环境中定义的变量，后者优先于系统范围 lesskey 文件中定义的变量。

`COLUMNS`：设置屏幕上的列数。优先于 `TERM` 变量指定的列数。（但如果你有支持 `TIOCGWINSZ` 或 `WIOCGETD` 的窗口系统，窗口系统的屏幕大小概念优先于 `LINES` 和 `COLUMNS` 环境变量。）

`EDITOR`：编辑器名称（用于 `v` 命令）。

`HOME`：用户主目录的名称（用于在 Unix 和 OS/2 系统上查找 lesskey 文件）。

`HOMEDRIVE`、`HOMEPATH`：`HOMEDRIVE` 和 `HOMEPATH` 环境变量的连接是用户主目录的名称（如果 `HOME` 变量未设置，仅在 Windows 版本中）。

`INIT`：用户 init 目录的名称（用于在 OS/2 系统上查找 lesskey 文件）。

`LANG`：用于确定字符集的语言。

`LC_CTYPE`：用于确定字符集的语言。

`LESS`：自动传递给 `less` 的选项。

`LESSANSIENDCHARS`：可以结束 ANSI 颜色转义序列的字符（默认为 `m`）。

`LESSANSIMIDCHARS`：ANSI 颜色转义序列中可以出现在 `ESC` 字符和结束字符之间的字符（默认为 `0123456789:;[?!"'#%()*+\`）。

`LESSANSIOSCALLOW`：以逗号分隔的 OSC 类型列表，当 `-R` 生效时直接输出到终端（默认为 `8`；即仅 OSC 8 序列直接输出）。

`LESSANSIOSCCHARS`：可以跟在 `ESC` 字符后标记"OS Command"序列开始的字符。该字符之后直到字符串终止符（ESC-反斜杠或 BEL）的所有字符都被视为 OSC 序列的一部分（默认为 `]`）。如果 `LESSANSIOSCCHARS` 中的字符后跟星号，文件内容中以该字符开头的序列被传递到终端；否则仅提示字符串中出现的序列被传递。

`LESSBINFMT`：显示不可打印、非控制字符的格式。

`LESSCHARDEF`：定义字符集。

`LESSCHARSET`：选择预定义的字符集。

`LESSCLOSE`：调用（可选）输入后处理器的命令行。

`LESSECHO`：lessecho 程序的名称（默认为 `lessecho`）。lessecho 程序用于在 Unix 系统上扩展文件名中的元字符，如 `*` 和 `?`。

`LESSEDIT`：编辑器原型字符串（用于 `v` 命令）。参见提示章节的讨论。

`LESSGLOBALTAGS`：`-t` 选项用于查找全局标签的命令名。如果你的系统有 [global(1)](https://github.com/FreeBSD-Ask/freebsd-man-sc/blob/main/man1/global.1.md) 命令，通常应设置为 `global`。如果未设置，不使用全局标签。

`LESSHISTFILE`：用于在 `less` 调用之间记住搜索命令和 shell 命令的历史文件名。如果设置为 `-` 或 **/dev/null**，不使用历史文件。默认值取决于操作系统，通常为：

* Linux 和 Unix：**$XDG\_STATE\_HOME/lesshst** 或 **$HOME/.local/state/lesshst** 或 **$XDG\_DATA\_HOME/lesshst** 或 **$HOME/.lesshst**。
* Windows 和 MS-DOS：**$HOME/\_lesshst**。
* OS/2：**$HOME/lesshst.ini** 或 **$INIT/lesshst.ini**。

`LESSHISTSIZE`：保存在历史文件中的最大命令数。默认为 100。

`LESSKEYIN`：默认 *lesskey 源* 文件的名称。

`LESSKEY`：默认 *lesskey 二进制* 文件的名称。（如果 `$LESSKEYIN` 存在则不使用。）

`LESSKEY_CONTENT`：该值被解析为 `--lesskey-content` 选项的参数。

`LESSKEYIN_SYSTEM`：默认系统范围 *lesskey 源* 文件的名称。

`LESSKEY_SYSTEM`：默认系统范围 *lesskey 二进制* 文件的名称。（如果 `$LESSKEYIN_SYSTEM` 存在则不使用。）

`LESSMETACHARS`：被 shell 视为"元字符"的字符列表。

`LESSMETAESCAPE`：`less` 在发送给 shell 的命令中每个元字符前添加的前缀（默认为 `\`）。

`LESSNOCONFIG`：如果设置为 `-`，除 `TERM` 外的所有环境变量都被忽略（被视为未设置）。如果设置为以逗号分隔的环境变量名列表，除 `TERM` 和列表中的变量外，所有环境变量都被忽略。在任一情况下（如果设置为任何非空值），所有 `lesskey` 文件也被忽略。

`LESSOPEN`：调用（可选）输入预处理器的命令行。

`LESSSECURE`：以"安全"模式运行 `less`。参见安全章节的讨论。

`LESSSECURE_ALLOW`：启用通常被 `LESSSECURE` 禁用的个别功能。参见安全章节的讨论。

`LESSSEPARATOR`：在文件名补全中附加到目录名的字符串（MS-DOS、Windows 和 OS/2 上默认为 `\`；否则为 `/`）。

`LESSUTFBINFMT`：显示不可打印 Unicode 码点的格式。

`LESSUTFCHARDEF`：覆盖指定 Unicode 字符的类型。

`LESS_COLUMNS`：设置屏幕上的列数。与 `COLUMNS` 不同，它优先于系统的屏幕大小概念，因此可用于使 `less` 使用少于全屏宽度。如果设置为负数，使用的列数设置为实际屏幕宽度减去该值。

`LESS_LINES`：设置屏幕上的行数。与 `LINES` 不同，它优先于系统的屏幕大小概念，因此可用于使 `less` 使用少于全屏高度。如果设置为负数，使用的行数设置为实际屏幕高度减去该值。设置后，`less` 在每次移动命令时重绘整个屏幕，因此滚动可能更慢。

`LESS_DATA_DELAY`：从开始从输入读取数据后，显示"Waiting for data"消息之前的持续时间（以毫秒为单位）。默认为 4000（4 秒）。

`LESS_IS_MORE`：模拟 [more(1)](https://github.com/FreeBSD-Ask/freebsd-man-sc/blob/main/man1/more.1.md) 命令。

`LESS_OSC8_xxx`：其中 `xxx` 是 URI 方案如 `http` 或 `file`，设置用于打开包含该方案 URI 的 OSC 8 链接的 OSC 8 处理器。

`LESS_OSC8_ANY`：为没有特定 `LESS_OSC8_xxx` 处理器的 `xxx` 方案设置打开 OSC 8 链接的 OSC 8 处理器。

`LESS_SHELL_LINES`：当 `-F` 选项设置时，如果用于显示文件的屏幕行数小于或等于屏幕高度减去 `LESS_SHELL_LINES` 变量的值，`less` 自动退出。因此，如果你使用的 shell 提示占据多于一屏行，此变量可以设置为提示使用的行数，以确保使用 `-F` 时可以看到整个文件。如果未设置，`LESS_SHELL_LINES` 假定为 1。

`LESS_SIGUSR1`：如果设置为一个或多个 `less` 命令字符的字符串，当 `less` 收到 `SIGUSR1` 信号时将执行这些命令。

`LESS_TERMCAP_xx`：其中 `xx` 是任意两个字符，覆盖终端 termcap `xx` 能力的定义。字符串中的转义序列不被处理，因此任何不可打印字符（如 `ESC`）必须在字符串中字面出现。

`LESS_TERMINFO_xxxx`：其中 `xxxx` 是任意字符串，覆盖终端 terminfo `xxxx` 能力的定义。你可以使用 `LESS_TERMCAP_xx` 或 `LESS_TERMINFO_xxxx` 来覆盖终端能力，无论 `less` 是用 `termcap` 还是 `terminfo` 库构建的。

`LESS_TERMCAP_BRACKETED_PASTE_START`：覆盖标准 ANSI 转义序列以启用括号粘贴。这在 `--no-paste` 选项生效时使用。

`LESS_TERMCAP_BRACKETED_PASTE_END`：覆盖标准 ANSI 转义序列以禁用括号粘贴。

`LESS_TERMCAP_MOUSE_START`：覆盖标准 ANSI 转义序列以启用鼠标报告。这在 `--mouse` 选项生效时使用。

`LESS_TERMCAP_MOUSE_END`：覆盖标准 ANSI 转义序列以禁用鼠标报告。

`LESS_TERMCAP_SUSPEND`：定义临时暂停屏幕更新的转义序列。这在清除屏幕之前发送到终端。可用于在某些终端上重绘屏幕时避免屏幕撕裂。

`LESS_TERMCAP_RESUME`：定义恢复屏幕更新的转义序列。这在显示提示之后发送到终端。

`LESS_UNSUPPORT`：以空格分隔的命令行选项列表。如果这些选项出现在命令行或 `LESS` 环境变量中，它们将被忽略（无错误消息）。`LESS_UNSUPPORT` 中列出的选项仍可通过 `-` 和 `--` 命令更改。`LESS_UNSUPPORT` 中的每个选项是破折号后跟单个选项字母，或两个破折号后跟长选项名。

`LINES`：设置屏幕上的行数。优先于 `TERM` 变量指定的行数。（但如果你有支持 `TIOCGWINSZ` 或 `WIOCGETD` 的窗口系统，窗口系统的屏幕大小概念优先于 `LINES` 和 `COLUMNS` 环境变量。）

`MORE`：在 `more` 兼容模式下运行时自动传递给 `less` 的选项。

`PATH`：用户搜索路径（用于在 MS-DOS、Windows 和 OS/2 系统上查找 lesskey 文件）。

`POSIXLY_CORRECT`：如果设置为任何值，命令行上的所有选项参数都应出现在任何文件名参数之前。这必须设置为实际环境变量，不能在 `lesskey` 文件中设置。

`SHELL`：用于执行 `!` 命令以及扩展文件名的 shell。

`TERM`：`less` 运行的终端类型。

`VISUAL`：编辑器名称（用于 `v` 命令）。

`XDG_CONFIG_HOME`：`lesskey` 文件的可能位置；参见键绑定章节。

`XDG_DATA_HOME`：历史文件的可能位置；参见 `LESSHISTFILE` 环境变量的描述。

`XDG_STATE_HOME`：历史文件的可能位置；参见 `LESSHISTFILE` 环境变量的描述。

## 参见

[lesskey(1)](https://github.com/FreeBSD-Ask/freebsd-man-sc/blob/main/man1/lesskey.1.md), [lessecho(1)](/man/man1/lessecho.1.md)

## 版权

Copyright (C) 1984-2026 Mark Nudelman

less 是 GNU 项目的一部分，是自由软件。你可以根据以下任一条款重新分发和/或修改它：（1）自由软件基金会发布的 GNU 通用公共许可证；或（2）Less 许可证。有关重新分发的更多详细信息，请参见 less 发行版中的 README 文件。你应该已收到 GNU 通用公共许可证的副本以及 less 的源代码；参见 COPYING 文件。如果没有，写信给 Free Software Foundation, 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA。你还应该已收到 Less 许可证的副本；参见 LICENSE 文件。

分发 less 的目的是希望它有用，但不提供任何担保；甚至不提供适销性或特定用途适用性的暗示担保。详见 GNU 通用公共许可证。

## 作者

Mark Nudelman

请在 <https://github.com/gwsw/less/issues> 报告缺陷。

更多信息，参见 less 主页：

<https://greenwoodsoftware.com/less>


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://book.bsdcn.org/man/man1/less.1.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
