我刚刚开始使用 fish,我很喜欢它提供的 vi 键绑定。
不过,我想添加一个我在 vi 中使用的自定义键盘映射。我通常space+c
在可视模式下映射到 yan "*
(系统剪贴板)。如何在 fish 中添加这样的键盘映射?
我在 MacOS 12 上使用 fish 3.3.1。
编辑:我试过了
bind -M visual \x20c '"*y'
并收到以下错误
fish: Unexpected end of string, quotes are not balanced
还尝试用修饰符代替空格,得到了相同的结果。
答案1
有几种可能性:
首先,如果您当前正在使用"*y拉到系统剪贴板,那么您可以通过
bind
Fish 看到默认绑定是:bind -M visual -m default '"*y' 'commandline -s | xsel -p; commandline -f end-selection repaint-mode'
因此,您应该能够SPACEc通过以下方式重新创建该内容:
bind -M visual -m default \x20c 'commandline -s | xsel -p; commandline -f end-selection repaint-mode'
还有
fish_clipboard_copy
以下列出的功能文档,所以bind
另一种可能性可能是:bind -M visual -m default \20c fish_clipboard_copy
...但我认为您也需要使用相反的方法
fish_clipboard_paste
,而不是xsel
。
答案2
错误是因为绑定设置的命令无效。您无法"*y
在命令行中运行(如果您尝试使用fish -c '"*y'
,则会得到相同的错误)。
命令 tobind
只需要是命令即可。这就是 usingfish_clipboard_copy
正常工作的原因。至少在 fish 3.3.1 及之前版本中,无法执行其他键绑定。
答案3
我认为不可能对两个“普通”字符进行绑定。当文档bind
指的是“字符序列”,我认为它意味着零个或多个修饰符(ctrl、alt、shift)后跟一个“常规”字符。
我有和的绑定来!!
模仿!$
bash 对它们的操作,它看起来像这样:
function bind_bang
switch (commandline -t)[-1]
case "!"
commandline -t $history[1]; commandline -f repaint
case "*"
commandline -i !
end
end
function bind_dollar
switch (commandline -t)[-1]
case "!"
commandline -t ""
commandline -f history-token-search-backward
case "*"
commandline -i '$'
end
end
bind ! bind_bang
bind '$' bind_dollar
每个绑定函数都必须寻找前一个字符在命令行中。
我不使用 fish 中的 vi 模式(我早在 fish 有 vi 模式之前就开始使用它了,所以我的手指已经受过训练了)——我不确定你将如何实现粘贴。