如何在Linux的Bash Shell中复制和粘贴文本

时间:2020-01-09 10:39:02  来源:igfitidea点击:

是否要在Bash shell的命令行中复制并粘贴?无论我们喜欢键盘还是鼠标,我们都会向我们展示多种技术。无论我们是在图形桌面还是在传统的基于文本的TTY上,它们都可以工作。

通常的键盘快捷键不起作用

复制和粘贴文本是使用计算机的主要部分。当人们第一次使用Linux计算机时,无论他们来自Windows还是macOS世界,在尝试在终端窗口中进行复制和粘贴时,通常会感到困惑。

在Windows中,我们可以使用Ctrl + C复制突出显示的文本,并使用Ctrl + V粘贴。在macOS中,我们可以使用Command + C复制和粘贴Command + V。它们遵循" C"复制和" V"插入的相同约定。

这些击键在大多数Linux图形应用程序(例如编辑器gedit或者LibreOffice office suite)中都有效。考虑一下这些约定已被应用到这些应用程序中的事实。他们使用肌肉记忆中的击键并继续工作。

一旦我们的新手打开了一个终端窗口并尝试在Bash shell命令提示符下进行复制和粘贴,所有更改-Ctrl + C和Ctrl + V都被分配了功能,很久以前还没有想到复制和粘贴。实际上,早在电传打字机(TTY)是一种物理事物的发明之前,这些击键就已经被招募了很长时间。

TTY中的Ctrl + C和Ctrl + V

当TTY是物理设备时,选择Ctrl + C作为方便的组合键来生成信号。该信号是SIGINT,它告知当前进程终止。由于终端窗口是模拟的TTY,因此该击键组合(以及许多其他组合)已保留并在模拟中复制。请注意,是模拟的终端窗口。 Bash shell是在该TTY中运行的程序。

我们可以很容易地看到已经分配给Ctrl + C和Ctrl + V的功能。假设我们键入以下命令,然后按Enter。

ls -R /

因为我们使用-R(递归)选项,所以ls命令将从根目录开始列出每个文件和目录。片刻之后,我们意识到这不是我们想要的,因此我们可以通过按" Ctrl + C"来终止该过程。

Ctrl+C

ls过程终止。屏幕截图中突出显示了Ctrl + C的可见证据。它显示为" ^ C"。

Ctrl + V组合键可逐字插入。这样,我们就可以在键入的内容中输入键的表示形式,而不必获得键的效果。要查看此信息,请尝试使用以下命令(请勿键入逗号)。 (例如,要尝试第一个,请按Ctrl + V,然后按Enter。)

Ctrl+V, Enter
Ctrl+V, PgDn
Ctrl+V, RightArrow
Ctrl+V, Esc

顺便说一句,我们可能会注意到Enter由^ M表示。前面我们看到Ctrl + C显示为^ C。看来^表示代表Ctrl。因此,Ctrl + M的含义可能与Enter相同。这是否意味着我们可以通过输入Ctrl + M进入Enter键?在终端窗口中尝试。我们会看到的。

因此,很明显,当它们已经分配了具有悠久历史的功能时,我们不能指望Ctrl + C和Ctrl + V执行复制和粘贴文本。那么我们可以使用什么呢?

相关:如何使用键盘快捷键在Ubuntu中提高生产力

Ctrl + Shift + C和Ctrl + Shift + V

容易记住,因为它们非常相似,Ctrl + Shift + C和Ctrl + Shift + V是Ctrl + C和Ctrl + V的直接替代。

如果用鼠标在终端窗口中突出显示文本,然后按Ctrl + Shift + C,则会将该文本复制到剪贴板缓冲区中。

Ctrl+Shift+C

我们可以使用Ctrl + Shift + V将复制的文本粘贴到同一终端窗口或者另一个终端窗口中。

Ctrl+Shift+V

我们也可以粘贴到图形应用程序中,例如gedit。但是请注意,当我们粘贴到应用程序而不是终端窗口时,必须使用Ctrl + V。

我们也可以选择其他方式。我们可以突出显示" gedit"中的文本,然后按" Ctrl + C",然后使用" Ctrl + Shift + V"将其粘贴到终端窗口中。

组合键Ctrl + Insert与Ctrl + Shift + C相同,组合Shift + Insert与Ctrl + Shift + V相同。需要注意的是,它们只能在同一终端窗口中使用。

