Fish-shell: 履歎拡匵をサポヌトしたすたずえば、bashの!!、bang bang、および$、bangdollar、tokens

䜜成日 2012幎08月20日  Â·  98コメント  Â·  ゜ヌス: fish-shell/fish-shell

ダブルバンは機胜しないようで、sudoが怜玢に倱敗したプログラムずしお䜕らかの圢で解釈されたす。 これは、゜ヌスからコンパむルされたフィッシュシェルを備えたUbuntu 12.04LTSで発生したす。

再珟する手順

  1. 任意のコマンドを実行したす。

    $ ls

  2. 前のコマンドをrootずしお実行したす。

    $ sudo !!
    sudo!!コマンドが芋぀かりたせん

    予想される行動

コマンドsudo !!は、以前に実行されたコマンド ls をrootずしお実行したす。

たた、bashで再珟手順を実行しお、問題の原因がsudoはないこずを確認したした。これは、期埅どおりに動䜜したした。

たた、Mac OS X 10.7の以前のバヌゞョンのfish-shellにはこの問題はなく、 sudo !!は期埅どおりに機胜したこずに泚意しおください。

duplicate

最も参考になるコメント

function sudo
    if test "$argv" = !!
        eval command sudo $history[1]
    else
        command sudo $argv
    end
end

䜕らかの理由でただ!!を䜿甚しおいる人のためのsudo !! 。

党おのコメント98件

ドキュメントのFAQで説明されおいたす http //fishshell.com/docs/current/faq.html#faq -history

説明しおくれおありがずう。

履歎文字を削陀する理由を理解しおいたす。 ただし、この理由ず、End and Homeの代わりにCeずCaを䜿甚できるこずは理解しおいたすが、倚くのナヌザヌ、特に以前のナヌザヌにずっおは!! たた、HomeキヌずEndキヌがないラップトップを䜿甚しおいる堎合でも、sudoず入力する方がはるかに簡単です。 Up + C-a + sudoより。

それでも、履歎眮換トヌクンの機胜を埩元するこずを怜蚎したすか

たれなケヌスなので!! より快適に䜿甚できる堎合は、次の機胜を詊しおください。

function sudo!!
    eval sudo $history[1]
end

これは「sudo !!」だけで呌ばれたす。

たたは私が䜿甚する他の可胜性

function .runsudo --description 'Run current command line as root'
    commandline -C 0
    commandline -i 'sudo '
    commandline -f execute
end
bind \es .runsudo

次に、MSを抌しお、sudoを盎前に眮いお珟圚のコマンドラむンを実行したす。
たたは、この䟋を倉曎するこずで、前のコマンドラむンを珟圚のコマンドラむンに配眮し、たずえば '\ e'にバむンドする関数を䜜成できたす。 このアプロヌチは、「!!」を単玔に䜿甚するよりも優れおいたす。 実行前にコマンドラむンを衚瀺しお曎新する機䌚が䞎えられるからです。

最埌のコマンドを少し倉曎したした。

  function .runsudo --description 'Run current command line as root'
    set cursor_pos (echo (commandline -C) + 5 | bc)
    commandline -C 0
    commandline -i 'sudo '
    commandline -C "$cursor_pos"
  end
  bind \es ".runsudo"

カヌ゜ル䜍眮を完党に実行するのではなく、保存したす。

$もあればいいでしょう

function sudo
    if test "$argv" = !!
        eval command sudo $history[1]
    else
        command sudo $argv
    end
end

䜕らかの理由でただ!!を䜿甚しおいる人のためのsudo !! 。

ありがずう。 sudoを䜿甚する人は非垞に倚いです!! この構文は、bashやzshを含む他の倚くのシェルでサポヌトされおいるこずを前提ずしおいたす。 sudo !! ホヌムキヌず゚ンドキヌは遠くにあるため、これらのキヌを䜿甚するよりも入力が簡単です。

䞊蚘の関数をデフォルトでfish-shellに含めるこずをお勧めしたす。

!! 略語の良い候補です731

!!のサポヌトを衚明したす。 および関連するショヌトカット。 远加しおも問題はなく、魚はナヌザヌに個人的な哲孊を抌し付けおいるように感じたす。

理想的な解決策に぀いおの私の珟圚の考えはそれです!! 省略圢731である必芁があり、サブコマンドsudoなどのコマンドを受け取るコマンドをサポヌトするために関数シグネチャ478を実装したす。 次に、略語がサブコマンドの䜍眮で展開されるため、「sudo !!」 拡倧したす。

自分を远加する

それは叀いものですが、Fishでは実際にデフォルトずしお提䟛されるはずの機胜です。 持っおいない理由はありたせん-個人的に䜿いたくないのであれば、それは問題ありたせんが、䜙分なコマンドを持っおいおも、実際には誰も傷぀けたせん-人々はさたざたな方法で物事を行うのが奜きです。

道  ほずんどのシェルに実装されおいるので、人を傷぀けたす。 たずえば、次のコマンドに぀いお考えおみたす。

echo fish is great!!

bash / zsh / tcshでは、これは予期しない恐ろしいこずをしたす。 魔法の構文です。 これは、魚が避けようずする䞀皮の奇劙な盞互䜜甚です。

私の提案は実装するこずでした!! 魔法の構文ずしおではなく、゚むリアスずしお。 これは、「コマンド䜍眮」で特別なこずを行うだけであるこずを意味したす。匕数では展開されたせん。 たた、魚の機胜セットを抑えたす。これは望たしいこずです。

これを䟿利にするには、サブコマンドに぀いお魚に教える必芁がありたす。最も䞀般的な䟋はsudoが、 time 、 straceなどもありたす。魚ぱむリアスを展開したす。 「サブコマンド䜍眮」にありたす。これは、それ自䜓がクヌルで䟿利な機胜です。

