跳转至内容

rxvt-unicode

来自 ArchWiki
(重定向自 Rxvt)

rxvt-unicode (urxvt) 是一个从 rxvt 分叉而来的 终端模拟器,可以通过源代码 补丁#X 资源#Perl 扩展 进行自定义。

安装

安装 以下之一

或在 Arch 用户仓库 中搜索带有不同补丁和配置选项的意见驱动的 构建

补丁
文件名 描述
7-bit-queries.patch
用于 7 位查询的多字符序列 — 对于彩色 操作系统命令 (OSC) 序列的正确工作是必需的;已合并到上游
24-bit-color.patch
真彩色支持
256color.patch
256 ~/.Xresources 颜色
background-opacity.patch
固定的不透明度(pixbuf-相关)
clear.patch
Ctrl-L 将屏幕上的所有行保留在滚动回退缓冲区中(VTE 风格的行为)
enable-wide-glyphs.patch
增强字形支持,由 improve-font-rendering.patch 需要
font-width-fix.patch
减小字符之间的空格,与 improve-font-rendering.patch 不兼容(已被其取代)
improve-font-rendering.patch
字体渲染改进
line-spacing-fix.patch
垂直间距改进,与 improve-font-rendering.patch 不兼容(已被其取代)
lines-rewrap.patch
解决了 #升级到 9.31 后 Shell 提示符位置错误 问题
matcher-vi-bindings.patch
matcher 扩展添加 vi 风格的 (hjkl) 键以模仿已弃用的 ulr-select 行为
noinc.diff
无增量调整 — 对于更好的 Openbox 用户体验是必需的
popup-menu-hang.diff
修复 popup Perl 扩展挂起问题
rxvt-unicode-sixel.patch
Digital Equipment Corporation (DEC) Sixel 支持,用于通过 DEC 设备控制字符串 (DCS) P Sixel q 转义序列表达字符位图图像 — ESC Pq ESC\
rxvt-unicode-truecolor.patch
24-bit-color.patch 相同
secondaryWheel.patch
使用鼠标滚轮在辅助屏幕上滚动
starttop.patch
注释掉 screen.C 的第 397 行 — 解决 #升级到 9.31 后 Shell 提示符位置错误 问题的一种方法


第三方 Perl 扩展
文件名,

链接

软件包 (Package) 描述
keyboard-select urxvt-perls
使用键盘快捷键选择和复制文本
resize-font urxvt-resize-font-gitAUR
使用键盘快捷键调整字体大小;也支持小数间隔 — 例如 0.5

配置

X 资源

Rxvt-unicode 由命令行参数或 X 资源 控制。命令行参数会覆盖资源设置并具有更高的优先级。

资源的第一个组件是 URxvt — 或一个 应用程序(实例)名称。应用程序名称可以通过 urxvt(1) § name 命令行选项指定,默认设置为 urxvt — 一个 basename(1) — 二进制文件。对于给定的实例,使用应用程序名称定义的资源会覆盖使用类名称定义的资源,并具有更高的优先级。

提示 Rxvt-unicode 的资源命名方案 不像 xterm 那样 严重依赖嵌套组件。有效的 松散绑定(星号,*)用法示例可以在 urxvt(7) § Terminal Configuration 部分找到。

有关可用设置、X 资源和值的更多信息,请参阅 urxvt(1)urxvt(7)。此外,urxvt --help 会将所有可用资源打印到 标准错误。每个资源都可以用作长命令行选项。

使用由 xorg-xrdb 包提供的 xrdb(1) — 来应用配置:xrdb ~/.Xresources

提示 根据你的环境,你可能需要使用 -merge 选项。
注意 新配置仅应用于新实例,而不应用于现有实例。

字体

