シェルで前のコマンドを呼び出す最後に渡された引数を入力またはALT+.
使用します。!$
これはいつも使用していますが、前の命令を削除するとどうなりますか?
$ do-something foo a_long_file_name &
a_long_file_name
アンパサンドの代わりにヒントを取得する方法は?
答え1
\e-\e.
(またはalt / optionを押しながら-
).
最後の単語から2番目の単語を挿入します。
同様に\e-2\e.
、最後から3番目の単語を挿入してから\e2\e.
3番目の単語を挿入します。
答え2
履歴拡張機能を使用すると、前のコマンドの単語にアクセスできます。ここで、!:n
nはコマンド名で0から始まります。この場合!^
は!:1
。!:2
$ echo foo bar &
[1] 10750
foo bar
$ echo !:2
echo bar
bar
[1]+ Done echo foo bar
答え3
あなたは$_
。
echo 'hey there' &
echo "$_"
出力
hey there
hey there
答え4
GlennとLaurieの答えは正確ですが、私の意見では入力が多すぎます。最後に、私は次の解決策を思い出しました。C-j
前のコマンドの引数(アンパサンドを除く)を最後から最初に繰り返します。これは非常に実用的です!実行方法は次のとおりです。
次のbashスクリプトを作成します。
#!/bin/bash
cj_hist=$(builtin history | tail -n1)
cj_num=$(cut -f1 -d\ <<< $cj_hist)
if [[ $cj_old_num -eq $cj_num ]]
then
cj_killw='\x17'
else
cj_args=$(cut -f3- -d\ <<< $cj_hist)
cj_args=${cj_args%&}
cj_args=($cj_args)
cj_cnt=0
cj_killw=''
fi
[[ $cj_cnt -le 0 ]] && cj_cnt=${#cj_args[*]}
let cj_cnt--
if [[ $cj_cnt -eq -1 ]]
then
bind '"\ez":""'
# bind -m vi-insert '"\C-o":""'
else
bind '"\ez":"'$cj_killw${cj_args[$cj_cnt]}'"'
# bind -m vi-insert '"\C-o":"'$cj_killw${cj_args[$cj_cnt]}'"'
fi
cj_old_num=$cj_num
これを〜/.bashrcに入れてください:
bind -x '"\ew": source ~/foo.sh' # ~/foo.sh is the script's path
bind '"\C-j":"\ew\ez"'
# bind -x '"\C-h": source ~/foo.sh' # vi-users: no mess
# bind -m vi-insert '"\C-j":"\C-h\C-o"' # with escapes
注:スクリプトをインポートしているため、一般的ではない変数名を使用する必要があるため、プレフィックスcj_
。もちろん、他のプレフィックスを使用することもできます。