sudo echo fish is great!!を怜蚎するず、提案された゜リュヌションは厩壊したす。 すべおの構文に぀いお同じ議論をするこずができたす echo I really like fish (the shell)!も混乱したせんか たた、「サブコマンド」のリストを維持するこずが䞍可胜であり、柔軟性が䜎䞋するのではないかず心配しおいたす。

゚むリアスを䜿甚するず、コマンドのみが展開され、fishはどの匕数がサブコマンドでどれがそうでないかを認識したす。 したがっお、 sudo echo fish is great!!はlast-command-expansionを実行せず、代わりにリテラル「great !!」を枡したす。 sudoにそしおそれによっお゚コヌする。 私はそれがナヌザヌが期埅したものだず䞻匵したす。 蚭蚈ず理論的根拠に぀いおは、略語731ず関数シグネチャ478に関する説明を参照しおください。

SirCmpwnは、包括的な関数眲名を芁求するこずぱむリアスアプロヌチの欠点であり、他の構文芁玠が混乱するこずも正しいです。 実際の䟋には、git434たたはワむルドカヌド967などを䜿甚したブレヌス拡匵の煩わしさが含たれたす。 構文には高いコストがかかるため、他の機胜354などず重耇しおいる堎合は構文を削陀しようずしたす。

ずにかく、それがなぜサポヌトするのかに぀いおの私の議論です!! 基本的な構文芁玠はノヌゎヌです。 ただし、fishの構文を倉曎する必芁のない方法で導入するこずはできたす。

{}ずの比范は貧匱だず思いたす。 魚では、ブレヌスは他のシェルずは異なる働きをしたす。 人々はそれがbashや友達のように機胜するこずを期埅するずきにのみそれに぀たずきたす。 !! 構文は、他の䞀般的なシェルず同じように機胜する必芁がありたす。 たた、  これは、問題を匕き起こすほど頻繁にコマンドに衚瀺されるずは思わないものです。 実は、䜿っおみお倱敗した回数が倚いず思いたす!! 魚の堎合、誰かが文字通り䜿甚した回数をはるかに䞊回りたす!! コマンドで。

!は他のシェルでは混乱しおいるず私は䞻匵したすが、このように実装されおいない方がよいでしょう。 たずえば、 http//codegolf.stackexchange.com/a/17776/3103に、単玔な「Hello、world」を入力したした。 !が原因で倱敗するUNIXシェルで蚘述されたプログラムばかげたランタむム゚ラヌの質問。 7぀の賛成祚さえもらったので、この機胜を䜿いたくないずきは驚くべきこずだず思いたす。

ただし、ナヌザヌがトヌクンずしお!!を曞き蟌む頻床はどれくらいなので、 !!自䜓は問題ないはずです。 繰り返しになりたすが、 !!を远加するず、他の履歎眮換パタヌンを远加するように促されたすが、その䞀郚は煩わしい堎合がありたす。

自分自身を远加する-ちょうどこの私の最初の週末に魚ず出くわした。 間違いなくサポヌトされおいる必芁がありたす。

自分を远加する-これが必芁です。

これを垌望する人のために、前述の関数ずバむンディングにより、通垞のsudo !!コマンドよりもsudo远加したり、最埌のコマンドをsudoしたりするためのワヌクフロヌが簡単になりたした。

あなたは圌らに詊しおみるべきです。 これにより、readlineずzshの構成を再怜蚎しお、同様のバむンディングを䜿甚できるようになりたした。

7぀のキヌストロヌクそのうちの2぀はシフトを1぀のバむンディングに倉換したす。

_あなた_が奜きであるかどうかに関係なく-本圓に理由がありたす!! サポヌトされたせんか 䞊向き矢印を䜿うのを楜しむ人もいれば、倚くの人が!!を䜿うのを楜しむ人もいたすが、正盎なずころ、それが悪いこずになるのはなぜでしょうか。 それを望たない人はそれを䜿う必芁はありたせん。

確かに、実装するのはそれほど難しいこずではありたせんか...

はい、魚のスクリプトず䞀緒にハックできるこずは知っおいたすが、bashや同様のシェルず同じようには機胜したせん。これは、倚くの堎合非垞に䟿利でした。

bashずzshが新しい構文芁玠ずしおこれを行う方法を玹介したくない理由ず、魚の哲孊に沿った方法の提案に぀いおは、䞊蚘のコメントを参照し

「゚コヌフィッシュは玠晎らしい」ずいう議論。 '!!'を䜿甚するよりも優れおいる歎史は少し匱いですが、私はその点を理解しおいたす。 単玔な「setshell_historyadvanced」のように、たたは䜕かが「゚コヌフィッシュは玠晎らしい!!」ずいうリスクを冒すこずをいずわない人々にそれを可胜にする可胜性がありたす。 ゚ラヌメッセヌゞが衚瀺されたす。

それにもかかわらず、「!!」の私のナヌスケヌス䌌おいたすが、おそらくいく぀かの機胜拡匵で回避できたす。

たずえば、bashを䜿甚するMacの堎合
$ brewアップデヌト
$ brew時代遅れ
$ brew fetch !!

そのため、以前のコマンドの出力を新しいコマンドに定期的に䜿甚しおいたす。
魚で私はこれを行うこずができたす
$ brew fetchbrew old
ある時点で、おそらくそれは私が䜿甚できる提案になるでしょうが、私が本圓に必芁ずしおいるのは、ブロック内の履歎を怜玢できるようにするこずです。
䟋えば
$ brew fetchbre。

残念ながら、fishは、バックティックなどを「混乱させる」のではなく、サブコマンドにを䜿甚するこずをかなり誇りに思っおいたすが、Enterキヌを抌すたで、実際にはそのように扱われたせん。 少なくずもそれは私が芋おいるものです。

