Answers:
Bash实际上很擅长此事。您只需要学习其快捷方式。例如(在默认的emacs模式下):
还有更多。阅读man readline
以了解其他可用内容。您可以通过将不同的快捷方式放在中来分配它们~/.inputrc
。例如,要使Ctrl+ Left后退一个单词和Ctrl+ Right前退一个单词,请将其添加到您的~/.inputrc
:
"\e[1;5D": backward-word
"\e[1;5C": forward-word
要了解这些奇怪的代码的含义,请按Ctrl+ V,然后按要使用的键。如果尝试使用Ctrl+ Right,您将看到^[[1;5C
。替换^[
为\e
中~/.inputrc
。
您可能还需要研究其他shell。流行的“现代”,功能丰富的外壳包括:
gnome-terminal
您必须使用ESC
按钮,而不是ALT
向前和向后导航一个单词。。..或切换到不使用Alt作为其应用程序菜单的终端。。。像xterm或sakura
您可以通过选择EDITOR
所需的编辑器并单击CTRL+ X+ E或CTRL+ X/ CTRL+ E,在您选择的编辑器中编辑一个空的或部分键入的命令,这将在其中打开当前正在编辑的行EDITOR
;
例如,设置EDITOR
为gedit
将使CTRL+ X+ E和CTRL+ 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
fc
如果设置了FCEDIT变量,也可以使用命令来调用它。好答案 !
fc
打开了前面的命令(在某些方面它甚至更整洁)。我不知道,谢谢!
终端本身没有文本编辑功能。终端提供文本区域,并将键盘连接到某些东西。但东西,你的终端中运行决定了它能做什么。
bash
通常,诸如Shell之类的东西是您要在终端内部运行的第一件事。由于外壳基于命令工作,因此您只能编辑当前命令。 庆典提供了出色的编辑命令相比Bourne shell或csh
或ksh
但却是几乎你想编辑甚至一个小故事的东西。
文本编辑器是您可以在Shell中调用的命令之一。领先的例子是vim和emacs。 vim
或emacs
将使您能够编辑几乎所有内容。两者都包括内置的编程环境,可将其功能扩展到您遇到的任何问题。
因此,解决方案是更好地了解这些工具在做什么以及打算做什么,并为工作选择合适的工具。
通常,终端允许使用鼠标选择文本,但是外壳并没有意识到这一点。因此bash
,很遗憾zsh
,,fish
和都不es
支持基于鼠标的编辑。我想这样做,他们将需要对终端进行更大的控制。
但是(这是一个有点夸张),如果你使用Vim打开或gVim的,然后输入使用shell命令:
:!...
然后您可以单击鼠标跳到该行的任何位置。(:set mouse=a
如果尚未启用该功能,则需要先启动。):help cmdline-editing
Vim还具有非常强大的命令历史记录模式,可以通过单击来实现q:。在这里,您可以使用Vim的正常模式命令来提取,删除和粘贴。在此模式下,您可以选择鼠标,然后删除所需的功能(按d)。
一个重要的警告是,Vim实际上并未保持实时shell会话的运行。您执行的每个命令将在子进程中运行。因此,子进程对环境变量或shell选项所做的任何更改都将丢失。
也就是说,您可以在 Vim进程中修改环境变量,并在Vim的命令行中使用它们,甚至可以将它们导出到子进程中:
:let $FOO="bar" " the $ and the quotes are mandatory here
:echo $FOO " Vim's own echo command
bar
:!echo "$FOO" " Passing the variable to a shell command
bar
:!bash " Opening a child shell
$ echo "$FOO"
bar
因此,如果您愿意假装Vim实际上是某种怪异的外壳,那么您可以享受其高级编辑功能!可能的最大缺点是,您必须通过键入:!
或来启动每个命令。q:
哦,顺便说一句,如果要将shell命令的输出输入到当前的Vim缓冲区中,可以这样进行(但要注意,它将破坏当前行):
:,!ls