具有更好编辑功能的 Shell

11 command-line bash gnome-terminal

Shell(至少我所知道的)具有非常糟糕的命令编辑功能。

例如:

  • 我无法将光标指向命令的任何一点。
  • 我无法在命令中选择和退格/删除/替换文本。

目前这些太让人分心了,我在将它们粘贴到终端之前使用 gedit 来编辑命令。

有没有对这些有好处的解决方案?

ter*_*don 14

Bash实际上非常擅长这一点。你只需要学习它的捷径。例如(在默认的 emacs 模式下):

  • Ctrl+ A:移动到行首。
  • Ctrl+ E:移动到行尾。
  • Ctrl+ B:向后移动一个字符。
  • Ctrl+ F:向前移动一个字符。
  • Alt+ B:向后移动一个词。
  • Alt+ F:向前移动一个词。
  • Ctrl+ K:删除(剪切)直到行尾的所有内容。
  • Alt+ D:删除(剪切)光标后的单词。
  • Ctrl+ W:删除(剪切)光标前的单词。
  • Ctrl+ Y:猛拉(粘贴)缓冲区中的内容(例如用Ctrl+KAlt+剪切的内容D

还有更多。阅读man readline以了解还有什么可用的。您可以通过将它们放在~/.inputrc. 例如,要使Ctrl+Left后退一个词和Ctrl+Right前进一个词,请将其添加到您的~/.inputrc

"\e[1;5D": backward-word 
"\e[1;5C": forward-word
Run Code Online (Sandbox Code Playgroud)

要了解这些奇怪代码的含义,请按Ctrl+ V,然后按您要使用的键。如果您尝试使用Ctrl+ Right,您将看到^[[1;5C. 替换^[\ein ~/.inputrc


您可能还想查看其他 shell。流行的“现代”、功能丰富的 shell 包括:


kos*_*kos 8

您可以通过设置EDITOR为您选择的编辑器并点击CTRL+ X+ECTRL+ X/ CTRL+ E,将一个空的或部分键入的命令编辑到您选择的编辑器中,这会打开当前正在编辑的行EDITOR

例如,设置EDITORgedit将使CTRL+ X+ECTRL+ X/ CTRL+E在 Gedit 中打开当前行。

要使其成为永久解决方案,您可以EDITOR~/.bashrc.

这甚至允许使用功能齐全的图形文本编辑器来编辑命令;要运行编辑的命令,只需保存并关闭文档。


通过将以下内容添加到 Zsh 中,可以启用相同的功能~/.zshrc

autoload -U edit-command-line
zle -N edit-command-line
bindkey '^xe' edit-command-line
bindkey '^x^e' edit-command-line
Run Code Online (Sandbox Code Playgroud)

  • 如果设置了 FCEDIT 变量,这也可以使用 `fc` 命令调用。好答案 ! (2认同)

chi*_*cks 6

终端本身没有文本编辑能力。终端提供文本区域并将键盘连接到某物。但是你在终端内运行的东西决定了它可以做什么。

Shell 之bash的通常是您会发现在终端内运行的第一件事。因为 shell 是基于命令工作的,所以您只能编辑当前命令。 提供了出色的编辑命令相比Bourne shell或cshksh但却是几乎你想编辑甚至一个小故事的东西。

文本编辑器是您可以在 shell 中调用的命令之一。主要的例子是vimemacs将使您能够编辑几乎任何内容。两者都包括内置的编程环境,可以将它们的能力扩展到您面临的任何问题。

因此,解决方案是更好地了解这些工具正在做什么和打算做什么,并为工作选择合适的工具。