我使用了screen
相当多的数量,并且希望Home和End键简单地转到当前行的开头或结尾,而不是默认的,即转到当前窗口的屏幕整个历史记录的全局开始或全局结束。
在复制模式下执行bindkey -m -k "kh" stuff 0
andbindkey -m -k "kH" stuff $
可以达到预期的效果,但由于绑定也会影响命令输入模式,因此这会在键入命令时有效地禁用and-m
的使用,因为它会导致在光标移动时插入文字“0”和“$”在命令栏中。HomeEnd
有没有办法驯服这些键而不同时破坏它们来输入命令?
答案1
就在这里。虽然(目前)没有bindkey
影响的标志仅有的复制模式(也不是命令模式)仍然有办法获得类似的结果,尽管这意味着要学习新的语法。
修复
这markkeys
命令仅影响复制模式,不会影响命令模式行为。它对接受哪些字符比较挑剔,但总比没有好,并且在这种情况下完成工作:
markkeys "$=\205"
markkeys "\^=\201"
上面告诉screen
我们将行首和行尾以及信号(由Home和发送End)分别别名到^和$移动键。^
被写为转义\^
字符串,因为它通常用于引发转义序列,但我们指的是字面意思。
请注意,如果您希望Home一直到开头/左侧而不是仅到第一个可见字符,请替换markkeys "\^=\201"
为markkeys "0=\201"
.
另请注意,在复制模式下,您仍然可以使用g和G来获取窗口历史记录的全局开头或结尾。
我是如何找到修复的
尽管我仍然不知道列出此类事物的所有有用的十六进制转义的完整参考,但我能够通过在bindkey -m
屏幕内运行然后覆盖那里的映射来找到两个相关的,直到我打破了我的行为感兴趣。相关线路是:
kh -> stuff \201
kH -> stuff \205
在 irc://irc.freenode.net/screen 中的人员的帮助下,我了解到可以通过 shell 从 shell 中查找左侧代码man terminfo
,这些代码在 Tcap 列中列出为
Variable Capname TCap Code Description
string
---------------------------------------------------------------------------
key_home khome kh home key
...
key_ll kll kH lower-left key (home down)
将两个和两个放在一起并进行一些猜测以获得正确的绑定导致上述修复。