我被说服(在 Stack Overflow 上)在 vi 模式下使用我喜爱的 bash。到目前为止,我已经习惯了它,并且我喜欢它。
然而我确实错过了一个功能:在 emacs 模式下,你可以按“ESC”键输入上一个命令的最后一个参数。(也就是说,先按 Esc 键,再按 . 键)
是否有默认绑定来在 vi 模式下插入最后一个参数?我找不到,我真的很想念这个命令……
答案1
没有默认值。当您切换到 vi 模式时,“yank-last-arg”的绑定(由“bind -p”列出)会消失。
bind '"\e."':yank-last-arg
将返回相同的绑定(或选择其他内容)
答案2
有 (vi-yank-arg),默认情况下映射到“_”。这应该可以满足您的要求(在命令模式下)。
答案3
不完全一样,但在任一模式下,您都可以输入!$
,它将被替换为上一个命令的最后一个单词。在手册。
答案4
在你的 .bashrc 中,添加以下内容:
set -o vi
bind -m vi-command ".":insert-last-argument
bind -m vi-insert "\C-l.":clear-screen
bind -m vi-insert "\C-a.":beginning-of-line
bind -m vi-insert "\C-e.":end-of-line
bind -m vi-insert "\C-w.":backward-kill-word
这些将恢复不仅 ESC-dot 的默认行为 - 而且还有 Ctrl-A、Ctrl-E、Ctrl-W 和 Ctrl-L。因此,您可以享受正常的 bash vi 模式,同时仍使用您熟悉和喜爱的快捷方式。如果您需要更多操作,只需检查“man bash”以找到您需要的 readline 操作的名称(例如“clear-screen”、“end-of-line”等)。