我set -o vi
在 bash 中使用设置。这里的快捷方式Alt+.
(回顾上一个命令的最后一个参数)在 emacs 模式下不起作用,那么 vi 的等效项是什么?
答案1
有多种方法可以获取最后一个命令的最后一个参数:
1. inputrc:插入最后一个参数和抽出最后一个参数
将以下代码复制到您的~/.inputrc
文件中
set editing-mode vi
# Insert Mode
set keymap vi-insert
"\e.":yank-last-arg
"\e_": yank-last-arg
您可以使用我的 inputrc 文件。这是 inputrc 手册insert-last-argument
和yank-last-arg
2. 词指示符:!!:$ 和 !$
例如:
┌─ (marslo@MarsloJiao ~) ->
└─ # echo arg1 arg2 arg3 arg4 arg5
arg1 arg2 arg3 arg4 arg5
┌─ (marslo@MarsloJiao ~) ->
└─ # echo !$
echo arg5
arg5
┌─ (marslo@MarsloJiao ~) ->
└─ # echo arg1 arg2 arg3 arg4 arg5
arg1 arg2 arg3 arg4 arg5
┌─ (marslo@MarsloJiao ~) ->
└─ # echo !!:$
echo arg5
arg5
┌─ (marslo@MarsloJiao ~) ->
└─ # echo arg1 arg2 arg3 arg4 arg5
arg1 arg2 arg3 arg4 arg5
┌─ (marslo@MarsloJiao ~) ->
└─ # echo !!:^
echo arg1
arg1
┌─ (marslo@MarsloJiao ~) ->
└─ # echo arg1 arg2 arg3 arg4 arg5
arg1 arg2 arg3 arg4 arg5
┌─ (marslo@MarsloJiao ~) ->
└─ # echo !!:2-4
echo arg2 arg3 arg4
arg2 arg3 arg4
的手册外壳字指示符显示:
!!:$
designates the last argument of the preceding command. This may be shortened to !$.
0(零)
The 0th word. For many applications, this is the command word.
n
The nth word.
^
The first argument; that is, word 1.
$
The last argument.
%
The word matched by the most recent ‘?string?’ search.
XY
A range of words; ‘-y’ abbreviates ‘0-y’.
*
除第 0 个单词外的所有单词。这是“1-$”的同义词。使用 ' 不是一个错误' 如果事件中只有一个词;在这种情况下,将返回空字符串。 X
Abbreviates ‘x-$’
X-
Abbreviates ‘x-$’ like ‘x*’, but omits the last word.
3、Shell特殊参数:$_
例如:
┌─ (marslo@MarsloJiao ~) ->
└─ # echo very-very-very-very-very-long-argument
very-very-very-very-very-long-argument
┌─ (marslo@MarsloJiao ~) ->
└─ # echo $_
very-very-very-very-very-long-argument
┌─ (marslo@MarsloJiao ~) ->
└─ # ls /usr/local/etc/
┌─ (marslo@MarsloJiao ~) ->
└─ # cd $_
┌─ (marslo@MarsloJiao /usr/local/etc) ->
└─ #
在手册中Shell 特殊参数:
_
(下划线。)在 shell 启动时,设置为用于调用在环境或参数列表中传递的 shell 或正在执行的 shell 脚本的绝对路径名。随后,在扩展后扩展至上一个命令的最后一个参数。还设置为用于调用执行的每个命令并放置在导出到该命令的环境中的完整路径名。检查邮件时,该参数保存邮件文件的名称。
答案2
在之后添加此行set -o vi
:
bind -m vi-command ".":yank-last-argument # or insert-last-argument
然后你可以像在 emacs 模式中一样使用Alt+ 。.
或者使用历史扩展,在两者中工作:
!$:p