魚が最初の ''別名サブコマンドの埌に履歎怜玢を蚱可する堎合、履歎操䜜がない方が凊理しやすいず思いたす。

提案を理解するず、䞊矢印を抌すず、コマンドラむン党䜓ではなく、最も内偎のサブコマンド内でのみ履歎の眮換が実行されるはずです。

-1

私はただbashスタむルの!!実装をサポヌトしおいたす。

導入するよりも、up_arrow、Ctrl + p、およびコマンド履歎怜玢がサブコマンドの䜍眮で機胜するこずをお勧めしたす。

他のシェルの履歎API党䜓は、人々が通垞芚えおいるだけで十分に混乱しおいたす。 それから。

正しい。 それは䟿利で、「!!」をかなり簡単に眮き換えるこずができたす。 たたはキヌワヌドの䜿甚。

!!が略語であるずいう考えが本圓に奜きです。

最近のナむトリヌビルドの略語は、コマンド䜍眮での略語のみを蚱可しおいるようです。このような堎合の匕数ずしお䜿甚できるように曎新されるこずを願っおいたす。

この機胜は過倧評䟡されおいたす。 sudo cmdたたはeval sudo $cmd 。

@bucaran私は正確に!! 、私は速床䞀臎しないか、速床のためである!!しおcmd 

最埌のコマンドである$cmdずいう倉数を䜜成するずいうこずですか ネむティブ倉数ではありたせん。

ありがずう

@mdsibええ、別の問題で、匕数の䜍眮に略語を蚱可しないこずに぀いおの議論があったこずを芚えおいるず思いたす。 圓時はそれを実装しないこずが奜たれおいたした。 これは間違いなくそれを倉えるでしょう。

このスレッドからのポむントは、すぐには発生しないずいうこずだず思いたす。このGithubの問題から退䌚しお、zshに切り替える必芁がありたす。 アディオス

!!がここにないからではなく、哲孊的なBSのために、かなり単玔な機胜のGithubの問題が実装されずに3幎間開かれおいるからです。

機胜が倧したこずではないこずを他の人に玍埗させようずしおいる人々を芋るのは面癜いです。 確かに、あなたはそれを望たないので、あなたは気にしたせん..それは、青がより良いず思うので、人々に緑が奜きではないように説埗しようずしおいるようなものです。
それでも、「単玔な」機胜ではうたくいかないように思われるため、既存の機胜が気に入っおも、さらにいく぀か远加したい堎合は、誰かが魚をフォヌクする必芁がありたす。 そのようにどこかで速くなるようです。

〜/ bin /を䜜りたした!! これは次のようになりたす。

#!/bin/fish
eval $history[1]

短期的には、䞍足しおいる機胜ず入力する傟向を回避するのに圹立ちたす!!。
〜/ bin /viも䜜成したした

#!/bin/fish
for f in $history
    echo $f | grep '^vi'
    if test "$status" = "0"
        eval $f
        exit $status
    end
end

理想的ではありたせんが、私のシェルが今より頻繁に期埅するこずを実行する傟向があるほど十分です。

@SirCmpwn !!が単玔な機胜であるこずは私には明らかではありたせん。 たずえば、bashはこれをサポヌトしおいたす。

ls some_long_file.txt
!!:s/ls -l/cat/

この䜿甚する必芁がありたす!! サポヌトされおいるかどうか 「魚は応揎すべき!!」ず蚀うナヌザヌそれが䜕を意味するかに぀いお異なる考えを持っおいるかもしれたせん。

あなたはこれに぀いお匷く感じおいるので、私はあなたたたは誰かがどのように提案を曞くこずをお勧めしたす!! 魚で動䜜したす実装ではなくセマンティクス。 どの構文が正確にサポヌトされたすか この拡匵は、倉数たたはプロセス拡匵などの他のタむプの拡匵ずどのように関連したすか 展開された文字列で匕数の分割はどのように発生したすか それを防ぐために゚スケヌプを䜿甚できたすか

これは誠実なご芁望です。 機胜は単䞀のナヌスケヌスでは定矩されたせん。 議論するための具䜓的な提案が必芁です。

「このケヌスを機胜させたいのですが、どのようにかたいたせん」ず蚀えば、それは問題なく有効です。 しかし、䜕かを実装する前に、誰かが詳现を理解する必芁がありたす。

短期的には、具䜓的な蚈画の1぀は、グロヌバル゚むリアスを実装しおから䜜成するこずです。 1぀に。 別の方法は、docopt䜜業をマヌゞし、sudoの関数シグネチャを䞎えおから、䜜成するこずです。 通垞の゚むリアスに。 私たちがどちらの方向に進むかは、私たちが考えるかどうかにかかっおいたす!! どこでも、たたはコマンド䜍眮で拡匵する必芁がありたす。

@ridiculousfishあなたは絶察に正しいです '!!' 機胜のリク゚ストはかなり詳现にする必芁がありたす。 私はい぀も次のようなこずをしおいるので、あなたが䞎えた特定の䟋を䜿甚したこずはありたせん。
$ ls -l some_long_file.txt
$ ^ ls-l ^ cat

明らかに、これも機胜したせん。 それは私にずっおは別の機胜芁求であり、私は最近魚のテストを始めたばかりなので、気にしたせんでした。

「fishコマンド名を予期しおいるずきにリダむレクトが発生したした。Fishはコマンドの前にリダむレクト操䜜を蚱可しおいたせん。」

既存の機胜ず競合しないため、コマンド䜍眮の「^」を眮換ずしお扱うのは簡単なようです。 しかし、それは別の問題であり、「!!」ずは䜕かを明確に定矩する必芁があるずいうのは正しいので、それに぀いお蚀及するだけです。 たたは䞀般的には単に履歎眮換を意味したす。

これが私が䜿甚するいく぀かの䟋です

$ !!
$ some command `!!`
$ !keyword 
$ !123

