rxvt-unicode
rxvt-unicode (urxvt) 是一个可自定义的终端模拟器,从 rxvt 分支而来,并支持 Perl 扩展。
安装
安装 以下软件包之一
- rxvt-unicode,
- rxvt-unicode-truecolor-wide-glyphsAUR — 改进的字体渲染,增强的字形支持,应用了 真彩色 支持,
或者在 AUR 中搜索应用了不同补丁和配置选项的带有个人偏好的 构建版本。
文件名 | 描述 |
---|---|
7-bit-queries.patch
|
|
24-bit-color.patch
|
|
256color.patch
|
|
background-opacity.patch
|
|
clear.patch
|
|
enable-wide-glyphs.patch
|
|
font-width-fix.patch
|
|
improve-font-rendering.patch
|
|
line-spacing-fix.patch
|
|
lines-rewrap.patch
|
|
matcher-vi-bindings.patch
|
|
noinc.diff
|
|
perl-5.38.patch
|
|
popup-menu-hang.diff
|
|
rxvt-unicode-sixel.patch
|
|
rxvt-unicode-truecolor.patch
|
|
secondaryWheel.patch
|
|
starttop.patch
|
|
文件名, 链接 |
软件包 | 描述 |
---|---|---|
keyboard-select | urxvt-perls |
|
resize-font | urxvt-resize-font-gitAUR |
|
配置
X 资源
Rxvt-unicode 通过命令行参数或 X 资源进行控制。命令行参数会覆盖资源设置并优先于资源设置。
资源的第一个组成部分是类 (URxvt
) 或应用程序(实例)名称。应用程序名称可以使用 urxvt(1) § name 命令行选项指定,默认设置为 urxvt
— 一个二进制 basename(1)。对于给定的实例,使用应用程序名称定义的资源会覆盖并优先于使用类名称定义的资源。
*
)的有效示例用法。请参阅 urxvt(1) 和 urxvt(7) 以了解可用的设置、资源和值。此外,urxvt --help
会将所有可用的资源打印到标准错误输出。 每个资源都可以用作长命令行选项。
使用 xrdb(1) (xorg-xrdb) 来应用配置,如下所示:xrdb ~/.Xresources
。根据您的环境,您可能需要使用 -merge
选项。新配置仅应用于新实例,而不应用于现有实例。
字体
当字体或单个字符不存在时,Rxvt-unicode 不使用 fontconfig 库进行字体替换。也就是说,您必须在相应的资源中(设置 fontsets)提供您感兴趣的所有字形的所有字体名称。
使用非等宽字体(如 Nerd Font
与 Nerd Font Mono
)的能力很大程度上取决于您的环境(参见 #Spacing)和字体本身。
如果字形无法显示或找不到,则会用一个空方块代替。
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
-
),则必须使用反斜杠 (\
) 转义两次。这与 urxvt -fn
选项的用法以及 fc-list 返回的结果不同,在 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.patch 或 line-spacing-fix.patch,
- 使用字形与英文字母差异过大的语言,如阿拉伯语、中文、希伯来语、日语或韩语,
- 您的字体及其大小。
回滚缓冲区
接收新输出时的行为
默认情况下,当 shell 输出出现时,回滚视图将自动跳转到缓冲区的底部以显示新输出。
如果您想在 伪终端 仍在接收新行时查看以前的输出(例如,编译器消息),并在按下按键时跳转到回滚缓冲区的底部,请使用以下选项
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-unicode3AUR 或 rxvt-unicode-fontspacing-noinc-vteclear-secondarywheelAUR 之类的软件包,或者应用 secondaryWheel.patch
。安装后,设置以下配置
URxvt.secondaryWheel: True
清除
重置为初始状态 (RIS) ESC 06/03
控制功能 会清空屏幕和回滚缓冲区。您可以将其绑定到您想要的按键,如下所示
URxvt.keysym.Meta-Control-l: command:\033c
清除屏幕时保留屏幕内容
在 urxvt 中,按 Control-L 会清空屏幕,并且屏幕内容会被丢弃 — 您稍后无法在回滚缓冲区中看到它。对于有 Konsole 或 基于 VTE 的 终端模拟器使用经验的用户来说,这种行为可能看起来有争议,在这些模拟器中,Control-L 会将屏幕内容保留在回滚缓冲区中。
要在 urxvt 中实现这种类似 VTE 的行为,您可以使用适当的软件包,如 rxvt-unicode-better-wheel-scrolling-unicode3AUR 或 rxvt-unicode-fontspacing-noinc-vteclear-secondarywheelAUR,或者在您喜欢的构建版本中应用 clear.patch
。
滚动条
滚动条的外观和感觉由十几个资源控制。请查看 urxvt(1) § scrollstyle: 和 urxvt(1) § scrollColor: 资源周围的手册,并参阅 urxvt(1) § THE SCROLLBAR 部分。
您还可以使用 DEC 私有模式 urxvt(7) § Escape Sequences (Pm = 30
) 动态更改当前实例的滚动条可见性。例如,您可以将滚动条可见性切换绑定到键盘快捷键
URxvt.keysym.Meta-Control-s: command:\033[?30t
保存到文件
Ctrl-Print 或 Shift-Print 将回滚缓冲区内容保存到文件,配置如下
URxvt.print-pipe: cat > ~/Downloads/URxvt_$(date '+%Y-%m-%d_%H:%M:%S').txt
- Print 通常是 Print Screen 键。
- 单独按 Print 键会保存屏幕,但不包括回滚缓冲区。
剪贴板
对于没有 xterm 背景的人来说,Rxvt-unicode 剪贴板行为可能看起来有争议。有关详细信息,请参阅 urxvt(1) § THE SELECTION: SELECTING AND PASTING TEXT。
您可以使用 urxvt-eval(1) 和按键绑定来设置复制到 CLIPBOARD 和从 CLIPBOARD 粘贴
URxvt.keysym.Control-Insert: eval:selection_to_clipboard URxvt.keysym.Shift-Insert: eval:paste_clipboard
urxvt-selection-to-clipboard(1) 可用于将 CLIPBOARD 与 PRIMARY selection 同步。
当检测到包含控制字符(如换行符)的粘贴时,urxvt-confirm-paste(1) 扩展会显示一个确认对话框。它是 default
集的一部分,并且会自动加载,有关更多信息,请参阅 urxvt(1) § perl-ext-common 和 #Disabling Perl extensions。
Perl 扩展
我们可以通过包含以下行来启用 Perl 扩展
URxvt.perl-ext-common: extension_name_1,extension_name_2,...
另请参阅
- urxvt(1) § perl-ext-common — 资源描述
- urxvt-extensions(1) — 可用的(预打包的)扩展列表,不要与
default
扩展集混淆 $ man 1 urxvt-extension_name
— 特定预打包扩展的手册页- urxvtperl(3) — 嵌入式 Perl 解释器手册
可点击的 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
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+向下 |
新标签页 |
Shift+向左 |
转到左侧标签页 |
Shift+向右 |
转到右侧标签页 |
Ctrl+向左 |
将标签页向左移动 |
Ctrl+向右 |
将标签页向右移动 |
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。
全屏
您可以安装 AUR 软件包 urxvt-fullscreenAUR,然后设置一个按键绑定以将 urxvt 设置为全屏。
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,但结果取决于环境和工作流程,没有“一刀切”的解决方案
- 设置真实 geometry:
URxvt.geometry: 174x47
。 - 设置不切实际的 geometry:
URxvt.geometry: 400x400
。 - 将行数设置为 -1:
URxvt.geometry: 80x-1
。
- 这可能会导致无法使用某些命令行选项,例如
urxvt --borderColor black -e mc
有时会打开终端一小段时间,shell 提示符位于第一行的中间,而不是运行 Midnight Commander。
- 这可能会导致无法使用某些命令行选项,例如
最终的解决方案是恢复源代码中的更改
- 注释掉 screen.C 中的一行(另请参阅
starttop.patch
)。 - 完全恢复算法更改:FS#77062#comment216001。
远程主机
如果您正在登录远程主机,则在 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
这在连接到没有管理员权限的远程主机以安装 terminfo 定义以用于 rxvt-unicode 时很有用。
将 rxvt-unicode 用作 gmrun 终端
与其他一些终端不同,urxvt 希望 -e
的参数单独给出,而不是用引号组合在一起。这给 gmrun 带来了麻烦,gmrun 假设相反的行为。可以通过在 .gmrunrc
中 gmrun 的 Terminal
变量前面放置一个 eval
来解决这个问题
Terminal = eval urxvt TermExec = ${Terminal} -e
gmrun 使用 /bin/sh
执行命令,因此 eval
在这里是可以理解的。eval
的副作用是“分解” -e
的参数,就像 Bash 中的 $@
一样,使命令对 urxvt 可理解。
我的数字键盘行为异常并产生不同的输出?(例如在 vim 中)
某些 Debian GNU/Linux 用户似乎遇到了这个问题,尽管到目前为止还没有报告具体的细节。可能是由于错误的 TERM 设置引起的,尽管关于这是否以及如何发生的细节尚不清楚,因为 TERM=rxvt 应该提供兼容的键盘映射。
但是,使用 xmodmap 程序 (xorg-xmodmap),您可以重新映射您的数字键盘按键。
1. 使用 xev
程序检查您的数字键盘(小键盘)生成的键码。
- 启动
xev
程序 - 按下您的数字键盘按键,并在
xev
的输出中查找 ... keycode xxx ...。例如,某些键盘上的数字键盘 1 也是 “End” 键,其 “keycode 87”。
2. 创建或修改您的 xmodmap 文件,通常是 ~/.Xmodmap
,内容代表您的键码。
带有数字键盘键码的 xmodmap 文件示例
keycode 63 = KP_Multiply keycode 79 = Home KP_7 keycode 80 = Up KP_8 keycode 81 = Prior KP_9 keycode 82 = KP_Subtract keycode 83 = Left KP_4 keycode 84 = KP_5 keycode 85 = Right KP_6 keycode 86 = KP_Add keycode 87 = End KP_1 keycode 88 = Down KP_2 keycode 89 = Next KP_3 keycode 90 = Insert KP_0 keycode 91 = Delete KP_Decimal keycode 112 = Prior keycode 117 = Next
3. 在 X 会话启动时加载您的 xmodmap 文件。
例如,在 ~/.xinitrc
文件中添加
... xmodmap ~/.Xmodmap ...
快捷键组合不起作用
请参阅 Get Alt key to work in terminal。
非常长的行导致速度减慢
matcher
插件可能是罪魁祸首。每次行更新时,它都必须将正则表达式与行匹配,如果您有一个很大的 saveLines
值,这可能会通过允许非常大的最大行长度来加剧问题。
有一些简单的解决方法
- 减少
saveLines
- 禁用
matcher
插件
如果以上都不是可接受的选项,您可以妥协,方法是禁用超过特定截止点的 URL 匹配
- 将
/usr/lib/urxvt/perl/matcher
复制到~/.urxvt/ext/
(必要时创建目录) - 编辑
~/.urxvt/ext/matcher
,并在on_line_update
子程序中找到my ($self, $row) = @_;
行。它应该是第 270 行。 - 在该行之后,插入行
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
上述操作将创建默认皮肤的副本,但所有明亮的颜色都添加了显式的粗体属性。
另请参阅
- Rxvt Unicode — Alex Booker 的视频教程
- 可浏览的 CVS — 源代码
- rxvt-unicode —
enable-wide-glyphs.patch
开发者的 dotfile