最近我在bash中切换到了vi模式,唯一想念的就是使用esc.获取上一个命令的最后一个参数。
我知道可以使用ctrl_来获取,但我总是会误按ctrl-。
是否有另外一个类似vi模式的替代方法呢?
我认为最接近你想要的解决方案是这个:
在你的 .bashrc 文件中,在 "set -o vi" 之后...
set -o vi
bind -m vi-command ".":insert-last-argument
这会告诉你的bash,在vi命令模式下使用“.”时调用“插入最后一个参数”操作。当然,这意味着你失去了VI的正常“.”功能;但如果你像我一样,你会更喜欢这种方式。
补充说明: 你可能还想让 Ctrl-A, Ctrl-E, Ctrl-W 和 Ctrl-L 起作用(这些是我最需要的):
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
bindkey -v '\e.' insert-last-word
set completion-ignore-case on
set show-all-if-ambiguous on
set show-all-if-unmodified on
set editing-mode vi
set keymap vi-insert
$if mode=vi
"\C-a": beginning-of-line
"\C-e": end-of-line
"\C-l": clear-screen
"\C-n": next-history
"\C-p": previous-history
"\C-w": backward-kill-word
"\e.": yank-last-arg
"\e_": yank-last-arg
$endif
!$
会给你上一条执行的命令的最后一个参数。感叹号有很多酷炫的用法,只需查看bash的man页面并搜索历史扩展即可。可以考虑使用 $_ bash 变量,怎么样?
我相信你仍然可以使用vi模式的等效方式,应该是“ESC + .”