如何在 bash 中的 vi 模式下绑定键来串联 vi 动作和命令?

如何在 bash 中的 vi 模式下绑定键来串联 vi 动作和命令?

在我之前的问题中如何在 bash 的 vi 模式下切换光标下的单词大小写?,我问过如何将光标下的单词向上移动。命令是upcase-word。但不幸的是,这只能从单词开头向上移动到单词结尾。我想反过来,从单词结尾向上移动到单词开头。一个例子(假设括号[]作为光标位置)

1)bla bla someword[]

2)bla bla [S]OMEWORD

在 vi 编辑器中,我可以用这个来实现这一点: :inoremap uu <esc>viwUea 所以我尝试.bashrc这样做

-set o vi
bind '"uu":"\eB"upcase-word'

也就是说,我试图让规则移动B到单词末尾,然后应用命令upcase-word,但我不知道如何将它们串在一起。我现在知道它们可以单独工作(例如,这有效 - bind '"jk":vi-movement-mode',但串起动作和命令却不行。这可能吗?

答案1

所以我想到我需要先将命令绑定到某个键。就我而言,我需要有快捷键upcase-word

1) bind "\C-p":upcase-word
2) bind '"uu":"\eBi\C-pa"'

这里最重要的部分是映射命令的使用\C-p(它可以是任何其他序列)。一旦命令被映射,你就可以在 vi 移动序列的任何部分自由地使用它,但这里也需要提到你所处的模式。因为命令是在插入模式下映射的,所以你也必须在插入模式下使用它。也就是说,在我的移动序列(第二个命令)中,我首先退出插入模式(按\e),我做了我需要做的事情(移动到当前单词的末尾),但我必须再次进入插入模式(按i),只有这样你才能使用你的命令快捷方式。所以这是一个两步过程。希望它能对别人有所帮助。

相关内容