Mat*_*eld 6 linux keyboard-shortcuts xorg vim copy-paste
我可以使用CMD-C
和CMD-V
来触发 X11 剪贴板功能吗?
我不想重新映射CMD
发送CTRL
。这不仅仅是关于人体工程学和肌肉记忆。现有的答案似乎忽略了一个事实,即它^C
是一个有效的、有用的字符,对许多程序都有其自身的意义。我想将窗口管理器命令(如复制/粘贴)绑定到在流行程序(如 Vim 和 Emacs )中还没有与它们相关联的几十年前约定的组合键。类似的东西CMD-C
。
我希望我的CTRL
钥匙继续做它的设计目的。
CTRL-C
应该继续向^c
我的终端发送一个字符以终止进程CTRL-V
应该继续发送一个^v
字符(Vim 中的转义序列)CTRL-X
应该继续发送一个^x
字符(vim 的“count
从光标下的数字中减去”的键)我想使用CMD
密钥向我的窗口管理器发送命令:
CMD-C
应该将突出显示的文本/对象设置为 X11CLIPBOARD
选择。CMD-V
应该从 X11CLIPBOARD
缓冲区粘贴- 无论那里有什么 - 到活动目标中,例如CTL-V
或 Edit->Paste 默认情况下几乎在每个 X 应用程序中都会这样做。MacOS 在系统范围内的快捷方式做得非常好。这需要一些肌肉记忆调整,但现在我意识到我可以将实际控制字符发送到我的应用程序,我再也回不去了。
我可以配置我的 linux box 来做同样的事情,至少是复制和粘贴吗?最大的症结是CTRL-C
/CTRL-V
用于复制/粘贴与 vim 键绑定冲突,但通常我想将终端控制字符与窗口管理器命令序列分开。
Jamie Zawinski 的站点上有一些关于 X11 如何处理复制/粘贴缓冲区的底层机制的有用文档。这正是我想用键盘直接控制的功能。我该如何配置?
这是一个难题,因为 Linux 上的许多应用程序都试图聪明地解决这个问题并重新实现自己的逻辑。还因为 X11 中剪贴板的概念更广泛,并且有多个具有不同行为的概念。
我的设置包括使用键绑定守护程序并在使用CMD-C
和时执行命令。CMD-V
到目前为止唯一的缺点是CMD-V
需要用户V
先释放才能应用粘贴。所以你不能“按住重复”它,也不能CMD
先释放(一开始可能会欺骗你的肌肉记忆)。
首先,创建一个如下所示的脚本:
#!/bin/bash
active_window_id=$(xdotool getactivewindow)
active_window_pid=$(xdotool getwindowpid "$active_window_id")
process=$(cat /proc/$active_window_pid/comm)
if [[ "$process" == "xterm" ]]; then
xdotool key Control_L+Shift_L+v
else
xdotool key --clearmodifiers Control_L+v
fi
Run Code Online (Sandbox Code Playgroud)
然后,有效配置文件的示例xbindkeys
:
"xsel -po|xsel -bi"
Mod4+c
"/path/to/your/script.sh"
Release+Mod4+v
Run Code Online (Sandbox Code Playgroud)
有效配置文件示例sxhkd
:
super + c
xsel -po|xsel -bi
@super + v
/path/to/your/script.sh
Run Code Online (Sandbox Code Playgroud)
您也可以使用 WM 配置来映射命令,并映射其他命令,例如CMD+A
“全选”、CMD+X
剪切等。