如何在Linux终端中快速编辑命令?

如何在Linux终端中快速编辑命令?

如果您在 Linux 终端中输入了一条命令,尤其是很长的命令,并且想要删除一个或多个单词并用其他内容替换它们,有没有一种方法可以在终端中快速执行此操作?

这与 Linux 无关,但在记事本等应用程序中,您可以选择一个或多个单词并一步删除它们。但是,据我所知,在终端中,我必须逐个字母地删除它们,这可能是一个缓慢的过程。

我知道 Vim 可以做到这一点,但我们假设我想直接在终端中编辑它,而不是在 Vim 中打开它。

答案1

默认情况下,您可以使用以下键绑定[1]在终端中移动光标

alt + b   move one word backward
alt + f   move one word forward
ctrl + b  move one character forward
ctrl + f  move one character forward

按单词移动比按字符移动要快得多。一旦你的角色就位,你就可以使用

alt + d  to delete a word in cursor position
ctrl + d  delete a character in cursor position

如果您有 vi 键绑定设置(谢谢@admstg)在 bash 中,您可以键入ESCkey 进入 vi 模式。以下是如何使用 vi 键绑定移动光标[2]

h    move left by a character
l    move right by a character
b    move back by a word
w    move forward by a word
dw   delete word at cursor
x    cut a character at cursor
u    undo
r    replace a character
v    enter vi editor to edit the command

参考:

答案2

我个人更喜欢经常使用以下键。我bash主要使用其默认设置,并在 中定义了以下一些附加功能.inputrc

"\e[1;5A": previous-screen-line
"\e[1;5B": next-screen-line

CtrlUp并将CtrlDown光标移动到命令的上一个/下一个可视行。对于很长的多行命令很有用。

"\e[1;5C": forward-word
"\e[1;5D": backward-word

CtrlLeft并按CtrlRight单词水平移动光标。

"\e[3;5~": kill-word
"\b": backward-kill-word

CtrlDeleteCtrlBackspace删除右侧/左侧的整个单词。 (AltBackspace默认情况下应该这样做,但我更喜欢Ctrl与其他应用程序以及其他快捷键保持一致。)

当然HomeEnd和往常一样DeleteBackspace这些都是开箱即用的。

请查阅readline手册的“编辑命令”部分,寻找您可能觉得方便的其他可能性。

切换到另一个流行的 shell,例如zshfish可能会提供更多(或只是不同)的选项,我对它们不熟悉,您可能还想看看。

一些终端模拟器(我不确定是哪些)允许用鼠标定位光标。这是一个黑客行为,一个有点不可靠的猜测:终端合成几个LeftRight按键(根据点击点与光标的相对位置),就像您多次按下这些箭头键一样,并假设应用程序( shell)将通过将光标移动到那里来对此做出反应(这通常是但并不总是正确的猜测)。

答案3

如果您使用通常的默认 emacs 键绑定(IE 不是 vi 绑定),您可以使用CtrlW从光标向后删除到下一个空格边界。

当尝试删除路径或 URL 的一部分时,这可能有点激进,因此也存在AltBackspace尊重各种其他单词边界字符的情况。

有许多可用的绑定,此处无法列出。

答案4

您可以使用vi直接在终端中使用命令set -o vi

相关内容