如何配置 Ubuntu 终端以在 Ctrl(+Shift)+Left 和 Ctrl(+Shift)+Right 上跳转/选择单词?

如何配置 Ubuntu 终端以在 Ctrl(+Shift)+Left 和 Ctrl(+Shift)+Right 上跳转/选择单词?

我使用 Windows 11,但在 WSL 中或通过 SSH 连接时我也运行 Ubuntu。

在 Windows PowerShell 终端中,Ctrl+LeftCtrl+Right可向左或向右跳转单词。添加Shift选择将单词向左或向右移动(例如Ctrl+ Shift+ Left)。

在 WSL Ubuntu 终端中,Ctrl+Left会向左跳一个单词,Ctrl+Right会向右跳一个单词,但按下Shift不会选择。

在 SSH(PuTTY)终端中,两者都Ctrl没有Shift任何效果。

如何配置 WSL 和 SSH(PuTTY)以像 PowerShell 终端一样运行,这非常方便。

编辑1

我使用 Windows Terminal 运行 Windows Powershell、Powershell Core 和 WSL。其版本为 1.12.10732.0

答案1

简短回答:

我建议升级到 Windows Terminal,这是 Windows 中(相对较新的)终端替代品。在 Windows 11 22H2 的新安装中,它现在是 PowerShell、CMD、WSL 和任何其他“控制台模式”应用程序的默认终端。

Windows Terminal 的最新版本 (1.15) 增加了对“标记模式”的支持,这可能是最接近您所要求的功能。您可以使用Ctrl+ Shift+ M(可配置)激活标记模式。激活后,您可以使用Ctrl+( Shift)+Left/Right键绑定来移动和选择单词。


解释:

首先,重要的是要了解终端

  • PowerShell 和 Bash(在 WSL 中的 Ubuntu 中)是贝壳,它们实际上只是用于与其他文本/控制台模式应用程序(例如 Linuxls或 Windows ipconfig.exe)。

    在 shell 内部,有一个输入处理程序用于处理实际的击键。这通常是readlineUbuntu 中 Bash 的 Linux 库。在最近的 PowerShell 版本中,它是PSReadline

  • A终端另一方面,是文本模式应用程序在其中运行的窗口应用程序。

    Windows 在最新版本中提供了两个内置终端:

    • Windows 控制台主机是一个已有 25 年历史的传统终端,您在运行 PowerShell 或 Ubuntu/WSL 时可能会看到它。

    • Windows Terminal 是(相当)新的替代品。它现代、开源、功能丰富且可定制——这些都不适用于旧版控制台主机。它是从新安装的 Windows 11 22H2 开始的默认终端,并且可以在 Windows 11 21H2 中设置为默认终端。

    它在 Windows 10 下也能正常运行,但不是“默认”模式。例如,您可以通过启动 Windows 终端并启动 PowerShell 配置文件来运行 PowerShell,但仅从“开始”菜单运行“PowerShell”将使用较旧的控制台主机。

Windows 上也有不少第三方终端,Linux 上则更多。

PuTTY 有点像混合体,因为它将终端和文本模式应用程序(SSH 客户端)捆绑在一起。但这些功能实际上是分开的:

  • pterm.exe无需 SSH 客户端即可提供终端功能
  • plink.exe提供可以在不同终端中运行的 SSH 客户端

那么这到底和选择词语有什么关系呢?!

啊,我们快到了 ;-)。当您在 Windows 中按下任何键时,它都必须得到处理某处

  • 首先,某个键可能由 Windows 本身处理。例如,按Alt+Tab会告诉 Windows 在打开的窗口/应用程序之间切换/循环。如果某个键由 Windows 本身处理,则通常不会将其发送给任何其他应用程序。

  • 接下来1,按键被发送到应用, 哪一个是终端在您的案例中。控制台主机本身不处理许多键,但 Windows Terminal 包含大量键绑定,其中大多数都是可自定义的。例如,在 Windows Terminal 中按Ctrl+ Shift+T将打开一个具有默认配置文件的新选项卡。

    1我在这里过于简单了。其他应用程序也可以“钩住”键盘。

  • 如果终端未处理某个键,则终端将把它发送到文本/控制台应用程序(shell),或者更准确地说是其输入处理程序(或正在运行的任何其他应用程序,例如vim/ nano/等)。

    这就是您的 ++Ctrl键发生的情况。ShiftLeft/Right

那么我可以配置 shell Bash 来使用 ++ 来选择单词(Ctrl就像ShiftPowerShellLeft/Right一样)吗?

很遗憾,不行。请记住视窗PowerShell 几乎一直存在于这样的环境中:已知clipboard(Windows 剪贴板)。这意味着它(及其 readline)可以始终假设您使用键盘选择并将文本复制到剪贴板。

另一方面,Bash 最初是一个纯控制台应用程序,可以在没有任何图形窗口系统的情况下使用。它可以在纯控制台(无剪贴板)、Windows(clip.exe)、X(文本可以传递到xsel)、macOS 和其他系统中运行。它没有可用于复制到剪贴板的机制。一些其他文本模式应用程序已实现可配置的剪贴板选项,您可以在其中配置(例如)clip.exe作为接收复制文本的剪贴板应用程序,但 Bash 尚未这样做。

因此我们回到我最初的建议——使用 Windows 终端,它确实提供了此功能,尽管键绑定稍微不太方便,因为您必须先使用Ctrl+ Shift+进入标记模式M


那么PuTTY怎么样?

我不知道如何配置PuTTY来执行此操作,但我将主要跳过它,因为:

  • 自从 WSL 发布以来,我就没用过 PuTTY。Ubuntu 中的 OpenSSH 客户端提供了我需要的一切,而且 OpenSSH 的配置文件比 PuTTY 的配置文件(默认情况下将信息存储在 Windows 注册表中)更易于移植。

  • 无论如何,热键的配置除非我们讨论在其中配置 Ubuntu/Bash shell,否则 PuTTY 在 Ask Ubuntu 上会有点离题。

考虑到这一点,我个人推荐我所做的事情——既然您已经在 WSL 中使用 Ubuntu,那么如果它适合您的工作流程,只需在那里转换到 OpenSSH 客户端即可。然后,您可以使用 Windows Terminal 满足您的所有需求——PowerShell、WSL 和 SSH——所有功能都带有制表符和标记模式。

相关内容