私は10年ほどbashを使用しており、!$を入力して最後の引数を繰り返すことができることに慣れてきました。
$ mkdir foo
$ cd !$
cd foo
(最後の行は、コマンドの評価結果を示すためにシェルによって出力されます)。同様に私はしばしば次のことをします:
$ make_sandwich
-bash: make_sandwich: Permission denied
$ Sudo !!
Sudo make_sandwich
私は本当に魚のシェルが好きですが、私の筋肉の記憶はかなり確立されています。魚に同等のものはありますか?同じコマンドを使用するように魚を設定できますか?
Alt-Up arrow 前のコマンドの最後の引数を提供します。後続のプッシュは、前の引数を循環します。
!!
に相当するものは見つかりませんでした。 Up その後 Ctrl-A
須藤!! (またはSudo bang bang)は、私が最もよく使用するコマンドの1つです。私はまだそれが問題ないプレーンな古いbashだけを使っています。魚がそれを正しく実装していないと聞いてすみません。少しグーグルで私はこれを見つけました:
function Sudo
if test "$argv" = !!
eval command Sudo $history[1]
else
command Sudo $argv
end
end
ここのスレッドにはさらに多くのオプションがあります: https://github.com/fish-Shell/fish-Shell/issues/288
私は fish-usersメーリングリスト でこの完璧な答えを見つけました:
function bind_bang
switch (commandline -t)[-1]
case "!"
commandline -t $history[1]; commandline -f repaint
case "*"
commandline -i !
end
end
function bind_dollar
switch (commandline -t)[-1]
case "!"
commandline -t ""
commandline -f history-token-search-backward
case "*"
commandline -i '$'
end
end
function fish_user_key_bindings
bind ! bind_bang
bind '$' bind_dollar
end
さらなる議論 fishのgithub wikiで
私はあなたと同じ問題があり、oh-my-fish
を使用して修正しました(これはfish
Shellのプラグインマネージャーです) https://github.com/oh-my-fish/ oh-my-fish 。次のコマンドでインストールできます:
curl -L https://get.oh-my.fish | fish
次に、次のコマンドでプラグインbang-bang
をインストールします。
omf install bang-bang
!!
をSudo !!
のコンテキストでのみ使用する場合、コマンドにSudoを付加する^s
(CTRL + s)へのキーバインディングを定義できます。
function prepend_command
set -l prepend $argv[1]
if test -z "$prepend"
echo "prepend_command needs one argument."
return 1
end
set -l cmd (commandline)
if test -z "$cmd"
commandline -r $history[1]
end
set -l old_cursor (commandline -C)
commandline -C 0
commandline -i "$prepend "
commandline -C (math $old_cursor + (echo $prepend | wc -c))
end
これにより、Sudo !!
の代わりに、コマンドを入力し、入力中にSudoを先頭に追加することができます。
Githubディスカッションでの Ahtiのコメントを参照してください