使用鼠标:右键单击

我们可以使用鼠标复制并粘贴到终端窗口中。我们必须使用鼠标突出显示要复制的文本,所以为什么不使用它来执行复制和粘贴操作呢?

突出显示某些文本后,右键单击鼠标,然后从上下文菜单中选择"复制"。

要粘贴复制的文本,请再次用鼠标右键单击,然后从上下文菜单中选择"粘贴"。

文本粘贴在命令行上光标的位置。在此示例中,相对路径输入错误,并且Bash无法更改目录。用户从路径开头错过了~/,他们输入了~/,然后复制了上一次尝试的剩余路径并将其粘贴到第二个命令行中。

当他们按Enter键时,它们将移至目录。

此示例显示了粘贴到相同的终端窗口中,但是我们可以使用这种右键单击技术将其粘贴到不同的终端窗口中。我们也可以使用此方法粘贴到图形应用程序中。

使用鼠标:中间按钮

只要鼠标有一个中间按钮,就有一种使用鼠标进行复制和粘贴的更快的方法。如果我们按下滚动轮(轻轻地!)并且它发出咔嗒声,则我们有一个中间按钮。

在终端窗口中突出显示一些文本,然后按中键。高亮显示的文本粘贴到命令行上的光标位置。复制和粘贴同时进行。

因此,突出显示一些文本:

然后按下中间按钮:

我们可以使用此方法粘贴在不同的终端窗口之间,也可以粘贴到图形应用程序中。只需突出显示文本,移至另一个终端窗口或者应用程序,然后按中间按钮即可。

老学校没有老鼠

没有鼠标怎么办?如果我们无法突出显示任何文本,如何复制和粘贴?

Linux服务器通常配置为没有图形桌面环境(GDE),这意味着我们无权访问鼠标。即使在运行图形桌面环境(如GNOME)的Linux计算机上并且我们确实有鼠标,在某些情况下,我们也无法使用鼠标突出显示文本。

例如,我们可能已切换到其他TTY之一。在现代发行版中,它们位于Ctrl + Alt + F3(TTY3)到Ctrl + Alt + F6(TTY6)之间。 Alt + F1`将带我们进入GDE的登录屏幕。)

也许我们甚至在使用真正的硬件TTY设备连接到Linux或者Unix计算机。

无论哪种方式,这些技术都将为我们服务。这里要记住的一点是,这不是复制和粘贴,而是剪切,复制和粘贴,我们只能从当前命令行剪切和复制。当然,我们可以使用箭头键滚动历史记录,以查找要剪切,复制和粘贴的命令行。

我们可以使用的击键是:

  • Ctrl + W:在光标之前剪切单词,并将其添加到剪贴板缓冲区。

  • Ctrl + K:剪切光标后的部分行,并将其添加到剪贴板缓冲区。如果光标在该行的开头,它将剪切并复制整行。

  • Ctrl + U:剪切光标之前的行部分,并将其添加到剪贴板缓冲区中,如果光标位于行末,它将剪切并复制整行。

  • Ctrl + Y:粘贴最后剪切和复制的文本。

让我们跳到TTY3. (之后,使用Ctrl + Alt + F1返回到桌面。)

Ctrl+Alt+F3
tty

我们有一个要删除的文件,让我们检查一下它在这里。

ls -l file_to_delete.txt

如果使用向上箭头键,则将在命令历史记录中调用上次使用的命令。我们可以只编辑此行,但目的是演示剪切,复制和粘贴,因此我们将以稍微拖长的方式完成删除文件的任务。

我们将光标移到文件名的第一个字母,然后按Ctrl + K。这将删除该行的一部分并将文本复制到剪贴板缓冲区。

我们将按Backspace键,直到清除该行。

我们将输入rm来删除文件。

现在我们可以按Ctrl + Y并粘贴到行的其余部分。

这样就完成了我们的命令,我们可以按Enter键删除文件。

不能在其他TTY之间使用这种类型的剪切,复制和粘贴。例如,我们不能在TTY3和TTY4之间剪切,复制和粘贴。

最好将额外的TTY视为并排放置的一系列物理TTY。无法在不同的物理终端之间进行剪切和粘贴,并且在这些仿真中也无法这样做。