在我之前的问题中如何在 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
),只有这样你才能使用你的命令快捷方式。所以这是一个两步过程。希望它能对别人有所帮助。