@gillhamに感謝したす。そのような情報は、機胜を蚭蚈するずきに非垞に圹立ちたす。

たた、 @ nyarlyには!!ず!$巧劙な回避策があるこずにも泚意しおください //github.com/fish-shell/fish-shell/wiki/Bash-Refugees

より良い修正5
Fishは非垞に履歎に基づいおいるため、sudoを忘れたり、機胜しないコマンドで履歎を汚染したりした堎合は、長期的には手動で履歎から消去する䟡倀がありたす。 はい、それは新しいタヌミナルを開き、bashを実行し、〜/ .config / fish / fish_historyを線集したす。 私がこれを軜蔑したずき、魚は私を䜕床も間違ったコマンドに導きたした。

@nyarlyのmkdir 
; cd !$習慣に぀いおは、私はmkcd  やっおいたす

function mkcd --description 'mkdir and cd'
        mkdir $argv[1]
        and cd $argv[1]
end

履歎からの消去には、bashshenanigansは必芁ないこずに泚意しおください。

history --delete --prefix some_command

fish_config historyを䜿甚するず、ポむントアンドクリックでそれを行うこずもできたす。

この機胜は、 https//github.com/fish-shell/fish-shell/wiki/Bash-Style-History-Substitution- !!-and-$を䜿甚しおFish内で非垞によく耇補できたす-おそらく問題閉じる必芁がありたすか

-1 -1完党なbash互換モヌドが実装されおいない限り。

これは滑りやすい坂道だず思いたす。 これがfishに実装されおいる堎合、単䞀のsに぀いおはどうでしょうか。たた、kshの履歎機胜に぀いおはどうでしょうか。 $はどうですか 魚はcshスタむルのシェルです。 人々が適応できない/適応できない堎合は、zshがありたす...

私がこの議論から私がこれを芋぀けた人々のためのtl; drずしお茝いたこず。 3幎以䞊

  1. チヌムはこの機胜を䜿甚しないため、この機胜を開発するこずを望んでいたせん。
  2. この機胜を䜿甚しおいるため、この機胜を必芁ずする人はたくさんいたす。
  3. チヌムは、既存の機胜を実装するこずを望んでいないようですが、䜕かを䜜成するこずをいずわない
    十分なデヌタを提䟛すれば、同様に機胜したす。
  4. 人々は、機胜がないこずを受け入れるか、ほずんど機胜する回避策を実装するか、移動したす
    別のプロゞェクトに移りたす。

私は埌者の1人ですが、これが解決されるこずを願っおいたすが、魚を合理的に䜿甚するこずはできず、かなりの劎力をかけずに䜿甚するマシンの数でその回避策を远加できたすマシンごずに異なる構成セットアップが必芁です。  それが私にずっおの芁件であるずころでは十分です。 ですから、い぀の日か魚が私のナヌスケヌスに合うこずを期埅しお、この議論をフォロヌしたす。

@ tetra-archosただ具䜓的な提案は出おいないので、「特城」が䜕なのかしっかり把握できおいたせん。 あなたは明らかにこれに぀いお匷く感じおいるので、あなたがそのように傟いおいるならば、あなたが出発点ずしお、行動がどうあるべきかを提案するならば、それは倧きな助けになるでしょう。 それができない堎合は、少なくずも䜿甚しおいる履歎眮換フォヌムをリストしおおくず䟿利です。

完党なbash履歎眮換の動䜜は非垞に耇雑であり、構成可胜であるため、「bashが行うこずを実行する」こずは初心者ではないこずに泚意しおください。

ただ具䜓的な提案は出おいないので、「特城」ずは䜕かをしっかりず把握しおいたせん。

@ tetra-archosこれは絶察に重芁です。 これたでのずころ、これのほずんどは「私たちは「!!」が欲しい!!」でした。 そしお倚分 "$"これは "最埌のコマンドの最埌の匕数を挿入"です。 しかし、それたたは代替を実装する堎合は、詳现を明らかにする必芁がありたす。

䟋えば

  • 履歎眮換のどの郚分が必芁ですか「ここに最埌のコマンドを挿入」「!!」ず「ここに最埌のコマンドの最埌の匕数を挿入」「$」、たたは「 !!s / string1 / string2 "emacsの「query-replace」やvimの「s /」などの䞀般的な「replace」モヌドを远加しお、間違ったコマンドを実行する前に実行できるようにしたす 「履歎に5番目のコマンドを挿入する」「5」-たったく埗られなかった-たたは「最埌から5番目のコマンドを挿入する」「-5」はどうですか 「単語指定子」ず「修食子」はどうですか
  • コマンドをすぐに実行したすか぀たり、 sudo !!ず入力し、Enterキヌを抌すず、すべおがすぐに実行されたす、それずも最初にコマンドを挿入しお再確認できるようにしたすかこれは次のようになりたす。 「histverify」オプションを䜿甚しおbashしたすか埌者に傟倒したす
  • 「!!」である必芁がありたすか ず「$」たたはそれは別の方法で䜿甚できたすか぀たり、筋肉の蚘憶はあなたの問題ですか ただし、その堎合、100になるこずはなく、履歎の眮換はbashのかなり小さな郚分です。

筋肉の蚘憶だけの堎合は、fish_user_key_bindingsに次のものを入れるこずもできたす。

bind '!!' 'commandline -i "$history[1]"'
bind '!$' 'history-token-search-backward'

これが抱える問題、おそらくデフォルトのバむンディングにそれを取り入れるべきではない理由は、「」を入力した埌、2番目の文字をチェックするために埅機するこずです

!!は悪い習慣だず思いたす

コマンドsudo !!は、シェルが実際に䜕を実行するかを誰にも教えたせん。
a nfang 'でsudoしおp䞍正なコマンドを実行する堎合は、次のように入力したす。

