我经常使用 git,并且喜欢 iTerm2,因为它能够为命令设置键盘快捷键。例如,我将CTRL+设置ENTER为git status
。
使用 gnome-terminal 可以实现这一点吗?或者您可以推荐其他选项来实现这一点?
答案1
您可以使用bind -x
将命令绑定到 Bash 中的快捷方式。例如,要将git status
命令绑定到Crtl+p快捷方式,您可以使用:
bind -x '"\C-p":git status'
将其放入~/.bashrc
文件中以便记住它。来自手册页:
-x keyseq:shell 命令
每当输入 keyseq 时,都执行 shell-command。执行 shell-command 时,shell 将 READLINE_LINE 变量设置为 Readline 行缓冲区的内容,并将 READLINE_POINT 变量设置为插入点的当前位置。如果执行的命令更改了 READLINE_LINE 或 READLINE_POINT 的值,这些新值将反映在编辑状态中。
答案2
1. 自动打开一个新的终端窗口,显示命令的输出
由于您需要在命令运行后保持终端打开,因此输入:
gnome-terminal -e 'bash -c "git status; read line"'
快捷键组合下,即可完成此任务。它将打开新的 gnome-terminal
窗口并在其中运行命令。
将其添加到快捷方式
选择:系统设置 > “键盘” > “快捷键” > “自定义快捷键”。点击“+”并添加命令:
gnome-terminal -e 'bash -c "git status; read line"'
至Ctrl+Enter
笔记
尽管您建议的快捷方式有效,但您可能会选择另一个组合键,然后是Ctrl+ Enter,因为它至少LibreOffice
与跳转到新页面的快捷方式冲突。
解释
要gnome-terminal
从命令行打开新窗口并在其中运行命令,您可以使用:
gnome-terminal -e 'bash -c <command>'
但是,虽然命令将成功运行,但在您读取输出之前终端窗口将立即关闭。
这部分:
read line
Enter然后在命令运行后保持终端打开(直到您点击)。
其他命令
这样,您可以在终端中运行任何(复杂)命令,而无需立即关闭它:
$ gnome-terminal -e 'bash -c "wmctrl -d; read line"'
将输出(如果wmctrl
已安装):
按下后Enter终端将关闭。
2. 在当前活动的 gnome-terminal 窗口中运行命令
当然你可以在快捷键下放置一个简单的单行代码(假设您已经xdotool
安装):
xdotool type "<command>"
但是这会输入命令盲目地, 在任何应用程序,以及打字该命令不是最干净的选项。
因此,下面的小脚本:
- 查看活动窗口是否为
gnome-terminal
窗口(通过其 pid) - 如果是这样,糊状物活动窗口中的命令
gnome-terminal
,按下Return。
如果没有,脚本将执行没有什么,这样它就不会粘贴到其他应用程序中。
由于脚本将目标命令作为参数,因此您可以在多个快捷方式下放置多个命令。
剧本
#!/usr/bin/env python3
import subprocess
import sys
import time
app = "gnome-terminal"
s = (" ").join(sys.argv[1:])
def get(cmd):
return subprocess.check_output(cmd).decode("utf-8").strip()
def front(app):
try:
# see if gnome-terminal is running at all (raising error if not)
app = get(["pgrep", app])
except subprocess.CalledProcessError:
app = False
if app:
# if so, see if the active window belongs to gnome-terminal comparing pids)
active = get(["xdotool", "getwindowpid", get(["xdotool", "getactivewindow"])])
return True if app == active else False
if front(app):
# copy command to clipboard
cm1 = ["/bin/bash", "-c", 'printf "'+s+'" | xclip -selection clipboard']
# paste in terminal window
cm2 = ["xdotool", "key", "Control_L+Shift_L+v"]
# press return
cm3 = ["xdotool", "key", "Return"]
for cm in [cm1, cm2, cm3]:
subprocess.call(cm)
如何使用
脚本需要
xdotool
sudo apt-get 安装 xdotool
如果目录尚不存在,则创建一个目录,
~/bin
注销/登录或运行source ~/.profile
- 将上述脚本复制到一个空文件中,保存为
gterm_keys
(无扩展名)~/bin
,使其可执行
现在你可以运行任何命令,通过快捷键,在最前面的gnome-terminal
窗口中添加命令:
gterm_keys <command>
快捷键,如下所述[1]
答案3
如果使用 zsh 而不是 bash ,则以下行~/.zshrc
绑定git status
到ALT+ ENTER。
bindkey -s '^[^M' 'git status\n'
为了在 Bash 中获取ALT+ ENTER,我使用以下行:
bind -x '"\e\C-m":git status'