Rxvt-unicode 不使用 fontconfig 库 进行字体替换,当缺少字体或单个字符时。也就是说,你必须在相应 资源 中提供所有字体名称 — 为你感兴趣的所有 字形 设置 字体集

  • 使用非等宽字体的能力 — 例如 Nerd Font 与 Nerd Font Mono — 很大程度上取决于你的环境(参见 #间距)和字体本身。
  • 如果字形无法显示或找不到,它将被替换为空方块。

Rxvt-unicode 支持 X FreeType (Xft) 和 X Logical Font Description (XLFD);urclock(1) 支持 XLFD。

永久

~/.Xresources
URxvt.font:           xft:Input Mono:size=13:style=Regular,\
                      xft:Font Awesome 6 Free:style=Solid
URxvt.boldFont:       xft:Input Mono:size=13:style=Medium
URxvt.italicFont:     xft:Input Mono:size=13:style=Italic
URxvt.boldItalicFont: xft:Input Mono:size=13:style=Medium Italic
注意 如果 Xft 字体名称中包含连字符(-),则必须用反斜杠(\)将其转义两次。这与 urxvt -fn 选项的使用以及 fc-list 返回的结果不同,后者只有一个反斜杠。

非永久性

你可以使用 Xterm 操作系统命令 (OSC) 来更改当前实例的字体。使用 数字 (Ps) 参数 710–713 后面跟着相应的 文本 (Pt) 参数,如下所示(也请参阅 urxvt(1) § CHANGING FONTS

$ printf '\x1b\x5d710;%s\x1b\x5c' "xft:Terminus:pixelsize=22"
$ printf      '\e]711;%s\a'       "xft:Terminus:pixelsize=22:bold"

要使用键盘快捷键更改当前实例的字体大小,请使用 resize-font Perl 扩展。

间距

你可能需要使用 letterSpace 来调整字符之间的水平距离,和/或使用 urxvt(1) § lineSpace: 来调整行之间的垂直距离。这些需求取决于

  • 使用渲染改进补丁,例如 enable-wide-glyphs.patch, improve-font-rendering.patch, font-width-fix.patchline-spacing-fix.patch,
  • 使用字形与英文字母差异很大的语言,例如阿拉伯语、中文、希伯来语、日语或韩语,
  • 你的字体及其大小。

滚动回退缓冲区

提示 默认情况下,鼠标滚轮滚动 五行,按住 Shift 键时滚动 一行。如果你想更改这些数字 — 你需要编辑 源代码

接收新输出时的行为

默认情况下,当 Shell 输出出现时,滚动回退视图会自动跳转到缓冲区底部以显示新输出。

如果你想在 伪 TTY 仍在接收新行时查看之前的输出(例如编译器消息),并在按下按键时跳转到滚动回退缓冲区的底部,请使用以下选项

URxvt.scrollTtyOutput:   False
URxvt.scrollWithBuffer:  True
URxvt.scrollTtyKeypress: True

辅助屏幕

当你滚动 辅助屏幕 中的分页器(例如,使用 less(1) 而不使用 -X/--no-init 选项)时,禁用辅助屏幕滚动可能是一个好主意,以便能够滚动分页器 本身,而不是终端的缓冲区。

这在 Konsole基于 VTE 的终端模拟器中是默认的且不可更改的行为。要在 urxvt 中实现相同的行为,请使用以下设置

URxvt.secondaryScroll: False

上述配置工作正常,除了使用鼠标滚轮滚动时。当你在 辅助屏幕 中使用鼠标滚轮滚动分页器时,并且滚动回退缓冲区中有内容 — 鼠标滚轮会滚动 滚动回退缓冲区,而不是分页器 本身

为了解决这个问题,有必要在 urxvt 中引入 一个新选项。使用像 rxvt-unicode-better-wheel-scrolling-unicode3AURrxvt-unicode-fontspacing-noinc-vteclear-secondarywheelAUR 这样的包,或应用 secondaryWheel.patch。安装后,设置以下选项

URxvt.secondaryWheel: True
注意 避免将此选项与 urxvt-vtwheelAUR Perl 扩展一起使用,因为它会发生冲突。

清除

重置为初始状态 (RIS) ESC 06/03 控制函数 会清空屏幕 滚动回退缓冲区。你可以像这样将其绑定到所需的按键

URxvt.keysym.Meta-Control-l: command:\033c

屏幕清除时保留屏幕内容

urxvt 中,按下 Ctrl-L 会清空屏幕,并且屏幕内容会被丢弃 — 你之后无法在滚动回退缓冲区中看到它。对于使用 Konsole基于 VTE 的终端模拟器的用户来说,这种行为可能令人费解,因为在这些模拟器中,Ctrl-L 会将屏幕内容保留在滚动回退缓冲区中。

要在 urxvt 中实现这种 VTE 风格的行为,你可以使用合适的包,例如 rxvt-unicode-better-wheel-scrolling-unicode3AURrxvt-unicode-fontspacing-noinc-vteclear-secondarywheelAUR,或者在你喜欢的构建中应用 clear.patch

滚动条

滚动条的外观和感觉由十几个资源控制。请查看手册中关于 urxvt(1) § scrollstyle:urxvt(1) § scrollColor: 资源,并参阅 urxvt(1) § THE SCROLLBAR 部分。

你还可以使用 DEC 私有模式 urxvt(7) § Escape SequencesPm = 30)在运行时更改滚动条的可见性。例如,你可以将滚动条可见性切换绑定到键盘快捷键

URxvt.keysym.Meta-Control-s: command:\033[?30t

保存到文件

Ctrl-PrintShift-Print 使用类似以下的设置将 滚动回退缓冲区 的内容保存到文件中

URxvt.print-pipe: cat > ~/Downloads/URxvt_$(date '+%Y-%m-%d_%H:%M:%S').txt
  • Print 通常是 Print Screen 键。
  • 单独的 Print 保存屏幕内容,但不包括滚动回退缓冲区。

剪贴板

Rxvt-unicode 的 剪贴板 行为对于没有 xterm 背景的人来说可能显得不寻常。有关详细信息,请参阅 urxvt(1) § THE SELECTION: SELECTING AND PASTING TEXT

你可以使用 urxvt-eval(1) 和键盘绑定来设置复制和粘贴到 CLIPBOARD

URxvt.keysym.Control-Insert:    eval:selection_to_clipboard
URxvt.keysym.Shift-Insert:      eval:paste_clipboard

urxvt-selection-to-clipboard(1) 可用于同步 CLIPBOARDPRIMARY selection

urxvt-confirm-paste(1) 扩展会在检测到粘贴内容包含控制字符(如换行符)时显示确认对话框。它是 default 集合的一部分,会自动加载,请参阅 urxvt(1) § perl-ext-common#禁用 Perl 扩展 以获取更多信息。

Perl 扩展

我们可以通过包含以下行来启用 Perl 扩展

URxvt.perl-ext-common: extension_name_1,extension_name_2,...
注意 扩展名称之间不应有任何空格。

参见

可点击的 URL

你可以使用 matcher 扩展使终端中的 URL 可点击。例如,使用鼠标左键在默认的 Web 浏览器中打开链接,请将以下内容添加到 .Xresources

URxvt.perl-ext-common: default,matcher
URxvt.url-launcher: /usr/bin/xdg-open
URxvt.matcher.button: 1

自 rxvt-unicode 9.14 起,也可以使用 matcher 通过键盘打开和列出最近(目前限制为 10 个)的 URL

本文或本章节已过时。

原因: perl:STRING *已弃用*,请参阅 urxvt(1) § perl:STRING。(在 Talk:Rxvt-unicode 中讨论)
URxvt.keysym.C-Delete: perl:matcher:last
URxvt.keysym.M-Delete: perl:matcher:list

匹配的链接可以使用选定的前景色或背景色进行着色(请参阅 urxvt(1) § COLOURS AND GRAPHICS),例如蓝色

URxvt.matcher.rend.0: Uline Bold fg4

或者,使用 colorUL 来设置 #RRGGBB 颜色。但这会为所有带下划线的文本着色,而不是仅为链接匹配着色

URxvt.colorUL: #4682B4

简单的标签页

要为 urxvt 添加标签页,请将以下内容添加到你的 ~/.Xresources

URxvt.perl-ext-common: ...,tabbed,...

要控制标签页,请使用

按键 描述
Shift+Down 新建标签页
Shift+Left 切换到左侧标签页
Shift+Right 切换到右侧标签页
Ctrl+Left 将标签页向左移动
Ctrl+Right 将标签页向右移动
Ctrl+d 关闭标签页

你可以使用以下设置更改标签页的颜色

URxvt.tabbed.tabbar-fg: 2
URxvt.tabbed.tabbar-bg: 0
URxvt.tabbed.tab-fg: 3
URxvt.tabbed.tab-bg: 0

为了使标签栏透明,将其值设置为 -1

URxvt.tabbed.tabbar-bg: -1

如果你需要重命名标签页,你可能需要安装 urxvt-tabbedexAUR 来代替。

全屏

你可以安装 AURurxvt-fullscreenAUR,然后设置一个键盘绑定将 urxvt 设置为全屏。

本文或本章节已过时。

原因: perl:STRING *已弃用*,请参阅 urxvt(1) § perl:STRING。(在 Talk:Rxvt-unicode 中讨论)
URxvt.perl-ext-common:  ...,fullscreen,...
URxvt.keysym.F11:       perl:fullscreen:switch

禁用 Perl 扩展

如果你不使用 Perl 扩展功能,可以通过完全禁用 Perl 扩展来提高安全性和速度

URxvt.perl-ext-common:

要选择性地禁用一个扩展,你需要在此扩展名称前加上一个连字符

Urxvt.perl-ext-common: default,-extension

或者,你可以明确列出所有需要的扩展,从而有效地禁用所有其他扩展

URxvt.perl-ext-common: eval,searchable-scrollback,resize-font

故障排除

升级到 9.31 后 Shell 提示符位置错误

某些窗口管理器可能会出现提示符出现在窗口中间的问题。这可能发生在启动时和/或窗口调整大小时。根本原因是 lines-rewrap 算法的更新。

要解决这个问题,你应该应用 lines-rewrap.patch

你也可以尝试调整 geometry,但结果取决于环境和工作流程,没有“一刀切”的解决方案

  • 设置真实几何:URxvt.geometry: 174x47
  • 设置不切实际的几何:URxvt.geometry: 400x400
  • 将行数设置为 -1URxvt.geometry: 80x-1
这可能导致无法使用某些命令行选项,例如 urxvt --borderColor black -e mc 有时会在启动终端的短暂瞬间将 Shell 提示符放在第一行的中间,而不是运行 Midnight Commander

最终解决方案是恢复源代码中的更改

远程主机

如果你登录到远程主机,在 rxvt-unicode 下运行文本模式程序时可能会遇到问题。这可以通过在远程主机上安装 rxvt-unicode-terminfo 或将本地机器上的 /usr/share/terminfo/r/rxvt-unicode 复制到你的主机的 ~/.terminfo/r/rxvt-unicode 来解决;rxvt-unicode-256color 也是如此。

一些远程系统不会自动更改标题,除非你指定 TERM=xterm。要解决这个问题,请将以下行添加到远程机器的 .bashrc

PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME}:${PWD}\007"'

你还可以尝试将以下内容放入你的 .Xresources

URxvt.termName: rxvt

这在连接到没有管理员权限的远程主机而无法安装 rxvt-unicode 的 terminfo 定义时非常有用。

将 rxvt-unicode 用作 gmrun 的终端

与某些其他终端不同,urxvt 期望 -e 的参数是分开提供的,而不是用引号组合在一起。这会导致 gmrun 出现问题,gmrun 假设行为相反。可以通过在 .gmrunrcgmrunTerminal 变量前面加上 eval 来解决这个问题

Terminal = eval urxvt
TermExec = ${Terminal} -e

gmrun 使用 /bin/sh 来执行命令,因此 eval 在这里是可以理解的。eval 会产生“分解” -e 参数的副作用,其方式与 Bash 中的 $@ 相同,从而使命令对 urxvt 具有可读性。

组合键不起作用

请参阅 Get Alt key to work in terminal

非常长的行导致速度变慢

matcher 插件可能是罪魁祸首。它必须在每次行更新时将正则表达式与行进行匹配,如果你设置了很大的 saveLines 值,这可以通过允许非常大的最大行长度来加剧问题。

有一些简单的解决方法

  • 减小 saveLines
  • 禁用 matcher 插件

如果以上两者都不是可行的选项,你可以通过在某个截止点后禁用 URL 匹配来妥协

  1. /usr/lib/urxvt/perl/matcher 复制到 ~/.urxvt/ext/(如果需要,请创建该目录)
  2. 编辑 ~/.urxvt/ext/matcher,并在 on_line_update 子程序中找到 my ($self, $row) = @_; 行。它应该是第 270 行。
  3. 在该行之后,插入行 return () if $row < -100;。这将禁用对任何比终端顶部落后 100 行以上的行的 URL 匹配。

Midnight Commander 中没有粗体文本

如果使用默认的 TERM 设置在 rxvt-unicode 下启动,通常在许多其他终端中会显示为粗体的文本将不会显示为粗体。问题的根源在于 xterm 将亮色文本与粗体属性耦合 — 因此,亮色在 xterm 中将始终显示为粗体。

注意 Rxvt-unicode 没有这个限制,S-Lang — Midnight Commander 默认用于文本显示的库 — 尊重这一点。因为 S-Lang 可以在 rxvt-unicode 上将粗体属性与亮色分离,Midnight Commander 需要显式指定适当的粗体属性,但它并没有这样做

解决方案是配置 Midnight Commander 以显式使用所需的粗体颜色,例如通过编辑默认皮肤如下

$ mkdir ~/.local/share/mc/skins
$ cp /usr/share/mc/skins/default.ini ~/.local/share/mc/skins/
$ sed -i -E 's/^(.* = (gray|brightred|brightgreen|yellow|brightblue|brightmagenta|brightcyan|white);.*)$/\0;bold/' ~/.local/share/mc/skins/default.ini

以上将创建一个 default 皮肤的副本,但所有亮色都添加了显式的粗体属性。

参见