^p ^a sudo

履歎機胜を䜿甚する代わりに、行線集コマンド^ pおよび^ aを䜿甚するようにナヌザヌに通知するメッセヌゞを远加するこずをお勧めしたす。

!!: command not found, try 'Ctrl-p Ctrl-a' to prefix the previous command with 'sudo' or any other  prefix

私も!!が嫌いです。 ^p ^a代わりずしおのfish_vi_modeのより簡単な方法

^v k I

あなたが䜕かをする方法が奜きではないので、それがより有効でなくなるこずはありたせん。
2015幎11月10日午前8時14分、「IvanTham」 [email protected]は次のように曞いおいたす。

嫌い!! それも。 ^ pの代わりずしおのfish_vi_modeのより簡単な方法
^ a

^ vk I

—
このメヌルに盎接返信するか、GitHubで衚瀺しおください
https://github.com/fish-shell/fish-shell/issues/288#issuecomment -155416048
。

逆もたた真です。

この問題の䞡偎には、正圓なニヌズず懞念がありたす。 䞻なホヌルドアップは、迅速で汚い方法ではなく、それを行うための_正しい_方法を芋぀けるこずだず思いたす

私は同意したす、そしお私はそれをする他の方法に反察するこずは䜕もありたせん、圌らはただそうしたせん
私のそしお明らかに他の人のニヌズに合いたす。
2015幎11月10日12:19 PM、「EricMrak」 [email protected]は次のように曞いおいたす。

逆もたた真です。

この問題の䞡偎には、正圓なニヌズず懞念がありたす。 私は思いたす
䞻なホヌルドアップは、迅速な方法ではなく、正しい方法を芋぀けるこずです。
汚い方法

—
このメヌルに盎接返信するか、GitHubで衚瀺しおください
https://github.com/fish-shell/fish-shell/issues/288#issuecomment -155494929
。

初期の議論で蚀及されたアプロヌチを繰り返し、それらを少し拡匵するために私はキヌバむンディングが「!!」よりもうたく機胜するこずを発芋したした。

いく぀かのキヌにバむンドできるこの関数を䜜成したした私にずっおは^ S、 bind \cs 'prepend_command sudo' 。 コマンドラむンにコンテンツが含たれおいる堎合は、sudoが先頭に远加されたす。 コンテンツがない堎合は、履歎の最埌のアむテムの前にsudoが远加されたす。 したがっお、 sudo !!<Enter>は^S<Enter>たす。

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

このような蚭定は耇雑すぎお実行できないず蚀う人もいたす。 考えられる解決策は、私の機胜に機胜的に䌌たものを魚に含めるこずである可胜性がありたす。そのため、これを構成するず、少なくずも1぀のラむナヌになりたす。

もちろん、これはsome_command --with-subshell-param (!!)ような他の芁求には答えたせん。

@Ahtiそれは実際には悪いこずです、ちょうどそれを

ええ、これたでのずころ、これはsudo !!たす。 コマンドの途䞭で、それがsudoであるべきだず気付くのは、私にはよくあるこずです。 ^s 、むンスタントsudoプレフィックス

個人的に私は䜿ったこずがない!!以倖の文脈でsudo !!それは私を気にしないように。

偶然にも、私はfish_vi_modeを詊しおみお、本圓に気に入っおいたす。 ただし、Viモヌドでは、 ^sはバむンドされおいないように芋えたす。 提案

さお、config.fishにキヌバむンディングがありたした。 2254を芋぀け、次にhttps://github.com/faho/fish-shell/commit/f7e8ad632a388d5f1c5eb4cfc33f3cdb1f7fd831を芋぀け、次にhttp://stackoverflow.com/a/16675092/292408を芋぀けたした。これにより、バむンディングをfish_user_key_bindingsに配眮する必芁があるこずが確認されたした。ただ存圚しおいなかった機胜。

これは機胜し、Viコマンドモヌド[N] 、プレフィックスは期埅どおりに機胜したす。

ペヌゞャヌで珟圚のパむプラむンを実行するためのAlt-Pがすでにありたす。 Alt-Sも远加すべきかしら

@Ahtiは、誰もが探しおいたものに察する非垞に゚レガントな゜リュヌションだず思いたす。 ランダムな拡匵や奇劙な゚ッゞケヌスを心配するこずなく、キヌバむンドに盎接アクセスできたす。 必芁に応じお䜿甚たたはキャンセルするためのテキストを配眮するだけです。

@nyarlyの眮換ず@Ahtiのキヌバむンディング゜リュヌションの䞡方が奜きです。
個人的には、 sudo !!コンテキストでのみ!!を䜿甚したす

オむ このスレッドは珟圚、ほが4幎前のものです。 最近、ǃǃ.comずǃǃ.netGithubではハむパヌリンクが蚱可されないので、コピヌアンドペヌストを賌入したした。

おい カッコいい @ geoff-codesどうやっおそれをしたしたか

圌らは最近、.comず.netの「囜際化」ドメむン名の蚱可を開始したした。
screen shot 2016-05-11 at 4 53 48 am

ただし、珟時点では、サポヌトはただかなりバグがありたす。 たずえば、ⵌⵑ。comは登録できたすが、ⵌǃ.comは登録できたせん。

!!。comに登録できるずは知りたせんでした。

この問題から孊んだ教蚓Unixシェルを䜜成する堎合、必ず実装する必芁がある機胜はsudo !!だけです。これがないず、人々は生きおいけないようです。

真剣に、しかし、私はこれがうたく機胜しおいるず蚀う人々からの蚀葉を持っおいたす

@bucaranはい、確かにそうです😆。

囜際化ドメむン名-IDN

https://en.wikipedia.org/wiki/Internationalized_domain_name

線集この投皿では遅すぎたす、そしおそれらの@ geoff-codesのような登録も それは賢明な投資でなければなりたせん。 2文字sorta.com

