GitHubじゃ!Pythonじゃ!

GitHubからPython関係の優良リポジトリを探したかったのじゃー、でも英語は出来ないから日本語で読むのじゃー、英語社会世知辛いのじゃー

nvbn

thefuck – 以前のコンソールコマンドを修正する壮大なアプリ

投稿日:

以前のコンソールコマンドを修正する壮大なアプリ。

ファック

The Fuck@liamosaur tweetに触発された壮大なアプリで、以前のコンソールコマンドのエラーを修正します。

ファックはあまりにも遅いですか? 実験的なインスタントモードを試してみてください!

その他の例:

➜ apt-get install vim
E: Could not open lock file /var/lib/dpkg/lock - open (13: Permission denied)
E: Unable to lock the administration directory (/var/lib/dpkg/), are you root?

➜ fuck
sudo apt-get install vim [enter/↑/↓/ctrl+c]
[sudo] password for nvbn:
Reading package lists... Done
...
➜ git push
fatal: The current branch master has no upstream branch.
To push the current branch and set the remote as upstream, use

    git push --set-upstream origin master


➜ fuck
git push --set-upstream origin master [enter/↑/↓/ctrl+c]
Counting objects: 9, done.
...
➜ puthon
No command 'puthon' found, did you mean:
 Command 'python' from package 'python-minimal' (main)
 Command 'python' from package 'python3' (main)
zsh: command not found: puthon

➜ fuck
python [enter/↑/↓/ctrl+c]
Python 3.4.2 (default, Oct  8 2014, 13:08:17)
...
➜ git brnch
git: 'brnch' is not a git command. See 'git --help'.

Did you mean this?
    branch

➜ fuck
git branch [enter/↑/↓/ctrl+c]
* master
➜ lein rpl
'rpl' is not a task. See 'lein help'.

Did you mean this?
         repl

➜ fuck
lein repl [enter/↑/↓/ctrl+c]
nREPL server started on port 54848 on host 127.0.0.1 - nrepl://127.0.0.1:54848
REPL-y 0.3.1
...

盲目的に修正されたコマンドを実行することを恐れていない場合、 require_confirmation 設定オプションを無効にすることができます:

➜ apt-get install vim
E: Could not open lock file /var/lib/dpkg/lock - open (13: Permission denied)
E: Unable to lock the administration directory (/var/lib/dpkg/), are you root?

➜ fuck
sudo apt-get install vim
[sudo] password for nvbn:
Reading package lists... Done
...

要件

  • Python(3.4+)
  • ピップ
  • python-dev

インストール

OS Xでは、あなたはHomebrew経由でファックをインストールすることができます:

brew install thefuck

Ubuntuでは、以下のコマンドでThe Fuckをインストールします:

sudo apt update
sudo apt install python3-dev python3-pip
sudo pip3 install thefuck

FreeBSDでは、以下のコマンドでThe Fuckをインストールしてください:

sudo portsnap fetch update
cd /usr/ports/misc/thefuck && sudo make install clean

他のシステムでは、 pipを使ってThe Fuckをインストールしてください:

pip install thefuck

あるいは、OSパッケージマネージャ(OS X、Ubuntu、Arch)を使用することもできます。

このコマンドを.bash_profile.bashrc.zshrcまたは他の起動スクリプトに配置することをお勧めします。

eval $(thefuck --alias)
# You can use whatever you want as an alias, like for Mondays:
eval $(thefuck --alias FUCK)

またはあなたのシェルの設定(Bash、Zsh、Fish、Powershell、tcsh)。

変更は新しいシェルセッションでのみ利用可能です。 変更をすぐに利用できるようにするには、 .zshrc source ~/.bashrc (または.zshrcようなシェル設定ファイル)を実行します。

確認せずに固定コマンドを実行するには、 -yオプションを使用します。

fuck -y

成功するまでコマンドを再帰的に修正するには、 -rオプションを使用します。

fuck -r

更新中

pip3 install thefuck --upgrade

注:別名機能はv1.34 のファックで変更されました

使い方

