jsh*_*hji 2 bash vim terminology
我有一个非常简短的问题,在谷歌搜索时我在其他地方找不到,尽管对我来说,这感觉是一个非常自然的问题,所以也许只是我错过了一些东西。
因此,YANK 这个词在 Bash 和 Vim 中的含义似乎相反。
ctrl-y
粘贴存储在kill-ring中的文本(或者,从kill-ring中拉出文本,如拉动.p
粘贴。但我们用来将文本复制到缓冲区。y
因此,我觉得在 Bash Yank 中是复制,在 Vim Yank 中是粘贴。在英语中,Yank 的意思是“拉”,所以我认为将 Yank 理解为从缓冲区/kill-ring 中提取数据更有意义(所以 yank = 粘贴)。
但由于我实在找不到任何关于此的讨论,我认为上述问题一定有一个非常合理的解释。如果有人能帮助我理解这一点,我将不胜感激!
谢谢你!
bash
(或者更确切地说,readline
这是 bash 使用的行编辑库)与 80 年代初期以来的大多数其他 shell 一样,有两种行编辑模式:emacs
或vi
,基于这两种流行的文本编辑器。
Bash 是 GNU shell,GNUemacs
是 GNU 的明星应用程序之一,默认模式是emacs
. set -o emacs
您可以使用和set -o vi
(也可以在 tcsh 或 zsh 中使用bindkey -e
/ )在两者之间切换bindkey -v
。Ksh 也适用set -o gmacs
于Gosling emacs which is the one set as default on Solaris for instance.
所以更多的是关于emacs 和 vi 中yank词含义的不同。
\nemacs 和 vi 都是在 70 年代末编写的,早于 bash (1989) 或 vim (1991)。
\n如果你查看1979 年 2BSD 的文档vi
:
\n\n运算符y将对象的副本复制到\n未命名的缓冲区中。如果前面有一个缓冲区名称“x y”,\n其中 x 被字母a\xe2\x88\x92z替换,则它将文本\n放置在指定的缓冲区中。然后可以使用以下命令将文本放回\n文件中:命令p和P;p将文本放置在光标之后或\xe2\x80\x90\n下方,而P将文本放置在光标之前或上方。
\n
Emacs 没有粘贴缓冲区,它有一个Killring来记录已被删除或复制的文本 into it. The yanking is seen as being in the other direction, pulled from that killring as opposed to pulled from the text into the kill ring.
\n1985 年左右的 GNU emacs 文档中, we find:
\n\n\nYanking 正在取回被删除的文本。移动或复制文本的常用方法是终止文本,然后将其拉出一次或多次。
\n
您会看到 bash 具有来自两个编辑器的小部件,可以绑定到按键或组合键:
\n$ bash -c \'bind -l\' | grep -i yank\nvi-yank-arg\nvi-yank-pop\nvi-yank-to\nyank\nyank-last-arg\nyank-nth-arg\nyank-pop\n
Run Code Online (Sandbox Code Playgroud)\n(这vi
ones being mostly undocumented).
默认绑定:
\n$ bash -o vi -c \'bind -pm vi\' | grep yank\n"_": vi-yank-arg\n# vi-yank-pop (not bound)\n"Y": vi-yank-to\n"y": vi-yank-to\n"\\C-y": yank\n# yank-last-arg (not bound)\n# yank-nth-arg (not bound)\n# yank-pop (not bound)\n$ bash -o vi -c \'bind -pm vi-insert\' | grep yank\n# vi-yank-arg (not bound)\n# vi-yank-pop (not bound)\n# vi-yank-to (not bound)\n"\\C-y": yank\n# yank-last-arg (not bound)\n# yank-nth-arg (not bound)\n# yank-pop (not bound)\n
Run Code Online (Sandbox Code Playgroud)\n看看如何在 vi 插入模式下仍然获得 emacs 风格的Ctrl+ ;y未记录的vi-yank-arg
绑定_
也使用 emacs 风格的术语,其行为与yank-last-arg
emacs 小部件类似。我不知道vi-yank-pop
要做什么。bash 源代码发行版中的文件NEWS
显示它是emacs-mode yank-pop 的 vi-mode 版本, though that doesn\'t make sense since vi has no kill-ring.