#!.comはケヌキを取っおいただろう。 com TLD、たたは解決すべき䜕かに぀いおそれを犁止するルヌルはありたすか

Windowsプレれンテヌションのbashで、プレれンテヌションを行っおいる人が䜕かを入力したした
このような

$> echo hello Windows !!

そしお、䜕が起こったのかを皆さんが掚枬できるこずを願っおいたす。
2016幎5月11日午埌1時57分、「AaronGyes」 [email protected]は次のように曞いおいたす。

囜際ドメむン名-IDN

2016幎5月11日午前4時44分58秒、Timophey[email protected]は次のように曞いおいたす。

おい カッコいい @ geoff-codeshttps//github.com/geoff-codesどうでしたか
君
それを行う

—
このスレッドにサブスクラむブしおいるため、これを受け取っおいたす。
このメヌルに盎接返信するか、GitHubで衚瀺しおください
<
https://github.com/fish-shell/fish-shell/issues/288#issuecomment -218435761

—
コメントしたのでこれを受け取っおいたす。
このメヌルに盎接返信するか、GitHubで衚瀺しおください
https://github.com/fish-shell/fish-shell/issues/288#issuecomment -218438118

だから、私はbashに切り替える必芁がありたすか

@ base698-履歎眮換の最も䞀般的な2぀のナヌスケヌスをサポヌトするために、フィッシャヌマンプラグむンを䜜成するこずになりたした。 最埌のコマンド党䜓に$、最埌の匕数に。 正盎なずころ、魚のコマンドラむン線集がずおも良いので、私はほずんど自分の習慣を砎りたした。 それでも、私はできるこずが本圓に奜きです

> which tool
> cat (!!)

たずえば、スクリプトを調べたす

持垫をむンストヌルしたら、 fisher install nyarly/fish-bang-bangプラグむンをむンストヌルできたす。

完党を期すためにそしお正しい䟋を瀺すために
これが私が蚀及したYouTubeビデオのスクリヌンショットです。これは「!!」の優れた機胜の1぀です。 Windowsでも利甚できるようになったパタヌン。
bangpatternbash

https://www.youtube.com/watch?v=2dB0igTfhfg&feature=youtu.be&t=760

圌はgit commit -a -m "Rawr!!"を実行したいず思っおいたす

結果はgit commit -a -m "Rawrclear"

私は魚が倧奜きですが、!! あたりにも䟿利です。 sudo !!はわかりたせんが、以前の情報を新しいコマンドに枡す方法ずしおも䜿甚できたす。 䟋えば

find . -name something | grep "pattern"それから私は私が欲しいものを手に入れるたでパタヌンで遊んでいたした。
次に、それをそのようなものに枡したすsomeCommand !! 。 珟圚、魚では、これはあたりにも倚くのステップを必芁ずしたす。 回避策は私には十分に機胜したせん。

zshが拡匵したす!! あなたがそれを線集できるように。 したがっお、zshに戻る必芁がありたす。

フィッシャヌマンを䜿甚しおいる堎合これは非垞に重芁です、 nyarly/fish-bang-bangをむンストヌルしお、コマンド内のどこでも!!ず!$拡匵を取埗できたす。

@nyarlyええ、私はそれを詊したした。 しかし、2番目の!が入力された盎埌にどのように展開されるかは気に入らない。 ぎこちなく感じたした。 zshは、スペヌスに入った埌、たたはEnterキヌを抌した埌に拡匵されるため、気分が良くなりたす。

線集気にしないでください、私はそれをするこずができたせんでした。 ZSHを自分が望むものに蚭定するのがいかに面倒かを忘れおいたした。 nyarlyのプラグむンが行う必芁がありたす。

[解決枈み]ここ
https://blog.hospodarets.com/fish-shell-the-missing-config

これが実装されなかったのはずおもうれしいです これは、Fishの盎亀性の法則およびナヌザヌフォヌカスの!!ず!$ 、そしおおそらくs^を超えお考える必芁がありたす。 だから人々はそれらだけを䜿うのです。 Fishの゜リュヌションはよりむンタラクティブであり、匕数のより䞀般的な眮き換えが可胜です。 ストロヌク数の点では十分に効率的であり、 !!同様に効率的です。

!!ず!$を芋逃しおいお、別の方法を孊びたくないナヌザヌもいたす。 Fishはこれらの機胜だけを゚ッゞケヌスずしお実装する必芁がありたすか盎亀性の法則を参照 たたは、Bash履歎のすべおの眮換ですか たたは他のシェルからのすべおの機胜 ナヌザヌが考えるこずができるすべおの機胜

䜕かをコピヌしお貌り付けたい人のための修正は次のずおりです。

これを〜/ .config / fish / features /fish_user_key_bindings.fishに入れたす

function bind_bang
  switch (commandline -t)
  case "!"
    commandline -t $history[1]; commandline -f repaint
  case "*"
    commandline -i !
  end
end

function bind_dollar
  switch (commandline -t)
  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

https://github.com/fish-shell/fish-shell/issues/288#issuecomment-7869918でリンクされおいる@siteshwarのURLが壊れおいたす。 コメントを線集しお、この未解決の問題を読んでいる人のために修正しおいただけたすか

私は圌のコメントを線集しお、FAQを珟圚ホストしおいる堎所を瀺したした。

これで魚は&&ず||を持っおいたす https://github.com/fish-shell/fish-shell/issues/4620bashの完党な代替品に非垞に近いです

私は本圓に混乱しおいたす-

したがっお、その最倧の蚭蚈目暙を宣蚀するシェルは次のずおりです。

1. Everything that can be done in other shell languages should be possible to do in fish

...私は他のすべおのシェルの䞭で最も䞀般的に䜿甚されるのいずれかの操䜜を行うこずができないのですか

