The Funは、@liamosaur のツイートからインスピレーションを得た素晴らしいアプリで、以前のコンソール コマンドのエラーを修正します。
ザ・ファックは遅すぎますか?実験的なインスタント モードを試してください。
その他の例:
➜ 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
...
macOS または Linux では、Homebrew 経由でThe Funをインストールできます。
brew install thefuck
Ubuntu / Mint では、次のコマンドを使用してThe Funをインストールします。
sudo apt update
sudo apt install python3-dev python3-pip python3-setuptools
pip3 install thefuck --user
FreeBSD では、次のコマンドを使用してThe Funをインストールします。
pkg install thefuck
ChromeOS では、次のコマンドで chromebrew を使用してThe Fun をインストールします。
crew install thefuck
Arch ベースのシステムでは、次のコマンドを使用してThe Funをインストールします。
sudo pacman -S thefuck
他のシステムでは、 pip
使用してThe Funをインストールします。
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) 内で。
変更は、新しいシェル セッションでのみ使用できます。変更をすぐに利用できるようにするには、 source ~/.bashrc
(または.zshrc
などのシェル構成ファイル) を実行します。
確認なしで修正されたコマンドを実行するには、 --yeah
オプション (または省略して-y
使用するか、特にイライラする場合は--hard
使用します)。
fuck --yeah
成功するまでコマンドを再帰的に修正するには、 -r
オプションを使用します。
fuck -r
pip3 install thefuck --upgrade
注: エイリアス機能はThe Fun v1.34 で変更されました。
The Fun を削除するには、インストール プロセスを逆に実行します。
ファックは、前のコマンドをルールと照合しようとします。一致するものが見つかった場合、一致したルールを使用して新しいコマンドが作成され、実行されます。次のルールがデフォルトで有効になっています。
adb_unknown_command
– adb logcta
のようなスペルミスのあるコマンドを修正します。ag_literal
– 提案された場合、 ag
に-Q
追加します。aws_cli
– aws dynamdb scan
ようなスペルミスのあるコマンドを修正します。az_cli
– az providers
などのスペルミスのあるコマンドを修正します。cargo
- cargo
代わりにcargo build
を実行します。cargo_no_command
– cargo buid
のような間違ったコマンドを修正します。cat_dir
– ディレクトリをcat
うとしたときにcat
ls
に置き換えます。cd_correction
– 失敗した cd コマンドのスペルチェックと修正を行います。cd_cs
– cs
をcd
に変更します。cd_mkdir
– cd する前にディレクトリを作成します。cd_parent
– cd..
をcd ..
に変更します。chmod_x
– 実行ビットを追加します。choco_install
– チョコレートパッケージに共通のサフィックスを追加します。composer_not_command
– Composer コマンド名を修正します。conda_mistype
– conda コマンドを修正します。cp_create_destination
– 存在しないディレクトリにcp
またはmv
しようとすると、新しいディレクトリを作成します。cp_omitting_directory
– ディレクトリをcp
ときに-a
を追加します。cpp11
– 欠落している-std=c++11
g++
またはclang++
に追加します。dirty_untar
– 現在のディレクトリで解凍されるtar x
コマンドを修正します。dirty_unzip
– 現在のディレクトリで解凍されたunzip
コマンドを修正します。django_south_ghost
– ゴーストが django South に移行するため失敗するように--delete-ghost-migrations
を追加します。django_south_merge
– 一貫性のない django 南への移行に--merge
を追加します。docker_login
– docker login
を実行し、前のコマンドを繰り返します。docker_not_command
– docker tags
などの間違った docker コマンドを修正します。docker_image_being_used_by_container
- イメージを削除する前に、イメージを使用しているコンテナを削除します。dry
– git git push
のような繰り返しを修正します。fab_command_not_found
– ファブリック コマンドのスペルミスを修正します。fix_alt_space
– Alt+Space をスペース文字に置き換えます。fix_file
– $EDITOR
でエラーのあるファイルを開きます。gem_unknown_command
– 間違ったgem
コマンドを修正します。git_add
– 「pathspec 'foo' が git に認識されているファイルと一致しませんでした」を修正します。 ;git_add_force
– パスが .gitignore されている場合、 --force
git add <pathspec>...
に追加します。git_bisect_usage
– 二等分するときのgit bisect strt
、 git bisect goood
、 git bisect rset
などを修正します。git_branch_delete
– git branch -d
git branch -D
に変更します。git_branch_delete_checked_out
– チェックアウトされたブランチを削除しようとすると、 git branch -d
-d をgit checkout master && git branch -D
に変更します。git_branch_exists
– すでに存在するブランチを作成するときに、 git branch -d foo
、 git branch -D foo
、またはgit checkout foo
を提供します。git_branch_list
– git branch
の代わりにgit branch list
を取得し、作成されたブランチを削除します。git_branch_0flag
– 作成されたブランチを削除するgit branch 0v
やgit branch 0r
などのコマンドを修正します。git_checkout
– ブランチ名を修正するか、新しいブランチを作成します。git_clone_git_clone
– git clone git clone ...
をgit clone ...
に置き換えます。git_clone_missing
– git リポジトリにリンクしているように見える URL にgit clone
を追加します。git_commit_add
– 何もステージングされていないために失敗した場合、前のコミットの後にgit commit -a ...
またはgit commit -p ...
を提供します。git_commit_amend
– 前回のコミット後にgit commit --amend
提供します。git_commit_reset
– 前回のコミット後にgit reset HEAD~
を提供します。git_diff_no_index
– 追跡されていないファイルの前のgit diff
に--no-index
追加します。git_diff_staged
– 予期しない出力を含む--staged
前のgit diff
に追加します。git_fix_stash
– git stash
コマンド (サブコマンドのスペルミスとsave
の欠落) を修正します。git_flag_after_filename
– fatal: bad flag '...' after filename
を修正します。git_help_aliased
– git help <alias>
コマンドを修正し、エイリアス化されたコマンドに置き換えます。git_hook_bypass
– git am
、 git commit
、またはgit push
コマンドの前に--no-verify
フラグを追加します。git_lfs_mistype
– タイプミスされたgit lfs <command>
コマンドを修正します。git_main_master
– main
とmaster
間の誤ったブランチ名を修正しますgit_merge
– ブランチ名にリモートを追加します。git_merge_unrelated
– 必要に応じて--allow-unrelated-histories
を追加しますgit_not_command
– git brnch
のような間違った git コマンドを修正します。git_pull
– 前のgit pull
実行する前にアップストリームを設定します。git_pull_clone
– リポジトリが存在しない場合にプルする代わりにクローンを作成します。git_pull_uncommitted_changes
– プルする前に変更を隠し、後でポップします。git_push
– --set-upstream origin $branch
以前に失敗したgit push
に追加します。git_push_different_branch_names
– ローカル ブランチ名がリモート ブランチ名と一致しない場合のプッシュを修正します。git_push_pull
– push
が拒否された場合にgit pull
実行します。git_push_without_commits
– 忘れてgit add .
、新しいプロジェクトをセットアップするとき。git_rebase_no_changes
– 変更がない場合はgit rebase --continue
の代わりにgit rebase --skip
を実行します。git_remote_delete
– git remote delete remote_name
git remote remove remote_name
に置き換えます。git_rm_local_modifications
– ローカルで変更されたファイルをrm
うとするときに-f
または--cached
追加します。git_rm_recursive
– ディレクトリをrm
うとするときに-r
追加します。git_rm_staged
– 段階的な変更を含むファイルをrm
うとするときに-f
または--cached
追加しますgit_rebase_merge_dir
– git rebase (--continue | --abort | --skip)
を提供するか、リベースの進行中に.git/rebase-merge
ディレクトリを削除します。git_remote_seturl_add
– 存在しないリモートでgit remote set_url
実行した場合にgit remote add
を実行します。git_stash
– ブランチをリベースまたは切り替える前に、ローカルの変更を隠します。git_stash_pop
– スタッシュをポップする前にローカルの変更を追加し、リセットします。git_tag_force
– タグがすでに存在する場合は、 git tag <tagname>
に--force
を追加します。git_two_dashes
– git commit -amend
やgit rebase -continue
などのコマンドに欠落しているダッシュを追加します。go_run
– Go プログラムをコンパイル/実行するときに.go
拡張子を追加します。go_unknown_command
– 間違ったgo
コマンドを修正します (例: go bulid
)。gradle_no_task
– 見つからない、またはあいまいなgradle
タスクを修正します。gradle_wrapper
– gradle
./gradlew
に置き換えます。grep_arguments_order
– grep -lir のような状況でのgrep
引数の順序を修正しますgrep -lir . test
;grep_recursive
– ディレクトリをgrep
うとするときに-r
追加します。grunt_task_not_found
– スペルミスのあるgrunt
コマンドを修正します。gulp_not_task
– gulp
タスクのスペルミスを修正します。has_exists_script
– script/binary が存在する場合は./
を先頭に追加します。heroku_multiple_apps
– --app <app>
をheroku pg
などのheroku
コマンドに追加します。heroku_not_command
– heroku log
などの間違ったheroku
コマンドを修正します。history
- コマンドを履歴から最も類似したコマンドに置き換えようとします。hostscli
– hostscli
使用法を修正しようとします。ifconfig_device_not_found
– wlan0
からwlp2s0
のような間違ったデバイス名を修正します。java
– Java プログラムの実行時に.java
拡張子を削除します。javac
– Java ファイルをコンパイルするときに欠落している.java
を追加します。lein_not_task
– lein rpl
のような間違ったlein
タスクを修正します。long_form_help
– 短縮形式バージョンがサポートされていない場合は、 -h
--help
に変更します。ln_no_hard_link
– ディレクトリ上でのハード リンクの作成を捕捉し、シンボリック リンクを提案します。ln_s_order
– ln -s
引数の順序を修正します。ls_all
– 出力が空の場合、 ls
に-A
追加します。ls_lah
– ls
に-lah
追加します。man
– マニュアルセクションを変更。man_no_space
– mandiff
などのスペースのない man コマンドを修正します。mercurial
– 間違ったhg
コマンドを修正します。missing_space_before_subcommand
– npminstall
のようなスペースが欠落しているコマンドを修正します。mkdir_p
– 親のないディレクトリを作成しようとすると-p
を追加します。mvn_no_command
– clean package
をmvn
に追加します。mvn_unknown_lifecycle_phase
– mvn
のライフサイクルフェーズのスペルミスを修正します。npm_missing_script
– npm run-script <script>
内のnpm
カスタム スクリプト名を修正します。npm_run_script
– カスタムnpm
スクリプトに不足しているrun-script
追加します。npm_wrong_command
– npm urgrade
のような間違った npm コマンドを修正します。no_command
– 間違ったコンソール コマンドvom/vim
など) を修正します。no_such_file
– mv
およびcp
コマンドを使用して不足しているディレクトリを作成します。omnienv_no_such_command
– goenv
、 nodenv
、 pyenv
、 rbenv
の間違ったコマンドを修正します (例: pyenv isntall
またはgoenv list
)。open
– open
に渡されるアドレスの先頭にhttp://
を追加するか、新しいファイルまたはディレクトリを作成してopen
に渡します。pip_install
– --user
を追加するか、必要に応じてsudo
先頭に追加することで、 pip install
コマンドの権限の問題を修正します。pip_unknown_command
– 間違ったpip
コマンドを修正します (例: pip instatl/pip install
)。php_s
– ローカル PHP サーバーを実行しようとするときに、 -s
-S
に置き換えます。port_already_in_use
– ポートをバインドしたプロセスを強制終了します。prove_recursively
– ディレクトリを指定して呼び出された場合に-r
追加します。python_command
– 実行不可能な./
Python スクリプトなしで実行しようとすると、 python
先頭に追加します。python_execute
– Python ファイルの実行時に欠落している.py
を追加します。python_module_error
– そのモジュールpip install
うとすることで ModuleNotFoundError を修正します。quotation_marks
– 引数を含む場合の'
と"
の不均等な使用を修正します。path_from_history
– 見つからないパスを履歴からの同様の絶対パスに置き換えます。rails_migrations_pending
– 保留中の移行を実行します。react_native_command_unrecognized
– 認識されないreact-native
コマンドを修正します。remove_shell_prompt_literal
– ドキュメントからコマンドをコピーするときによく使用される、先頭のシェル プロンプト記号$
を削除します。remove_trailing_cedilla
– ヨーロッパのキーボード レイアウトでよくあるタイプミスである末尾の cedillas ç
を削除します。rm_dir
– ディレクトリを削除しようとすると-rf
を追加します。scm_correction
– hg log
などの間違った scm をgit log
に修正します。sed_unterminated_s
– 欠落している「/」をsed
s
コマンドに追加します。sl_ls
– sl
をls
に変更します。ssh_known_hosts
– 警告が発生すると、 known_hosts
からホストを削除します。sudo
– 権限が原因で失敗した場合は、前のコマンドの先頭にsudo
を追加します。sudo_command_from_user_path
– sudo
を使用してユーザー$PATH
からコマンドを実行します。switch_lang
– コマンドをローカル レイアウトから en に切り替えます。systemctl
– 紛らわしいsystemctl
のパラメータを正しく順序付けします。terraform_init.py
– 計画または適用の前にterraform init
を実行します。terraform_no_command.py
– 認識されないterraform
コマンドを修正します。test.py
– test.py
の代わりにpytest
実行します。touch
– 「タッチ」する前に欠落しているディレクトリを作成します。tsuru_login
– 認証されていない場合、またはセッションの有効期限が切れた場合にtsuru login
実行します。tsuru_not_command
– tsuru shell
などの間違ったtsuru
コマンドを修正します。tmux
– tmux
コマンドを修正します。unknown_command
– hadoop hdfs スタイルの「不明なコマンド」を修正します。たとえば、欠落している「-」をhdfs dfs ls
のコマンドに追加します。unsudo
– プロセスがスーパーユーザー権限での実行を拒否した場合、前のコマンドからsudo
削除します。vagrant_up
– vagrant インスタンスを起動します。whois
– whois
コマンドを修正します。workon_doesnt_exists
– OS が新規作成を提案するvirtualenvwrapper
環境名を修正します。wrong_hyphen_before_subcommand
– 不適切に配置されたハイフンを削除します ( apt-install
-> apt install
、 git-log
-> git log
など)yarn_alias
– yarn ls
のようなエイリアスされたyarn
コマンドを修正します。yarn_command_not_found
– yarn
コマンドのスペルミスを修正します。yarn_command_replaced
– 置き換えられたyarn
コマンドを修正します。yarn_help
– yarn
ドキュメントを簡単に開きます。 次のルールは、特定のプラットフォームでのみデフォルトで有効になります。
apt_get
– アプリがインストールされていない場合は、apt からアプリをインストールします ( python-commandnotfound
/ python3-commandnotfound
が必要)。apt_get_search
– apt-get
を使用した検索の試みを、 apt-cache
を使用した検索に変更します。apt_invalid_operation
– apt-get isntall vim
のような無効なapt
およびapt-get
呼び出しを修正します。apt_list_upgradable
– apt update
後にapt list --upgradable
実行するのに役立ちます。apt_upgrade
– apt list --upgradable
の後にapt upgrade
実行するのに役立ちます。brew_cask_dependency
– Cask の依存関係をインストールします。brew_install
– brew install
の式名を修正します。brew_reinstall
– brew install <formula>
brew reinstall <formula>
に変換します。brew_link
– リンクが失敗した場合に--overwrite --dry-run
を追加します。brew_uninstall
– 複数のバージョンがインストールされている場合、 brew uninstall
に--force
を追加します。brew_unknown_command
– 間違った brew コマンドを修正します (例brew docto/brew doctor
。brew_update_formula
– brew update <formula>
をbrew upgrade <formula>
に変換します。dnf_no_such_command
– タイプミスされた DNF コマンドを修正します。nixos_cmd_not_found
– NixOS にアプリをインストールします。pacman
– アプリがインストールされていない場合はpacman
でアプリをインストールします (利用可能な場合はyay
、 pikaur
、またはyaourt
を使用します)。pacman_invalid_option
– 小文字のpacman
オプションを大文字に置き換えます。pacman_not_found
– パッケージ名をpacman
、 yay
、 pikaur
またはyaourt
に修正します。yum_invalid_operation
– yum isntall vim
のような無効なyum
呼び出しを修正します。次のコマンドはThe Funにバンドルされていますが、デフォルトでは有効になっていません。
git_push_force
– --force-with-lease
をgit push
に追加します ( git_push_pull
と競合する可能性があります)。rm_root
– --no-preserve-root
rm -rf /
コマンドに追加します。 独自のルールを追加するには、 ~/.config/thefuck/rules
にyour-rule-name.py
という名前のファイルを作成します。ルール ファイルには、次の 2 つの関数が含まれている必要があります。
match ( command : Command ) - > bool
get_new_command ( command : Command ) - > str | list [ str ]
さらに、ルールにはオプションの関数を含めることができます。
side_effect ( old_command : Command , fixed_command : str ) - > None
ルールにはオプションの変数enabled_by_default
、 requires_output
、 priority
を含めることもできます。
Command
、 script
、 output
、 script_parts
という 3 つの属性があります。ルールではCommand
変更しないでください。
3.0 で変更されたルール API:ルールの設定にアクセスするには、 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
ルール、ルールのユーティリティ関数、アプリ/OS 固有のヘルパーのその他の例。
いくつかのファックパラメータはファイル$XDG_CONFIG_HOME/thefuck/settings.py
で変更できます ( $XDG_CONFIG_HOME
のデフォルトは~/.config
です)。
rules
– 有効なルールのリスト、デフォルトではthefuck.const.DEFAULT_RULES
;exclude_rules
– 無効なルールのリスト、デフォルトでは[]
;require_confirmation
– 新しいコマンドを実行する前に確認が必要です。デフォルトではTrue
。wait_command
– 前のコマンド出力を取得するまでの最大時間 (秒単位)。no_colors
– カラー出力を無効にします。priority
– ルールの優先度を含む辞書。 priority
の低いルールが最初に一致します。debug
– デバッグ出力を有効にします。デフォルトではFalse
。history_limit
– スキャンされる履歴コマンドの数の数値 ( 2000
など)。alter_history
– 修正されたコマンドを履歴にプッシュします。デフォルトではTrue
。wait_slow_command
– 前のコマンド出力がslow_commands
リストにある場合、それを取得するまでの最大時間(秒)。slow_commands
– 遅いコマンドのリスト。num_close_matches
– 提案する類似一致の最大数、デフォルトでは3
。excluded_search_path_prefixes
– コマンドの検索時に無視するパス接頭辞。デフォルトでは[]
。 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' ]
num_close_matches = 5
または環境変数経由:
THEFUCK_RULES
– DEFAULT_RULES:rm_root
やsudo:no_command
などの有効なルールのリスト。THEFUCK_EXCLUDE_RULES
– git_pull:git_push
などの無効なルールのリスト。THEFUCK_REQUIRE_CONFIRMATION
– 新しいコマンドを実行する前に確認が必要ですtrue/false
。THEFUCK_WAIT_COMMAND
– 前のコマンド出力を取得するまでの最大時間 (秒単位)。THEFUCK_NO_COLORS
– カラー出力を無効にする、 true/false
;THEFUCK_PRIORITY
– no_command=9999:apt_get=100
などのルールの優先度。 priority
の低いルールが最初に一致します。THEFUCK_DEBUG
– デバッグ出力を有効にしますtrue/false
)。THEFUCK_HISTORY_LIMIT
– スキャンされる履歴コマンドの数2000
など)THEFUCK_ALTER_HISTORY
– 固定コマンドを履歴にプッシュtrue/false
;THEFUCK_WAIT_SLOW_COMMAND
– 前のコマンド出力がslow_commands
リストにある場合に取得するまでの最大時間(秒)。THEFUCK_SLOW_COMMANDS
– lein:gradle
のような遅いコマンドのリスト。THEFUCK_NUM_CLOSE_MATCHES
– 提案する類似一致の最大数 ( 5
など)。THEFUCK_EXCLUDED_SEARCH_PATH_PREFIXES
– コマンドの検索時に無視するパス接頭辞。デフォルトでは[]
。例えば:
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 '
export THEFUCK_NUM_CLOSE_MATCHES= ' 5 '
非公開ルールの特定のセットを作成したいが、それらを他のユーザーと共有したい場合は、次の構造を持つthefuck_contrib_*
という名前のパッケージを作成します。
thefuck_contrib_foo
thefuck_contrib_foo
rules
__init__.py
*third-party rules*
__init__.py
*third-party-utils*
setup.py
ファックはrules
モジュールにあるルールを見つけます。
The Funのデフォルトの動作では、以前のコマンドを再実行するのに時間がかかります。インスタント モードの場合、 The Fun はスクリプトで出力をログに記録し、ログを読み取ることで時間を節約します。
現在、インスタント モードは bash または zsh を使用した Python 3 のみをサポートしています。 zsh の自動修正機能も、ザファックが正しく動作するために無効にする必要があります。
インスタント モードを有効にするには、 .bashrc
、 .bash_profile
、または.zshrc
のエイリアス初期化に--enable-experimental-instant-mode
を追加します。
例えば:
eval $( thefuck --alias --enable-experimental-instant-mode )
CONTRIBUTING.md を参照してください。
プロジェクトライセンスはここで見つけることができます。