ファックは前のコマンドとルールを一致させようとします。 一致するものが見つかると、一致したルールを使用して新しいコマンドが作成され、実行されます。 デフォルトでは、次のルールが有効になっています。

  • adb_unknown_commandadb logctaようなスペルミスのコマンドを修正します。
  • ag_literal – 提案時に-Qagに追加します。
  • aws_cliaws dynamdb scanようなスペルミスのコマンドを修正します。
  • cargocargo build代わりにcargo cargo buildを実行cargo build
  • cargo_no_commandcargo buidような間違ったコマンドを修正します。
  • cd_correction – スペルチェックと失敗したcdコマンドの修正。
  • cd_mkdir – cd’ingする前にディレクトリを作成します。
  • cd_parentcd..cd ..変更しcd ..
  • chmod_x – 実行ビットを追加します。
  • composer_not_command – コンポーザーのコマンド名を修正します。
  • cp_omitting_directorycpディレクトリを作成するときに-a追加します。
  • cpp11 – 不足している-std=c++11g++またはclang++追加しclang++
  • dirty_untar – 現在のディレクトリでuntarされたtar xコマンドを修正します。
  • dirty_unzip – 現在のディレクトリで解凍されたunzipコマンドを修正します。
  • django_south_ghost – ghosts django south migrationのために--delete-ghost-migrationsを追加できませんでした。
  • django_south_merge – 矛盾したdjangoの南への移行に--mergeを追加します。
  • docker_not_commanddocker_not_command docker tagsような不正なdocker_not_commandコマンドを修正しdocker tags
  • drygit git pushような繰り返しを修正します。
  • fab_command_not_found – スペルの間違ったファブリックコマンドを修正します。
  • fix_alt_space – Alt +スペースをスペース文字に置き換えます。
  • fix_file$EDITORエラーのあるファイルを開きます。
  • gem_unknown_command – 誤ったgemコマンドを修正します。
  • git_add – fixes “pathspec ‘foo’がgitが知っているファイルと一致しませんでした。” ;
  • git_add_forcegit add <pathspec>...にパスをgit add <pathspec>...するとパスが.gitignoreされます。
  • git_bisect_usagegit bisect gooodgit bisect rsetgit bisect gooodgit bisect rsetなどを修正します。
  • git_branch_deletegit branch -dgit branch -Dます。
  • git_branch_exists – 既に存在するブランチを作成するときに、 git branch -d foogit branch -D fooまたはgit checkout foo提供します。
  • git_branch_listgit branch list代わりにgit branch listをキャッチし、作成されたブランチを削除します。
  • git_checkout – ブランチ名を修正するか、新しいブランチを作成します。
  • git_commit_amend – 前回のコミット後にgit commit --amend提供します。
  • git_diff_no_indexgit_diff_no_index追跡ファイルの前のgit diff--no-indexを追加します。
  • git_diff_staged – 予期しない出力を伴う前のgit diff --stagedを追加します。
  • git_fix_stashgit stashコマンド(スペルミスのサブコマンドとsaveないsave )を修正します。
  • git_flag_after_filenamefatal: bad flag '...' after filename git_flag_after_filename修正しましたfatal: bad flag '...' after filename
  • git_help_aliasedgit help <alias>コマンドをgit help <alias>コマンドに置き換える問題を修正しました。
  • git_merge – ブランチ名にremoteを追加します。
  • git_merge_unrelated – 必要に応じて--allow-unrelated-histories追加する
  • git_not_commandgit brnchような間違ったgitコマンドを修正します。
  • git_pull – 前のgit pull実行する前に上流に設定します。
  • git_pull_clone – リポジトリが存在しないときにプルするのではなくクローンします。
  • git_pull_uncommitted_changes – プルする前に変更を隠してからポップします。
  • git_push – 以前に失敗したgit push --set-upstream origin $branchを追加します。
  • git_push_different_branch_names – ローカルbrach名がリモートブランチ名と一致しないときにプッシュを修正します。
  • git_push_pullpushが拒否されたときにgit pull実行します。
  • git_push_without_commits – あなたが忘れてしまってgit add .だけがあった場合、最初のコミットを作成しますgit add . 新しいプロジェクトを立ち上げるとき。
  • git_rebase_no_changesgit rebase --skip代わりにgit rebase --skip実行しgit_rebase_no_changes – 変更がない場合はgit rebase --continueします。
  • git_remote_deletegit remote delete remote_namegit remote remove remote_nameます。
  • git_rm_local_modifications – ローカルで変更されたファイルをrmしようとすると、 -fまたは--cached追加されます。
  • git_rm_recursive – ディレクトリを作成しようとすると-rが追加されます。
  • git_rm_staged – 段階的な変更を加えたファイルをrmしようとすると、 -fまたは--cached追加されます
  • git_rebase_merge_dirgit rebase (--continue | --abort | --skip)git rebase (--continue | --abort | --skip)または.git/rebase-mergeディレクトリを削除します。
  • git_remote_seturl_add – 存在しないリモートのgit remote set_urlれたときにgit remote set_urlします。
  • git_stash – ブランチをリベースまたは交換する前にローカルの変更を隠す。
  • git_stash_pop – stashをポップする前にローカルの変更を追加してからリセットします。
  • git_tag_force – タグが既に存在する場合、タグgit tag <tagname>git tag <tagname>追加します。
  • git_two_dashesgit commit -amendgit rebase -continue git commit -amendようなコマンドに欠落したダッシュを追加します。
  • go_run – Goプログラムのコンパイル/実行時に.go拡張子を付加します。
  • gradle_no_task – 修正が見つからないか、曖昧なgradle_no_taskタスクです。
  • gradle_wrappergradle_wrapper置き換えます。
  • grep_arguments_ordergrep -lir . testような状況でgrep引数の順序を修正しますgrep -lir . test grep -lir . test ;
  • grep_recursive – ディレクトリをgrepしようとするときに-r追加します。
  • grunt_task_not_found – スペルミスのついたコマンドを修正します。
  • gulp_not_task – スペルミスのタスクを修正します。
  • has_exists_script – スクリプト/バイナリが存在するときに./前に付けます。
  • heroku_multiple_appsheroku pgようなheroku pgコマンドに--app <app>herokuます。
  • heroku_not_commandheroku logような間違ったherokuコマンドを修正しheroku log
  • history – コマンドをヒストリからの最も類似したコマンドで置き換えようとする。
  • hostsclihostscli使用法を修正しようとします。
  • ifconfig_device_not_foundwlp2s0ような間違ったデバイス名を修正します。
  • java – Javaプログラムを実行するときに.java拡張子を削除します。
  • javac – Javaファイルをコンパイルするときに欠落した.java追加します。
  • lein_not_tasklein rplような間違ったleinタスクを修正します。
  • ln_no_hard_link – ディレクトリ上のハードリンク作成を捕まえ、シンボリックリンクを提案する。
  • ln_s_orderln -s引数の順序を修正します。
  • ls_all – 出力が空のときに-Alsに追加します。
  • ls_lahlsls追加します。
  • man – マニュアルセクションを変更します。
  • man_no_space – manコマンドをスペースなしで修正します。例えばmandiffです。
  • mercurial – 誤ったhgコマンドを修正しました。
  • missing_space_before_subcommandmissing_space_before_subcommandようなスペースがないコマンドを修正します。
  • mkdir_p – 親なしでディレクトリを作成しようとすると-pが追加されます。
  • mvn_no_commandclean packagemvn追加しmvn
  • mvn_unknown_lifecycle_phasemvn間違ったライフサイクルフェーズを修正しmvn
  • npm_missing_scriptnpmカスタムスクリプト名を修正しnpm npm_missing_script npm run-script <script> ;
  • npm_run_script – カスタムのnpmスクリプトに欠けているrun-scriptを追加します。
  • npm_wrong_commandnpm urgradeような間違ったnpmコマンドを修正します。
  • no_command – 間違ったコンソールコマンドを修正します( vom/vim
  • no_such_filemvコマンドとcpコマンドで不足しているディレクトリを作成します。
  • open – 渡されたアドレスにhttp://を付加して新しいファイルまたはディレクトリをopenか作成して渡します。
  • pip_unknown_command – 間違ったpipコマンドを修正します(例えば、 pip instatl/pip install ;
  • php_sphp_sサーバを実行しようとするときに-S置き換えます。
  • port_already_in_use – ポートをバインドしたプロセスを強制終了します。
  • prove_recursively – ディレクトリで呼び出されたときに-r追加します。
  • python_command – 実行可能でない/実行しないで実行しようとするとpython前に/ python_commandます。
  • python_execute – Pythonファイルを実行するときに欠落した.py追加します。
  • quotation_marks – argsを含むとき''不均等な使用を修正します。
  • path_from_history – 見つからなかったパスを、履歴と同様の絶対パスで置き換えます。
  • react_native_command_unrecognized – 未知のreact-nativeコマンドを修正します。
  • remove_trailing_cedilla – ヨーロッパのキーボードレイアウトの一般的なタイプミスである訓練cedillasçを削除します。
  • rm_dir – ディレクトリを削除しようとすると-rfが追加されます。
  • scm_correctionhg logような誤ったscmをgit log修正しgit log
  • sed_unterminated_ssed sコマンドに欠落した ‘/’を追加します。
  • sl_lsslls変更します。
  • ssh_known_hosts – 警告時にknown_hostsからホストを削除します。
  • sudo – 権限のために失敗した場合、前のコマンドにsudosudoします。
  • sudo_command_from_user_path – ユーザー$PATHからのコマンドをsudo実行します。
  • switch_lang – ローカルレイアウトからコマンドをenに切り替えます。
  • systemctl – 混乱しているsystemctlパラメータを正しくsystemctlます。
  • test.pypy.test代わりにtest.pyます。
  • touch – “touching”する前に見つからなかったディレクトリを作成します。
  • tsuru_login – 認証されていない場合、またはセッションが切れている場合はtsuru_login tsuru login実行します。
  • tsuru_not_commandtsuru_not_command tsuru shellような誤ったtsuru_not_commandコマンドを修正します。
  • tmuxtmuxコマンドを修正します。
  • unknown_command – hadoop hdfs-style “unknown command”を修正します。たとえば、 hdfs dfs lsコマンドに欠落した ‘ – ‘を追加します。
  • unsudo – プロセスがスーパーユーザー権限での実行を拒否した場合、以前のコマンドからsudoを削除します。
  • vagrant_upvagrant_upインスタンスを起動します。
  • whoiswhoisコマンドを修正します。
  • workon_doesnt_existsvirtualenvwrapper名前を修正します。新しい名前を作成することを提案します。
  • yarn_aliasyarn lsようなエイリアシングされたyarnコマンドを修正します。
  • yarn_command_not_found – スペルミスのyarnコマンドを修正します。
  • yarn_command_replaced – 置き換えられたyarnコマンドを修正します。
  • yarn_helpyarn文書を簡単に開くことができます。

次のルールは、特定のプラットフォームでのみデフォルトで有効になっています。

  • apt_get – インストールされていない場合、aptからアプリケーションをインストールします( python-commandnotfound / python3-commandnotfoundが必要です)。
  • apt_get_searchapt-cacheを使った検索でapt-getを使って検索しようとする変更。
  • apt_invalid_operationapt-get isntall vimような無効なaptおよびapt-get呼び出しを修正します。
  • apt_list_upgradableapt update後にapt update apt list --upgradableを実行するのに役立ちます。
  • apt_upgradeapt list --upgradable後でapt list --upgradable apt upgradeを実行するのに役立ちますapt list --upgradable ;
  • brew_cask_dependency – cask依存関係をインストールします。
  • brew_installbrew installフォーミュラ名を修正します。
  • brew_link – リンクが失敗した場合に--overwrite --dry-run追加します。
  • brew_uninstall – 複数のバージョンがインストールされている場合は、 – brew_uninstall追加してbrew uninstallます。
  • brew_unknown_command – 誤ったbrew_unknown_commandコマンドを修正します。例えば、 brew docto/brew doctor ;
  • brew_update_formulabrew update <formula>brew upgrade <formula>変換しbrew upgrade <formula>
  • dnf_no_such_commanddnf_no_such_commandたDNFコマンドを修正します。
  • pacman – インストールされていない場合は、 yaourt使用してアプリケーションをインストールします(利用可能な場合はyaourt使用します)。
  • pacman_not_found – パッケージ名をpacman_not_foundまたはyaourtで修正します。

次のコマンドはThe Fuckにバンドルされていますが、デフォルトでは有効になっていません。

  • git_push_forcegit push --force-with-leaseを追加します( git_push_pullと競合する可能性がありgit_push_pull )。
  • rm_rootrm -rf / commandに--no-preserve-rootを追加します。

独自のルールを作成する

独自のルールを追加するには、 ~/.config/thefuck/rulesという名前のファイルを作成します。 ルールファイルには、次の2つの機能が必要です。

match(command: Command) -> bool
get_new_command(command: Command) -> str | list[str]

さらに、ルールにはオプション機能を含めることができます。

side_effect(old_command: Command, fixed_command: str) -> None

ルールには、オプションの変数、 enabled_by_defaultrequires_outputpriorityも含めることができpriority

Commandは、 scriptoutput 、およびscript_parts 3つの属性がありscript_parts あなたのルールはCommand変更すべきではありません。

ルールAPIが3.0で変更されました:ルール設定にアクセスするにはfrom thefuck.conf import settings

settings~/.config/thefuck/settings.pyから組み立てられた特別なオブジェクトで、envの値です( 詳細は後述 )。

sudoスクリプトを実行するための簡単なルール例:

def match(command):
    return ('permission denied' in command.output.lower()
            or 'EACCES' in command.output)


def get_new_command(command):
    return 'sudo {}'.format(command.script)

# Optional:
enabled_by_default = True

def side_effect(command, fixed_command):
    subprocess.call('chmod 777 .', shell=True)

priority = 1000  # Lower first, default is 1000

requires_output = True

ルールの例、ルールの ユーティリティ関数app / os固有のヘルパー

設定

いくつかのファックパラメータは、 $XDG_CONFIG_HOME/thefuck/settings.py$XDG_CONFIG_HOMEデフォルトは~/.config )ファイルで変更できます:

  • rules – 有効なルールのリスト。デフォルトでは、 thefuck.conf.DEFAULT_RULES
  • exclude_rules – デフォルトでは無効なルールのリスト[] ;
  • require_confirmation – 新しいコマンドを実行する前に確認が必要です。デフォルトはTrueです。
  • wait_command – 直前のコマンド出力を取得する最大時間(秒単位)。
  • no_colors – カラー出力を無効にする。
  • priority – ルールの優先priorityすると、 priority低いルールが最初にマッチします。
  • debug – デフォルトではデバッグ出力を有効にします。
  • history_limit – スキャンされる履歴コマンドの数( 2000など)の数値。
  • alter_history – 固定コマンドを履歴にプッシュする、デフォルトではTrue
  • wait_slow_commandslow_commandsリスト内にある場合、直前のコマンド出力を取得する最大時間(秒)。
  • slow_commands – 遅いコマンドのリスト。

settings.pyの例:

rules = ['sudo', 'no_command']
exclude_rules = ['git_push']
require_confirmation = True
wait_command = 10
no_colors = False
priority = {'sudo': 100, 'no_command': 9999}
debug = False
history_limit = 9999
wait_slow_command = 20
slow_commands = ['react-native', 'gradle']

あるいは、環境変数を介して:

  • THEFUCK_RULES – 有効なルールのリスト( DEFAULT_RULES:rm_rootsudo:no_command
  • THEFUCK_EXCLUDE_RULESTHEFUCK_EXCLUDE_RULESような無効なルールのリストですgit_pull:git_push ;
  • THEFUCK_REQUIRE_CONFIRMATION – 新しいコマンドを実行する前に確認が必要です( true/false
  • THEFUCK_WAIT_COMMAND – 直前のコマンド出力を取得する最大時間(秒)。
  • THEFUCK_NO_COLORS – カラー出力を無効にする。
  • THEFUCK_PRIORITY – ルールの優先度no_command=9999:apt_get=100no_command=9999:apt_get=100priority低いルールが最初にマッチします。
  • THEFUCK_DEBUG – デバッグ出力を有効true/false無効にします。
  • THEFUCK_HISTORY_LIMIT2000ように、スキャンされる履歴コマンドの数。
  • THEFUCK_ALTER_HISTORY – 固定コマンドを歴史に適用するtrue/false ;
  • THEFUCK_WAIT_SLOW_COMMANDslow_commandsリスト内にある場合、直前のコマンド出力を取得する最大時間(秒)。
  • THEFUCK_SLOW_COMMANDSlein:gradleような遅いコマンドのリスト。

例えば:

export THEFUCK_RULES='sudo:no_command'
export THEFUCK_EXCLUDE_RULES='git_pull:git_push'
export THEFUCK_REQUIRE_CONFIRMATION='true'
export THEFUCK_WAIT_COMMAND=10
export THEFUCK_NO_COLORS='false'
export THEFUCK_PRIORITY='no_command=9999:apt_get=100'
export THEFUCK_HISTORY_LIMIT='2000'

ルールを含むサードパーティパッケージ

特定の非公開ルールセットを作成したいが、それらを他のユーザーと共有したい場合は、以下の構造を持つthefuck_contrib_*という名前のパッケージを作成します。

thefuck_contrib_foo
  thefuck_contrib_foo
    rules
      __init__.py
      *third-party rules*
    __init__.py
    *third-party-utils*
  setup.py

ファックは、 rulesモジュールにあるrulesを見つけます。

実験的なインスタントモード

The Fuckのデフォルトの動作では、前のコマンドを再実行する時間が必要です。 インスタントモードでは、 スクリプトで出力をログに記録し、ログを読むことで時間を節約できます。

現在、インスタントモードはbashまたはzshでPython 3のみをサポートしています。

インスタントモードを有効にするには、 .bashrc.bash_profileまたは.zshrcエイリアス初期化に--enable-experimental-instant-modeを追加し.bashrc

例えば:

eval $(thefuck --alias --enable-experimental-instant-mode)

現像

CONTRIBUTING.mdを参照してください

ライセンスMIT

プロジェクトライセンスはここにあります







-nvbn
-,

執筆者: