跳转至内容

xterm

来自 ArchWiki

xterm终端模拟器 的标准 X Window System。它高度可配置,并具有许多有用甚至一些不寻常的功能。

安装

安装 xterm 包。

配置

资源文件设置

您可以在 X 资源 文件中设置多个选项,以使此终端模拟器使用起来更舒适。有关完整列表,请参阅 xterm(1) § RESOURCES

TERM 环境变量

允许 xterm 正确报告 TERM 变量。不要在您的 ~/.bashrc~/.bash_profile 或类似文件中设置 TERM 变量。终端本身应向系统报告正确的 TERM,以便使用合适的 terminfo 文件。两个可用的 terminfo 名称是 xtermxterm-256color。要设置名称,请使用资源

XTerm.termName: xterm-256color

您可以使用以下任一命令在 xterm 中检查结果

$ echo $TERM
$ tset -q

UTF-8

确保您的 区域设置 配置为 UTF-8。如果您不使用 UTF-8,则可能需要通过设置强制 xterm 更严格地遵循您的区域设置

XTerm.vt100.locale: true

要强制使用 UTF-8,请设置

XTerm.vt100.locale: false
XTerm.vt100.utf8: true

这通常是必要的,因为 XTerm 不支持所有 UTF-8 区域设置,包括 eo.UTF-8

让 'Alt' 键表现得像其他终端模拟器一样

