大写字母的控制序列

大写字母的控制序列

我正在尝试提高我的盲打技术,它的准确度和速度都很低。

我注意到自己在输入大写字母时遇到了很大困难。我经常不得不离开主行,或者如果我伸小指去按换档键,我总是会打错。

我在使用退格键时遇到了同样的问题,但通过改用 ^H 解决了这个问题,我的控制键处于大写锁定状态,因此我可以轻松执行大多数 readline 快捷键,并且可以轻松地纠正错误而无需离开主行。

也许有办法转义大写字母?就像我们可以用 ^V 转义序列,或者像我们可以用 ^T 转置光标中的字符一样。有办法将光标中的字符大写吗?

编辑:为澄清起见,如所问:

我目前使用的是 macOS,默认 shell 是 zsh,但我可以轻松切换到另一个可以实现此目的的 shell。因此,我愿意接受任何可能的解决方案,因为我稍后可以尝试在整个系统范围内测试相同的解决方案。

在 macOS 上的大多数应用程序上,我可以使用控制序列进行行编辑,就像在终端中一样,我猜 macOS 使用 readline 来实现这一点,对于某些应用程序,我还使用 rlwrap,它是 readline 的包装器,这就是为什么我可能也可以从 readline 相关的解决方案中受益。

如果您知道任何 shell 的解决方案,它将很有用,因为我可以开始使用这个 shell。

答案1

以下是你可以在 Bash 5 中执行的操作:

_up() {
 [ "$READLINE_POINT" -lt 1 ] && return 0
 local char
 char="${READLINE_LINE:$((READLINE_POINT-1)):1}"
 READLINE_LINE="${READLINE_LINE:0:$((READLINE_POINT-1))}${char^}${READLINE_LINE:$READLINE_POINT}" 
}

bind -x '"\C-x\C-u":_up'

从现在开始,将文本光标前的字符转换为大写。这个想法是,您在输入小写字符后立即使用该组合。Ctrl xu

将功能绑定到一些不太麻烦的组合。

READLINE_LINE是一个变量,它允许我们检索和/或修改命令行的内容。READLINE_POINT是一个变量,它允许我们知道和/或设置文本光标在行中的位置。

该方法非常有限,它仅在 Bash 的命令行中有效。它在 Bash 5 中应该可以很好地工作。

Bash 4 支持READLINE_LINE和,READLINE_POINT但后者变量使用字节,而在 Bash 5 中则使用字符。这意味着您可以在 Bash 4 中使用该函数,并且它在很多情况下都能正常工作,但多字节字符会使其混淆。修补该函数以使其在 Bash 4 中与多字节字符配合良好可能并非易事。

相关内容