是否像在Emacs中一样在Bash中复制并设置标记?


16

我希望能够复制并粘贴到使用相同的键盘绑定中的Bash命令行的文本Emacs的默认情况下使用(即使用C-spaceset-markM-w复制文本,C-yM-y将其粘贴等)。

GNU Bash的文件说,猛砸附带了一些默认设置了这些键绑定。

例如,C-y默认情况下,yanking()在我的终端上有效。但是,我无法使用set-markcopy命令,并且默认情况下它们似乎未绑定到任何键。

通常,用户可以定义自己的键绑定的方法是将其添加到中.inputrc。因此,我查看并在文档中找到了以下bash函数,这些函数可以帮助我定义所需的类似于Emacs的行为(即set-markwith C-spacecopywith M-w)。

copy-region-as-kill ()

将区域中的文本复制到终止缓冲区,以便立即将其取消。默认情况下,此命令是未绑定的。

set-mark (C-@)

将标记设置到该点。如果提供了数字参数,则将标记设置到该位置。

如果我理解正确,则上面的意思copy-region-as-kill是默认情况下未绑定到任何键盘序列,而默认情况下set-mark已绑定C-@

C-@在终端上尝试过,但是我认为它不能运行,set-mark因为在移动光标时没有看到任何突出显示的文本。无论如何,我都尝试将键盘绑定(M-wC-)添加到函数中copy-region-as-kill以及set-mark上面的函数 中.inputrc,然后使用进行重新加载C-x C-r,但这是行不通的。我知道我的其他条目还在.inputrc工作,因为我在其中定义了其他用户定义的键绑定。

我做错了什么吗?我有什么想念的吗?


bash您正在使用什么版本的终端程序?
Mikel

我在gnome终端(也在Terminator上)使用GNU bash版本3.1.17(1)-发行版(x86_64-redhat-linux-gnu)
Amelio Vazquez-Reina

Answers:


11

它不会突出显示该选择,但否则我认为它可以正常工作。

尝试跑步

$ bind -p | grep copy-region-as-kill

确保C-x C-r确实有效。

应该说:

"\ew": copy-region-as-kill

之后,它应该可以正常工作。

例:

$ abc<C-Spc><C-a><M-w> def <C-y>

给我

$ abc def abc

如果您想知道哪里mark,那就去吧C-x C-x

例:

$ <C-Spc>abc<C-x><C-x>

会将光标放回您设置标记的位置(行的开头)。

另外,我认为您不需要添加set-mark绑定。我没有

$ bind -p | grep set-mark
"\C-@": set-mark
"\e ": set-mark
# vi-set-mark (not bound)

(请注意,大多数终端C-@C-Spc按下时发送。我想您也是如此。)

如果所有步骤均失败:

  • 确实Ctrl+ Space工作emacs -nw在同一终端上?
  • 其他Alt/ Meta快捷方式在bash中工作吗?

1
谢谢!我在.inputrc中使用“ Mw”而不是“ \ ew”。缺少突出显示也使我感到困惑。顺便说一下,感谢您对bind命令的指点。现在,它就像一种魅力!
Amelio Vazquez-Reina

2
欢迎!是的,您必须写\e\M-。请参阅readline初始化文件语法
Mikel

真是个好答案!谢谢。这为我清除了类似的问题:D
ephsmith 2012年

设置标记和将区域复制为无提示工作时,是否可以突出显示该区域(如在emacs中一样)?
mosh

4

我还将Cw绑定到kill-region。这是我的.inputrc:

#参见http://lists.gnu.org/archive/html/bug-bash/2009-03/msg00033.html
关闭bind-tty-special-chars

#定义我最喜欢的Emacs键绑定。
“ \ C- @”:设置标记
“ \ Cw”:杀死区域
“ \ Mw”:复制区域为杀死
“ \ M- /” dabbrev-expand
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.