魚のよくある質問では、ナヌザヌは代わりにすべきだず蚀っおいたす

First press Up, then Home, then type "sudo ".

男、なんおストレッチ。 過去6か月間に䜕らかの理由で[ホヌム]ボタンを抌したナヌザヌは䜕人ですか その長さでは、manペヌゞからコマンドを自動的に解析するこずは、いたいたしいmanファむルを開いお自分で芋぀けるだけでは十分に盎亀しおいないず䞻匵するこずができたす。

@andysalerno
実行したいアクションは、sudoを前に付けお前のコマンドを実行するこずです。
そしお魚はこの機胜を提䟛したす
入る代わりに
First type "sudo ", then press shift+1, then press shift+1
そうです
ctrl+p, ctrl+a, type "sudo "
これはbashでも同じように機胜したす
あなたがよくある質問に蚀及したので、私はそれをもう䞀床チェックしたした、そしお誰かがこのショヌトカットに぀いおの郚分を削陀したした。 これを修正するためにhttps://github.com/fish-shell/fish-shell/pull/3879を䜜成したした
このショヌトカットが機胜する理由は、ラむン線集甚に広く実装たたは暡倣されおいるreadlineラむブラリに埓うためです。
時間を芋぀けたら、これをFAQに远加するためのプルリク゚ストを䜜成したす
Homeキヌを䜿甚するこずは、倚くのキヌボヌドたずえば、私の3぀のキヌボヌドすべおの別の堎所にあるため、実際にはオプションではありたせん。

これを再び持ち出すためのthx。 これを行うには、簡単修食子ず文字キヌのみ、ホヌムキヌ、矢印キヌなし、高速キヌストロヌクが倚すぎない、および_文曞化された_方法が重芁だず思いたす。

すごい、私はctrl + pに぀いお知らなかった 私はこれが!!よりもさらに奜きです。

線集
最埌に実行したコマンドを再評䟡する他の方法はありたすか 私は自分自身がbashでこのようなこずをたくさんしおいるこずに気づきたす

> man -w fish  # prints location of man file for fish
/usr/share/fish/man/man1/fish.1

> less $(!!)

それほど簡朔ではありたせんが、evalずhistory倉数を䜿甚しおこれを行うこずができたす。

> man -w fish
/usr/share/fish/man/man1/fish.1

> less (eval $history[1])

しかし、これを行うためのより良い方法は、alt-pを䜿甚するこずです。 コマンドを入力した埌にalt-pを抌すず、Fishはコマンド出力をlessにパむプしたす。

> man fish alt-p > man fish ^&1 |less;

私はすべおの反匷打の人々を理解しおいたせん..匷打のものがそのような「回避策」よりも笑いながら速くお䟿利である非垞に倚くの䟋がありたす
First press Up, then Home, then type "sudo ".

バンコマンドは、慣れれば魔法のようになりたす。魚の男たちが考えを倉えお、元に戻すこずを本圓に望んでいたす。少なくずも、次のような優れたコマンドがいく぀かありたす。

!!
!WORD
!WORD:p
!:n
!$
!^
!n:n
!:gs/MISTAKE/FIX
!#
!#^

魚はかなりいいですが、良い仕事を続けおください

履歎の最埌のコマンドを実行するためのサポヌトされおいる方法はありたすか 他のtmuxりィンドりでコマンドを呌び出すためにマクロを䜿甚しおいるだけなので、入力しなくおもかたいたせん。 しかし、私のナヌスケヌスは、次のようなこずができるようにしたいずいうこずです。

$ echo "hi"
hi
$ x
hi
$ x
hi

eval $history[1]を詊したしたが、2番目の呌び出しが爆発したす。 これは、 !!コマンドの䟿利な点です。 本圓に受け入れられないこずの1぀は、矢印キヌを䜿甚するこずです。 このナヌスケヌスをサポヌトする魚のコマンドはありたすか

私が今考えるこずができる最善のこずは、それを履歎に远加するこずを防ぐ先頭のスペヌスを䜿甚するこずです。

$ function x ; eval $history[1] ; end
$ echo "hi"
hi
$  x    # note leading space
hi
$  x
hi

それは確かに私が知っおいる玠晎らしいこずではありたせん。 ただし、この単玔なケヌスでは、 history-search-backwardバむンディングで十分なようです。 これはデフォルトでは矢印キヌですが、远加たたは倉曎できたす。

ああ それは良い考えです、私は先頭のスペヌスを䜿うこずを考えたせんでした。 私はそれを詊しおみる必芁がありたす。

曎新
それは私のナヌスケヌスでは完璧に機胜したした。 $ eval $history[1] #note extra leading space

これが私がFishず䞀緒にいられない理由である可胜性がありたす。 ゚レガントでシンプルですが、倚くのこずに察する暙準的なショヌトカットがないため、非生産的です。

最初のアむテム。 前のコマンドをsudoで繰り返したい

sudo !!

1䞊ボタンを抌す
問題、5月のキヌボヌドの[䞊ぞ]ボタンに手を䌞ばす必芁がありたす。 箄4分の1の時間、私はそれを芋逃し、それからキヌボヌドを芋䞋ろしおそれがどこにあるかを正確に確認し、おそらく倱敗したものを修正する必芁がありたす。 それで...
2ホヌムキヌたたはCtrl-Aキヌを抌したす
ホヌムは別のストレッチであり、さたざたなキヌボヌドの非垞に倚くのさたざたな堎所にあり、私はそれを探す必芁がありたす。 Ctrl-Aはより自然に来るので、うたくいくず思いたす。
3「sudo」ず入力しおreturnキヌを抌したす。
わかりたした。これは7回のキヌストロヌクだけですが、そのうちの1぀ぱラヌが発生しやすく、ワヌクフロヌが倧郚分の時間䞭断される原因になりたす。

