如何交换命令行输入中的两个字符?

如何交换命令行输入中的两个字符?

在命令行中输入命令时,我经常混淆字符,例如gitp ushc d-。我希望能够点击向上调出该行,然后按几个键来交换有问题的字符。当然,我可以删除并重新输入其中一个字符,但如果可以的话,如果可以的话,让这些错误变得更不那么烦人,那就太好了。

在终端中输入命令时是否有某种方法可以调换两个字符?

我通常在 Ubuntu 上使用 GUI 终端应用程序,但我也想知道是否有一个答案与 shell 的运行方式无关。

答案1

如果您在 shell 中使用 Vi 编辑模式,则只需xp在正常模式(“命令模式”,即按 后Esc)下键入即可轻松交换两个字符。这字面意思是“擦除光标下的字符”,然后“将先前拉出的文本(删除的字符)粘贴到光标后面”。

这适用于所有shshell。POSIX 标准中描述了 Vi 模式

在 Emacs 编辑模式下,相同的操作常常绑定到Ctrl+TT“转置”)。

没有完全地与 shell 无关的方法来做到这一点。上面的代码适用于bashksh93zsh,但 Emacs 命令行编辑模式不是标准的(如 POSIX 标准)。

这是来自上述链接页面的基本原理部分:

在早期的提案中,包含了源自 KornShell 的 emacs 命令行编辑模式,尽管 emacs 编辑器本身并未包含在内。 emacs 支持者社区坚持认为完整的 emacs 编辑器不应该标准化,因为他们担心标准化这个非常强大的环境的尝试会鼓励供应商发布严格一致的版本,而缺乏社区所需的可扩展性。原emacs程序的作者也表达了省略该程序的愿望。此外,历史上有很多系统不包含 emacs,或者包含它但不支持它,但很少有不包含和支持 vi 的。 shell emacs 命令行编辑模式最终被省略,因为很明显 KornShell 版本和随 GNU 系统分发的编辑器在某些方面存在差异。emacs 的作者要求 POSIX emacs 模式要么被删除,要么有大量未指定的条件。尽管 KornShell 作者同意考虑进行更改以使 shell 保持一致,但标准开发人员当时决定推迟规范。当时,人们认为后续草案将就可接受的定义达成一致,但这种情况并未发生,而且似乎也没有这样做的动力。在任何情况下,实现都可以根据用户最熟悉的编辑器的确切模型免费提供额外的命令行编辑模式。

相关内容