【发布时间】:2011-05-06 10:06:02
【问题描述】:
假设我有一个脚本“myscript.sh”,其内容只是echo $PWD。我想以某种方式将此脚本绑定到 bash (gnome-terminal) 中的组合键 - 这样当我按下此组合键时,“myscript.sh”的输出将插入(“粘贴”)光标处在终端的位置。
显然,bash 历史记录和行操作由 readline 处理 - 我得到的 bash 键盘快捷键的引用,请参考 readline:
我还在Bash Reference Manual: Readline Init File Syntax 中看到,可以使用bind -p 列出bash 的键绑定(请参阅help bind [not 'man bind'] 了解更多信息) .因此,也许这个问题最好命名为“readline 中的自定义键盘快捷键的_binding 宏”:) 但无论如何,我想要做什么?
我想另一种方法是让脚本类似于“pwd | xsel -b”,然后我在终端上调用它——然后我可以粘贴;但我仍然想要一个单一的键盘快捷键,比如 Ctrl-Alt-H (它似乎没有用于任何事情),它会在按下时立即插入/粘贴脚本输出。
提前致谢,
干杯!
编辑:只是为了澄清 - 这是我想要这个设施的用例。我通常在项目文件夹中命名为cd,通常命名为myproject-folder-0012a,它受svn 的修订控制。还有一堆这样的文件夹。所以很多时候,我会在消息的第一个单词是目录名称的地方提交,如下所示:
svn ci -m "myproject-folder-0012a: here a commit message"
但这正是我不喜欢的——首先我输入了 11 个字符,速度相当快:
svn ci -m "
然后,我不能使用自动完成来获取名称(我在文件夹中)——这意味着我要么必须完全输入它(没办法:)),要么我复制粘贴它从提示符(需要选择 - 按下鼠标,拖动,释放鼠标;然后是 Ctrl+Shift+C,然后是 Ctrl+Shift+V,加上任何左/右键,如果我错过对齐 - 加上删除等,如果我做副本错误)。
含义 - 这么多工作,只是为了获得血腥提交消息的血腥文件夹名称:(我宁愿按(比如说)Ctrl-Alt-H之类的东西,并在光标位置自动插入文件夹名称,并完成它:)
我对@987654343@ 的建议只是因为我可以将它放入“全局”脚本中——比如将其符号链接为/usr/bin/myscript(显然,脚本的内容是echo $(basename $PWD) 而不仅仅是@ 987654346@ 满足我的需要),然后我可以这样做:
$ myscript # this puts directory name in clipboard
$ svn ci -m "[CTRL+SHIFT+V TO PASTE HERE]myproject-folder-0012a[NOW TYPE]: here a commit message"
...哪种方式可以减少工作量,但仍然 - 然后我必须记住脚本名称,然后调用它,之前我输入svn 命令(然后我不总是记得)......而且 - 我必须调用一个命令,然后按下一个组合键;为什么我不应该只按一次组合键,然后完成它??! :)
嗯,希望这能更好地澄清我的问题......
EDIT2:但是,bash 键盘快捷键有用的另一个原因是,我不仅可以在 shell 命令中“粘贴/插入当前目录名称”,还可以在终端程序中,比如nano(可以说,直接使用bash 脚本或函数扩展会更困难)。
【问题讨论】:
-
听起来像是超级用户的东西。
-
您无需执行
pwd | xsel -b并粘贴组合。如果你用反引号括起来,反引号命令的输出将被用作执行命令的输入。 -
嗨塞巴斯蒂安,谢谢你 - 我可以轻松地移动帖子 - 还是我必须在那里打开一个新帖子,然后粘贴过去?谢谢,干杯!
-
嗨 Reese,我不确定反引号如何适用于我的问题,所以我试图在上面的编辑中澄清我的问题......这都是关于少输入 :)
-
作为替代方案如何使用 shell 函数:
svnci() { svn ci -m "$PWD: $1" "${@:2}" ; }。用作$ svnci "here a commit message" <extra svn args>
标签: linux bash keyboard-shortcuts readline customization