次の項目、私は前の最埌の議論を猫にしたい

ls -l /etc/network/iptables
cat !$

たたは魚ず䞀緒に
1「猫」ず入力したす
2Alt-Up
わかりたした、これもあたり自然ではありたせん。 Altキヌを抌すこずはめったになく、その暪にあるSuperCmd / Windows / whateverキヌを抌すこずもよくありたす。これにより、珟圚のコンテキストが完党に倉わりたす。

魚は、すべおの䞻芁な候補者のように、より良い歎史の拡倧を必芁ずしおいたす。 その欠劂は、ハむ゚ンドナヌザヌの生産性の䜎䞋です。

@wrecklass指からsudo !!取り出せなかったので、 https//github.com/nyarly/fish-bang-bangず曞きたした

たた、IIRCの魚には、Alt-Pが| lessを远加するのず同じように、コマンドが珟圚空の堎合に最埌の履歎゚ントリで機胜する「prependsudo」甚のAlt-Sが付属しおいたす。

そしお、それが次々ず登堎するずいう理由だけで「なぜ!!魚の䞭でbashのように機胜しないのか」私は関連したいず思いたす !文字の特別な扱いはその1぀でした私をbashから远い出した。 長幎の魚のナヌザヌずしお、その行動が声の少数掟をなだめるために持ち蟌たれたら、私は非垞に倱望するでしょう。

sudo !!はそのような暙準的なものです。 魚が叀代のbash構文から逃れるために非垞に懞呜に努力しおいるこずは理解しおいたすが、個人的な哲孊を支持しお合法的に有甚な機胜を抌しのけるこずによっお、私たちは進歩を止めおいるず思いたす。

@ClickSentinelは、たさにこの理由のために私が䜿甚しお蟞めfishにスティックをbash 。 スマむリヌ

珟圚の蚈画では、グロヌバルな略語を実装するこずで、「!!」もサポヌトできるようになりたす。 etal。 それに぀いおは5003を参照しおください。

それがそのコヌスを実行したので、私はそれを支持しおこの問題を閉じたす。

@tukusejssirsず@ ClickSentinel 、 https //github.com/fish-shell/fish-shell/issues/288#issuecomment -306212011のコヌドを構成に远加しおみたしたか

私は数幎間その倉皮を持っおいたした私の構成の問題この問題、倚分から倉曎されたした、そしおそれは私が最も頌りにしおいるシェル人間工孊の䞀郚ですたた、特に远加のケヌスで私のバリアントでは、 !$前の文字列を䜿甚しお䞊向きのトヌクン怜玢を実行する必芁がありたす。これは、bashで䜜業するずきに最も煩わしいこずの1぀です。

私の倉皮たたは倚分私は倉皮を盗んだ...芚えおいないman_shrugging :)

function bind_bang
    switch (commandline --current-token)[-1]
    case "!"
        # Without the `--`, the functionality can break when completing
        # flags used in the history (since, in certain edge cases
        # `commandline` will assume that *it* should try to interpret
        # the flag)
        commandline --current-token -- $history[1]
        commandline --function repaint
    case "*"
        commandline --insert !
    end
end

function bind_dollar
    switch (commandline --current-token)[-1]
    # This case lets us still type a literal `!$` if we need to (by
    # typing `!\$`). Probably overkill.
    case "*!\\"
        # Without the `--`, the functionality can break when completing
        # flags used in the history (since, in certain edge cases
        # `commandline` will assume that *it* should try to interpret
        # the flag)
        commandline --current-token -- (echo -ns (commandline --current-token)[-1] | head -c '-1')
        commandline --insert '$'
    case "!"
        commandline --current-token ""
        commandline --function history-token-search-backward


    # Main difference from referenced version is this `*!` case
    # =========================================================
    #
    # If the `!$` is preceded by any text, search backward for tokens
    # that contain that text as a substring. E.g., if we'd previously
    # run
    #
    #   git checkout -b a_feature_branch
    #   git checkout master
    #
    # then the `fea!$` in the following would be replaced with
    # `a_feature_branch`
    #
    #   git branch -d fea!$
    #
    # and our command line would look like
    #
    #   git branch -d a_feature_branch
    #
    case "*!"
        # Without the `--`, the functionality can break when completing
        # flags used in the history (since, in certain edge cases
        # `commandline` will assume that *it* should try to interpret
        # the flag)
        commandline --current-token -- (echo -ns (commandline --current-token)[-1] | head -c '-1')
        commandline --function history-token-search-backward
    case "*"
        commandline --insert '$'
    end
end

function fish_user_key_bindings
    bind ! bind_bang
    bind '$' bind_dollar
end

ありがずう@ scooter-dangleこれは228よりもうたく機胜したす

Fishが䜕らかのアクションを実行するためのより慣甚的な方法を提䟛する堎合がありたす。

LANG=C :
fish: Unsupported use of '='. To run ':' with a modified environment, please use 'env LANG=C :
'

たぶん!!は、デフォルトで、それを行うための別のより慣甚的な方法を瀺唆するそのようなメッセヌゞを生成するこずもできたすか

ただし、提案は同じように効率的である必芁がありたす。 比范

  • sudo !!<enter> 、すべおキヌボヌド䞊の手の基本䜍眮から
  • <up><home>sudo <enter> 、 FishのFAQでずキヌボヌド䞊にありたす。
  • <C-p><Ca>sudo <enter> 、手を動かさずにアクセスできたす。これはデフォルトのBash、ZSHなどでも機胜するため、ナヌザヌは他のシェルを凊理する必芁があるずきにポヌタブルな新しい習慣を採甚できたす。

!$堎合、 <alt-.>提案するのは問題ないようですよね

@psychoslaveすべおの叀い問題、特に閉じた

これもロックしたす。 それは玄50回以䞊答えられたした。

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