xterm 中默认的 Alt 键行为是作为修饰键发送八位字符,例如按下 Alt+f 插入 æ。要让 Alt 键发送 ^[ (escape) 键(如 gnome-terminal 和 konsole 中),请设置

XTerm.vt100.metaSendsEscape: true

修复退格键

在 Arch Linux 上,按下退格键时 xterm 发送 ^H。这会破坏 Emacs 中的 Ctrl+H 组合键。解决方法是在按下退格键时发送 ^?,通过设置资源来实现

XTerm.vt100.backarrowKey: false
XTerm.ttyModes: erase ^?

快捷键

xterm 为操作终端定义了整套“动作”,例如 copy-selection()hard-reset()scroll-back() 等。可以使用 translations 资源将这些动作映射到鼠标/按键组合。例如,您可以将 Ctrl+MCtrl+R 映射到最大化/恢复窗口

XTerm.vt100.translations: #override \n\
    Ctrl <Key>M: maximize() \n\
    Ctrl <Key>R: restore()

#override 表示这些绑定应覆盖任何现有绑定(您几乎总是希望如此自定义按键绑定)。每个绑定必须用转义序列 \n 分隔。如果您想插入字面上的换行符,也需要转义(因此是 \n\)。有关动作的完整列表和许多示例,请参阅 xterm(1) § KEY_BINDINGS

提示 您也可以拥有独立的按键绑定集,并在它们之间切换。请参阅 man 页中的 keymap() 动作。

滚动

当新行写入 xterm 窗口底部时,旧行会从顶部消失。要上下滚动通过屏幕外行,可以使用鼠标滚轮、Shift+PageUpShift+PageDown 组合键,或滚动条。

默认情况下,会保存 1024 行。您可以使用 saveLines 资源更改保存的行数

XTerm.vt100.saveLines: 4096

影响滚动的其他 X 资源包括 jumpScrollmultiScrollfastScroll(都在 XTerm.vt100 下,请参阅 xterm(1) § VT100 Widget Resources)。要在备用屏幕中滚动,请将 alternateScroll 设置为 true

滚动条

默认情况下不显示滚动条。可以通过资源设置启用它并调整其外观(请注意“scrollbar”的大小写不同!)

XTerm.vt100.scrollBar: true
XTerm.vt100.scrollbar.width: 8

有关其他滚动条资源,请参阅 xterm(1) § Scrollbar Resources

滚动条的操作方式可能与您习惯的不同。

  • 向下滚动
    • 用鼠标左键单击滚动条,或者
    • 用鼠标中键单击滚动条上的滑块下方。
  • 向上滚动
    • 用鼠标右键单击滚动条,或者
    • 用鼠标中键单击滚动条上的滑块上方。
  • 定位文本,向任一方向移动
    • 用鼠标中键拖动滑块。

xterm 编译时禁用了 工具栏菜单栏。菜单仍然可以通过在 xterm 窗口内按 Ctrl+MouseButton 来作为 弹出菜单 访问。菜单项调用的操作通常可以通过命令行选项或设置资源值来完成。

提示 如果弹出菜单窗口仅显示为小框,这很可能是因为您的资源文件中有一行类似 XTerm*geometry: 80x32。这确实会在 80 列 32 行的主窗口中启动 xterm,但它也会强制菜单窗口的大小为 80 像素 x 32 像素!这就是为什么您应该完整指定资源的原因
XTerm.vt100.geometry: 80x32

下面将讨论一些菜单选项。

主选项菜单

通过 Ctrl+LeftMouse 打开

  • Secure Keyboard 尝试确保只有 xterm 窗口,而不是其他应用程序,接收您的按键。调用时,显示会变为反向视频。如果显示不是反向视频,则 Secure Keyboard 模式无效。请阅读 xterm(1) § SECURITY 以了解此选项的局限性。
  • Allow SendEvents 允许其他进程向 xterm 窗口发送按键和鼠标事件。由于安全风险,除非您非常确定自己在做什么,否则不要启用此选项。
  • Log to File – 日志文件的名称将是 Xterm.log.hostname.yyyy.mm.dd.hh.mm.ss.XXXXXX。此文件将包含所有打印输出以及所有光标移动。日志记录可能存在安全风险。
  • 六个 Send *** Signal 菜单项通常不怎么有用,除非您的键盘出现故障。HUPTERMKILL 将关闭 xterm 窗口。应避免使用 KILL,因为它不允许任何清理代码运行。
  • Quit 菜单项也会关闭 xterm 窗口 – 它相当于发送 HUP 信号。大多数用户会使用 Ctrl+d 组合键或输入 exit 来关闭 xterm 实例。

VT 选项菜单

通过 Ctrl+MiddleMouse 打开

  • Select to Clipboard – 通常,选定的文本存储在 PRIMARY 中,可以通过 Shift+Insert 或使用鼠标中键粘贴。通过将此选项切换为开启,选定的文本将使用 CLIPBOARD,允许您将 xterm 窗口中选定的文本粘贴到 GUI 应用程序中,方法是使用 Ctrl+v。相应的资源是 XTerm.vt100.selectToClipboard
  • Show Alternate Screen – 当您使用 vimless 等终端应用程序时,会打开备用屏幕。主 VT 窗口(现在隐藏)会保留在内存中。您可以通过切换此菜单选项来查看此主窗口,但无法在其中发出任何命令。您可以从此主窗口中选择和复制文本。
    提示 挂起在备用屏幕中运行的进程,然后恢复它,比使用 Show Alternate Screen 提供了更多功能。对于 bash shell,按 Ctrl+z 会挂起进程;输入 fg 命令会恢复它。
  • Show Tek WindowSwitch to Tek ModeTektronix 4014 是 1970 年代用于 CAD 和绘图应用的图形终端。来自 plotutils 的命令行程序 graph 和应用程序 gnuplot 可以使用 xterm 的 Tek 仿真;大多数人会更喜欢更现代的图表显示选项。请参阅下面的#Tek 4014 演示

VT 字体菜单

通过 Ctrl+RightMouse 打开

  • 使用 XLFD 字体时,前七个菜单项将更改当前 xterm 窗口中使用的字体面和字体大小。如果您使用的是 Xft 字体,则只会更改字体大小,字体面不会因不同的选择而改变。
    提示 如果您希望密切关注某个进程但又不想在屏幕上占用大量空间,UnreadableTiny 会很有用。例如,可以用于一个耗时较长的编译过程,而您只想看到操作是否完成。
  • Selection,在使用 XLFD 字体名称时,允许您切换到 PRIMARY 选择(或 CLIPBOARD)中存储的字体名称。

Tek 选项菜单

Tek Window 通过 Ctrl+MiddleMouse 打开。

第一部分的选项允许您更改 Tek 窗口字体大小。第二组选项用于在 Tek 仿真窗口和主(或VT)窗口之间移动焦点,以及关闭或隐藏 Tek 窗口。

复制和粘贴

首先,在 xterm(或另一个应用程序)中使用鼠标高亮文本会选择要复制的文本,然后单击鼠标中键会粘贴该高亮文本。Shift+Insert 组合键可以粘贴高亮文本(但并非所有应用程序都支持)。

有关术语和一般信息,请参阅 Clipboard#Selections

PRIMARY 或 CLIPBOARD

本文章或章节需要扩充。

原因:可以定义 CLIPBOARD 的单独快捷方式,而不是使用 Select to clipboard,这与 VTE 类终端类似。例如,请参阅 [1](在 Talk:Xterm 中讨论)。

默认情况下,xterm 将高亮文本复制到一个名为 PRIMARY 选择的缓冲区中,一旦另一个文本被高亮,该缓冲区中的文本就会被新的 PRIMARY 选择立即替换。PRIMARY 选择可以通过按鼠标中键或 Shift+Insert 在 xterm 中粘贴。

CLIPBOARD 选择用于显式的复制/粘贴命令,例如通过快捷键 Ctrl+cCtrl+xCtrl+v

xterm 允许用户通过 #VT Options menu 上的 Select to Clipboard 或使用 XTerm.vt100.selectToClipboard 资源在 PRIMARY 或 CLIPBOARD 之间切换。

PRIMARY 和 CLIPBOARD

通过上述设置,您可以选择是使用 PRIMARY 还是 CLIPBOARD,但您也可以修改它以同时添加到两者。只需覆盖释放鼠标左键的#按键绑定

<Btn1Up>: select-end(PRIMARY, CLIPBOARD, CUT_BUFFER0)

您可以添加类似其他终端(如 gnome terminal)的复制/粘贴行为的按键绑定

Ctrl Shift <Key>C: copy-selection(CLIPBOARD) \n\
Ctrl Shift <Key>V: insert-selection(CLIPBOARD)

选择文本

新用户通常会发现可以使用鼠标左键“点击并拖动”来选择文本。双击会选择一个单词,单词的定义是连续的字母字符加上下划线,或者说是基本正则表达式 (BRE) [A-Za-z_]。三击会选择一行,并且“制表符”通常会被复制为多个“空格”字符。

选择文本的另一种方法,尤其适用于复制一个以上全屏内容时,是

  1. 在预定选择的开始处单击鼠标左键。
  2. 滚动到可见的选择结束处。
  3. 在选择的结束处单击鼠标右键。
您不必立即在右键单击处做到精确——任何高亮选择都可以通过右键单击来扩展或缩短。

通过在 xterm 窗口中单击鼠标左键一次,可以清除任何选定的文本。

当一个字符应用程序在 xterm 中运行时,它会被允许接收鼠标事件。如果程序无法与 X11 剪贴板通信,这可能会成为一个问题。为了将这些事件传递给底层的 xterm,它们必须伴随 Shift 键。例如,在 links(而不是 xlinks -g)中,您可以鼠标单击 URL 和菜单项,但不能使用中键进行选择或粘贴。要进行复制粘贴,请按 Shift 键,然后执行鼠标单击(该键只需要在单击期间按下,因此在拖动鼠标选择文本块时无需按住它)。

颜色

xterm 默认是黑色文本,即前景颜色,在白色背景上。通过设置资源可以反转前景和背景颜色

XTerm.vt100.reverseVideo: true

或者,您可以使用资源直接更改前景和背景颜色(以及前十六种终端颜色)

XTerm.vt100.foreground: white
XTerm.vt100.background: black
XTerm.vt100.color0: rgb:28/28/28
! ...
XTerm.vt100.color15: rgb:e4/e4/e4
注意 使用 X 库的应用程序的颜色可以通过多种不同方式指定。

有些颜色可以通过指定名称来定义。如果安装了 emacsvim,您可以检查 /usr/share/emacs/*/etc/rgb.txt/usr/share/vim/*/rgb.txt 来查看带有十进制 RGB 值的颜色名称列表。颜色也可以使用十六进制 RGB 值指定,格式为 rgb:RR/GG/BB,或旧的不推荐使用的语法 #RRGGBB

颜色 PapayaWhip 等同于 rgb:ff/ef/d5,也等同于 #ffefd5

有关颜色语法的更完整描述,请参阅 xorg-docs 中的 X(7)

您可以在论坛帖子 Terminal Colour Scheme Screenshots 中查看许多关于配色方案的建议。

提示 许多人会在其 X 资源文件中指定颜色,而不指定应用程序类或应用程序实例
*foreground: rgb:b2/b2/b2
*background: rgb:08/08/08
上面的示例为所有使用这些资源的Xlib 应用程序(xclock、xfontsel 等)设置了前景色和背景色值。这是一种实现统一配色方案的简单有效的方法。

字体

默认字体

xterm 的默认字体是 X Logical Font Description 别名 fixed 指定的位图字体,通常解析为

-misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso8859-?

此字体,也别名为 6x13,具有非常广泛的 Unicode 字符覆盖。默认的“TrueType”字体是与名称 mono 匹配的 14 点字体。使用的FreeType 字体可以通过此命令找到

$ fc-match mono

根据字体是否为 TrueType,可以在您的资源中指定字体

XTerm.vt100.faceName: Liberation Mono:size=10:antialias=false
XTerm.vt100.font: 7x13

要测试,您也可以在命令行中设置字体:-fa 用于 faceName-fn 用于 font。如果您同时设置了两种字体,则可以通过切换 #VT Fonts menu 中的 TrueType Fonts 来在两者之间切换。您还可以通过以下资源选择默认字体

! start with TrueType fonts disabled
XTerm.vt100.renderFont: false

粗体和下划线字体

在使用 XLFD 名称时,xterm 中的斜体字符显示为下划线字符。TrueType 字体应使用斜体字面。

如果您不在命令行(-fb)或通过 XTerm.vt100.boldFont 资源指定粗体字体,xterm 将尝试查找与正常字体匹配的粗体字体。如果找不到匹配的字体,则会通过“重叠”正常字体来创建粗体字体。

CJK 字体

许多字体不包含双宽的中文、日文和韩文字符。如果您经常使用这些语言,像 urxvt 这样的其他终端模拟器可能更适合。

在 xterm 中使用位图 XLFD 字体处理 CJK 有很多陷阱。使用 TrueType 字体显示 CJK 要容易得多,可以使用 faceNameDoublesize 资源。此示例使用DejaVu Sans Mono 作为正常字体,使用文泉驿文泉驿点阵宋作为双宽字体

XTerm.vt100.faceName: DejaVu Sans Mono:style=Book:antialias=false
XTerm.vt100.faceNameDoublesize: WenQuanYi WenQuanYi Bitmap Song
XTerm.vt100.faceSize: 8

技巧与提示

自动透明

安装一个 transset 包,如 transset-dfAURxorg-transsetAUR,以及一个合成管理器,如 Xcompmgr。然后将以下行添加到您的 ~/.bashrc

[ -n "$XTERM_VERSION" ] && transset-df --id "$WINDOWID" >/dev/null

现在,每次在 xterm 中启动 shell 并且合成管理器正在运行时,xterm 窗口都将是透明的。transset-df 前面的测试确保如果 XTERM_VERSION 未定义,则它不会执行。请注意,如果您通过这种方式启动了除 shell 以外的程序,您的终端将不会是透明的。如果您想要该功能,很可能可以解决此问题。

另请参阅 Per-application transparency

启用铃声紧急通知

要让铃声字符通知窗口管理器紧急情况,请设置

XTerm.vt100.bellIsUrgent: true

字体技巧

使用颜色代替粗体和斜体

当使用小字号时,粗体或斜体字符可能难以阅读。一种解决方案是关闭粗体和下划线或斜体,转而使用颜色。此示例正是这样做的

! disable bold font faces, instead make text light blue.
XTerm.vt100.colorBDMode: true
XTerm.vt100.colorBD: rgb:82/a4/d3
! disable underlined text, instead make it white.
XTerm.vt100.colorULMode: true
XTerm.vt100.colorUL: rgb:e4/e4/e4
! similarly use colorIT for italics

有关格式信息,请参阅 #Colors

调整行距

文本行有时可能靠得太近,或者显得间距过大。例如,使用DejaVu Sans Mono 时,低下划线字形可能会与 CJK 字形或下一行中的光标块碰撞。行距,在排版中称为行高,可以通过以下资源进行调整,例如以扩大间距

XTerm.vt100.scaleHeight: 1.01

有效范围值从 0.91.5,其中 1.0 是默认值。

Tek 4014 演示

如果您安装了 plotutils,您可以使用 xterm 的 Tektronix 4014 仿真来查看 plotutils 包的一些测试文件。从 #VT Options menu 菜单项 Switch to Tek Mode 打开 Tek 窗口,或使用此命令启动新的 xterm 实例

$ xterm -t -tn tek4014

您的 PS1 提示符将无法正确渲染,如果它显示出来的话。在新窗口中,输入命令,

cat /usr/share/tek2plot/dmerc.tek

世界地图将出现在 Tek 窗口中。您也可以查看同一目录中的其他 *.tek 文件。要关闭 Tek 窗口,您可以使用 xterm 菜单。

防止 X11 输入被窥探

#Main Options menu 激活 Secure Keyboard 模式可能不方便。您可以改为使用#Key binding调用 secure() 动作

Ctrl Alt <Key>S: secure()

故障排除

滚动时闪烁

注意 双缓冲可能导致非位图字体渲染不正确。

使用 ABS 重建 xterm 并包含 --enable-double-buffer 标志

./configure --prefix=/usr \
     ...
     --with-utempter \
     --enable-double-buffer

有关详细信息,请参阅 Xterm modifications

配置未生效

某些应用程序,例如 i3,会调用 uxterm 包装器而不是 xterm。这可以通过为 uxterm 添加相同的配置来解决,例如

UXTerm.vt100.reverseVideo: true

如果您希望配置文件中没有重复条目,可以使用通配符匹配

*.vt100.reverseVideo: true

字体大小菜单不改变字体大小

如果您在更改字体大小时遇到问题,请安装 xorg-mkfontscale 包。

参见