Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up

Magnificent app which corrects your previous console command.

License

NotificationsYou must be signed in to change notification settings

nvbn/thefuck

Repository files navigation

The Fuck is a magnificent app, inspired by a@liamosaurtweet,that corrects errors in previous console commands.

IsThe Fuck too slow?Try the experimental instant mode!

gif with examples

More examples:

➜ apt-get install vimE: 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?➜ fucksudo apt-get install vim [enter/↑/↓/ctrl+c][sudo] passwordfor nvbn:Reading package lists... Done...
➜ git pushfatal: The current branch master has no upstream branch.To push the current branch andset the remote as upstream, use    git push --set-upstream origin master➜ fuckgit push --set-upstream origin master [enter/↑/↓/ctrl+c]Counting objects: 9, done....
➜ puthonNocommand'puthon' found, did you mean: Command'python' from package'python-minimal' (main) Command'python' from package'python3' (main)zsh:command not found: puthon➜ fuckpython [enter/↑/↓/ctrl+c]Python 3.4.2 (default, Oct  8 2014, 13:08:17)...
➜ git brnchgit:'brnch' is not a git command. See'git --help'.Did you mean this?    branch➜ fuckgit branch [enter/↑/↓/ctrl+c]* master
➜ lein rpl'rpl' is not a task. See'lein help'.Did you mean this?         repl➜ fucklein repl [enter/↑/↓/ctrl+c]nREPL server started on port 54848 on host 127.0.0.1 - nrepl://127.0.0.1:54848REPL-y 0.3.1...

If you're not afraid of blindly running corrected commands, therequire_confirmationsettings option can be disabled:

➜ apt-get install vimE: 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?➜ fucksudo apt-get install vim[sudo] passwordfor nvbn:Reading package lists... Done...

Contents

  1. Requirements
  2. Installations
  3. Updating
  4. How it works
  5. Creating your own rules
  6. Settings
  7. Third party packages with rules
  8. Experimental instant mode
  9. Developing
  10. License

Requirements

  • python (3.5+)
  • pip
  • python-dev

Installation

On macOS or Linux, you can installThe Fuck viaHomebrew:

brew install thefuck

On Ubuntu / Mint, installThe Fuck with the following commands:

sudo apt updatesudo apt install python3-dev python3-pip python3-setuptoolspip3 install thefuck --user

On FreeBSD, installThe Fuck with the following commands:

pkg install thefuck

On ChromeOS, installThe Fuck usingchromebrew with the following command:

crew install thefuck

On Arch based systems, installThe Fuck with the following command:

sudo pacman -S thefuck

On other systems, installThe Fuck by usingpip:

pip install thefuck

Alternatively, you may use an OS package manager (OS X, Ubuntu, Arch).

#It is recommended that you place this command in your.bash_profile,.bashrc,.zshrc or other startup script:

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

Or in your shell config (Bash, Zsh, Fish, Powershell, tcsh).

Changes are only available in a new shell session. To make changes immediatelyavailable, runsource ~/.bashrc (or your shell config file like.zshrc).

To run fixed commands without confirmation, use the--yeah option (or just-y for short, or--hard if you're especially frustrated):

fuck --yeah

To fix commands recursively until succeeding, use the-r option:

fuck -r

Updating

pip3 install thefuck --upgrade

Note: Alias functionality was changed in v1.34 ofThe Fuck

Uninstall

To removeThe Fuck, reverse the installation process:

  • erase or commentthefuck alias line from your Bash, Zsh, Fish, Powershell, tcsh, ... shell config
  • use your package manager (brew, pip3, pkg, crew, pip) to uninstall the binaries

How it works

The Fuck attempts to match the previous command with a rule. If a match isfound, a new command is created using the matched rule and executed. Thefollowing rules are enabled by default:

  • adb_unknown_command – fixes misspelled commands likeadb logcta;
  • ag_literal – adds-Q toag when suggested;
  • aws_cli – fixes misspelled commands likeaws dynamdb scan;
  • az_cli – fixes misspelled commands likeaz providers;
  • cargo – runscargo build instead ofcargo;
  • cargo_no_command – fixes wrong commands likecargo buid;
  • cat_dir – replacescat withls when you try tocat a directory;
  • cd_correction – spellchecks and corrects failed cd commands;
  • cd_cs – changescs tocd;
  • cd_mkdir – creates directories before cd'ing into them;
  • cd_parent – changescd.. tocd ..;
  • chmod_x – adds execution bit;
  • choco_install – appends common suffixes for chocolatey packages;
  • composer_not_command – fixes composer command name;
  • conda_mistype – fixes conda commands;
  • cp_create_destination – creates a new directory when you attempt tocp ormv to a non-existent one
  • cp_omitting_directory – adds-a when youcp directory;
  • cpp11 – adds missing-std=c++11 tog++ orclang++;
  • dirty_untar – fixestar x command that untarred in the current directory;
  • dirty_unzip – fixesunzip command that unzipped in the current directory;
  • django_south_ghost – adds--delete-ghost-migrations to failed because ghosts django south migration;
  • django_south_merge – adds--merge to inconsistent django south migration;
  • docker_login – executes adocker login and repeats the previous command;
  • docker_not_command – fixes wrong docker commands likedocker tags;
  • docker_image_being_used_by_container ‐ removes the container that is using the image before removing the image;
  • dry – fixes repetitions likegit git push;
  • fab_command_not_found – fixes misspelled fabric commands;
  • fix_alt_space – replaces Alt+Space with Space character;
  • fix_file – opens a file with an error in your$EDITOR;
  • gem_unknown_command – fixes wronggem commands;
  • git_add – fixes"pathspec 'foo' did not match any file(s) known to git.";
  • git_add_force – adds--force togit add <pathspec>... when paths are .gitignore'd;
  • git_bisect_usage – fixesgit bisect strt,git bisect goood,git bisect rset, etc. when bisecting;
  • git_branch_delete – changesgit branch -d togit branch -D;
  • git_branch_delete_checked_out – changesgit branch -d togit checkout master && git branch -D when trying to delete a checked out branch;
  • git_branch_exists – offersgit branch -d foo,git branch -D foo orgit checkout foo when creating a branch that already exists;
  • git_branch_list – catchesgit branch list in place ofgit branch and removes created branch;
  • git_branch_0flag – fixes commands such asgit branch 0v andgit branch 0r removing the created branch;
  • git_checkout – fixes branch name or creates new branch;
  • git_clone_git_clone – replacesgit clone git clone ... withgit clone ...
  • git_clone_missing – addsgit clone to URLs that appear to link to a git repository.
  • git_commit_add – offersgit commit -a ... orgit commit -p ... after previous commit if it failed because nothing was staged;
  • git_commit_amend – offersgit commit --amend after previous commit;
  • git_commit_reset – offersgit reset HEAD~ after previous commit;
  • git_diff_no_index – adds--no-index to previousgit diff on untracked files;
  • git_diff_staged – adds--staged to previousgit diff with unexpected output;
  • git_fix_stash – fixesgit stash commands (misspelled subcommand and missingsave);
  • git_flag_after_filename – fixesfatal: bad flag '...' after filename
  • git_help_aliased – fixesgit help <alias> commands replacing with the aliased command;
  • git_hook_bypass – adds--no-verify flag previous togit am,git commit, orgit push command;
  • git_lfs_mistype – fixes mistypedgit lfs <command> commands;
  • git_main_master – fixes incorrect branch name betweenmain andmaster
  • git_merge – adds remote to branch names;
  • git_merge_unrelated – adds--allow-unrelated-histories when required
  • git_not_command – fixes wrong git commands likegit brnch;
  • git_pull – sets upstream before executing previousgit pull;
  • git_pull_clone – clones instead of pulling when the repo does not exist;
  • git_pull_uncommitted_changes – stashes changes before pulling and pops them afterwards;
  • git_push – adds--set-upstream origin $branch to previous failedgit push;
  • git_push_different_branch_names – fixes pushes when local branch name does not match remote branch name;
  • git_push_pull – runsgit pull whenpush was rejected;
  • git_push_without_commits – creates an initial commit if you forget and onlygit add ., when setting up a new project;
  • git_rebase_no_changes – runsgit rebase --skip instead ofgit rebase --continue when there are no changes;
  • git_remote_delete – replacesgit remote delete remote_name withgit remote remove remote_name;
  • git_rm_local_modifications – adds-f or--cached when you try torm a locally modified file;
  • git_rm_recursive – adds-r when you try torm a directory;
  • git_rm_staged – adds-f or--cached when you try torm a file with staged changes
  • git_rebase_merge_dir – offersgit rebase (--continue | --abort | --skip) or removing the.git/rebase-merge dir when a rebase is in progress;
  • git_remote_seturl_add – runsgit remote add whengit remote set_url on nonexistent remote;
  • git_stash – stashes your local modifications before rebasing or switching branch;
  • git_stash_pop – adds your local modifications before popping stash, then resets;
  • git_tag_force – adds--force togit tag <tagname> when the tag already exists;
  • git_two_dashes – adds a missing dash to commands likegit commit -amend orgit rebase -continue;
  • go_run – appends.go extension when compiling/running Go programs;
  • go_unknown_command – fixes wronggo commands, for examplego bulid;
  • gradle_no_task – fixes not found or ambiguousgradle task;
  • gradle_wrapper – replacesgradle with./gradlew;
  • grep_arguments_order – fixesgrep arguments order for situations likegrep -lir . test;
  • grep_recursive – adds-r when you try togrep directory;
  • grunt_task_not_found – fixes misspelledgrunt commands;
  • gulp_not_task – fixes misspelledgulp tasks;
  • has_exists_script – prepends./ when script/binary exists;
  • heroku_multiple_apps – adds--app <app> toheroku commands likeheroku pg;
  • heroku_not_command – fixes wrongheroku commands likeheroku log;
  • history – tries to replace command with the most similar command from history;
  • hostscli – tries to fixhostscli usage;
  • ifconfig_device_not_found – fixes wrong device names likewlan0 towlp2s0;
  • java – removes.java extension when running Java programs;
  • javac – appends missing.java when compiling Java files;
  • lein_not_task – fixes wronglein tasks likelein rpl;
  • long_form_help – changes-h to--help when the short form version is not supported
  • ln_no_hard_link – catches hard link creation on directories, suggest symbolic link;
  • ln_s_order – fixesln -s arguments order;
  • ls_all – adds-A tols when output is empty;
  • ls_lah – adds-lah tols;
  • man – changes manual section;
  • man_no_space – fixes man commands without spaces, for examplemandiff;
  • mercurial – fixes wronghg commands;
  • missing_space_before_subcommand – fixes command with missing space likenpminstall;
  • mkdir_p – adds-p when you try to create a directory without a parent;
  • mvn_no_command – addsclean package tomvn;
  • mvn_unknown_lifecycle_phase – fixes misspelled life cycle phases withmvn;
  • npm_missing_script – fixesnpm custom script name innpm run-script <script>;
  • npm_run_script – adds missingrun-script for customnpm scripts;
  • npm_wrong_command – fixes wrong npm commands likenpm urgrade;
  • no_command – fixes wrong console commands, for examplevom/vim;
  • no_such_file – creates missing directories withmv andcp commands;
  • omnienv_no_such_command – fixes wrong commands forgoenv,nodenv,pyenv andrbenv (eg.:pyenv isntall orgoenv list);
  • open – either prependshttp:// to address passed toopen or creates a new file or directory and passes it toopen;
  • pip_install – fixes permission issues withpip install commands by adding--user or prependingsudo if necessary;
  • pip_unknown_command – fixes wrongpip commands, for examplepip instatl/pip install;
  • php_s – replaces-s by-S when trying to run a local php server;
  • port_already_in_use – kills process that bound port;
  • prove_recursively – adds-r when called with directory;
  • python_command – prependspython when you try to run non-executable/without./ python script;
  • python_execute – appends missing.py when executing Python files;
  • python_module_error – fixes ModuleNotFoundError by trying topip install that module;
  • quotation_marks – fixes uneven usage of' and" when containing args';
  • path_from_history – replaces not found path with a similar absolute path from history;
  • rails_migrations_pending – runs pending migrations;
  • react_native_command_unrecognized – fixes unrecognizedreact-native commands;
  • remove_shell_prompt_literal – removes leading shell prompt symbol$, common when copying commands from documentations;
  • remove_trailing_cedilla – removes trailing cedillasç, a common typo for European keyboard layouts;
  • rm_dir – adds-rf when you try to remove a directory;
  • scm_correction – corrects wrong scm likehg log togit log;
  • sed_unterminated_s – adds missing '/' tosed'ss commands;
  • sl_ls – changessl tols;
  • ssh_known_hosts – removes host fromknown_hosts on warning;
  • sudo – prependssudo to the previous command if it failed because of permissions;
  • sudo_command_from_user_path – runs commands from users$PATH withsudo;
  • switch_lang – switches command from your local layout to en;
  • systemctl – correctly orders parameters of confusingsystemctl;
  • terraform_init.py – runsterraform init before plan or apply;
  • terraform_no_command.py – fixes unrecognizedterraform commands;
  • test.py – runspytest instead oftest.py;
  • touch – creates missing directories before "touching";
  • tsuru_login – runstsuru login if not authenticated or session expired;
  • tsuru_not_command – fixes wrongtsuru commands liketsuru shell;
  • tmux – fixestmux commands;
  • unknown_command – fixes hadoop hdfs-style "unknown command", for example adds missing '-' to the command onhdfs dfs ls;
  • unsudo – removessudo from previous command if a process refuses to run on superuser privilege.
  • vagrant_up – starts up the vagrant instance;
  • whois – fixeswhois command;
  • workon_doesnt_exists – fixesvirtualenvwrapper env name os suggests to create new.
  • wrong_hyphen_before_subcommand – removes an improperly placed hyphen (apt-install ->apt install,git-log ->git log, etc.)
  • yarn_alias – fixes aliasedyarn commands likeyarn ls;
  • yarn_command_not_found – fixes misspelledyarn commands;
  • yarn_command_replaced – fixes replacedyarn commands;
  • yarn_help – makes it easier to openyarn documentation;

The following rules are enabled by default on specific platforms only:

  • apt_get – installs app from apt if it not installed (requirespython-commandnotfound /python3-commandnotfound);
  • apt_get_search – changes trying to search usingapt-get with searching usingapt-cache;
  • apt_invalid_operation – fixes invalidapt andapt-get calls, likeapt-get isntall vim;
  • apt_list_upgradable – helps you runapt list --upgradable afterapt update;
  • apt_upgrade – helps you runapt upgrade afterapt list --upgradable;
  • brew_cask_dependency – installs cask dependencies;
  • brew_install – fixes formula name forbrew install;
  • brew_reinstall – turnsbrew install <formula> intobrew reinstall <formula>;
  • brew_link – adds--overwrite --dry-run if linking fails;
  • brew_uninstall – adds--force tobrew uninstall if multiple versions were installed;
  • brew_unknown_command – fixes wrong brew commands, for examplebrew docto/brew doctor;
  • brew_update_formula – turnsbrew update <formula> intobrew upgrade <formula>;
  • dnf_no_such_command – fixes mistyped DNF commands;
  • nixos_cmd_not_found – installs apps on NixOS;
  • pacman – installs app withpacman if it is not installed (usesyay,pikaur oryaourt if available);
  • pacman_invalid_option – replaces lowercasepacman options with uppercase.
  • pacman_not_found – fixes package name withpacman,yay,pikaur oryaourt.
  • yum_invalid_operation – fixes invalidyum calls, likeyum isntall vim;

The following commands are bundled withThe Fuck, but are not enabled bydefault:

  • git_push_force – adds--force-with-lease to agit push (may conflict withgit_push_pull);
  • rm_root – adds--no-preserve-root torm -rf / command.

Creating your own rules

To add your own rule, create a file namedyour-rule-name.pyin~/.config/thefuck/rules. The rule file must contain two functions:

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

Additionally, rules can contain optional functions:

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

Rules can also contain the optional variablesenabled_by_default,requires_output andpriority.

Command has three attributes:script,output andscript_parts.Your rule should not changeCommand.

Rules api changed in 3.0: To access a rule's settings, import it withfrom thefuck.conf import settings

settings is a special object assembled from~/.config/thefuck/settings.py,and values from env (see more below).

A simple example rule for running a script withsudo:

defmatch(command):return ('permission denied'incommand.output.lower()or'EACCES'incommand.output)defget_new_command(command):return'sudo {}'.format(command.script)# Optional:enabled_by_default=Truedefside_effect(command,fixed_command):subprocess.call('chmod 777 .',shell=True)priority=1000# Lower first, default is 1000requires_output=True

More examples of rules,utility functions for rules,app/os-specific helpers.

Settings

SeveralThe Fuck parameters can be changed in the file$XDG_CONFIG_HOME/thefuck/settings.py($XDG_CONFIG_HOME defaults to~/.config):

  • rules – list of enabled rules, by defaultthefuck.const.DEFAULT_RULES;
  • exclude_rules – list of disabled rules, by default[];
  • require_confirmation – requires confirmation before running new command, by defaultTrue;
  • wait_command – the max amount of time in seconds for getting previous command output;
  • no_colors – disable colored output;
  • priority – dict with rules priorities, rule with lowerpriority will be matched first;
  • debug – enables debug output, by defaultFalse;
  • history_limit – the numeric value of how many history commands will be scanned, like2000;
  • alter_history – push fixed command to history, by defaultTrue;
  • wait_slow_command – max amount of time in seconds for getting previous command output if it inslow_commands list;
  • slow_commands – list of slow commands;
  • num_close_matches – the maximum number of close matches to suggest, by default3.
  • excluded_search_path_prefixes – path prefixes to ignore when searching for commands, by default[].

An example ofsettings.py:

rules= ['sudo','no_command']exclude_rules= ['git_push']require_confirmation=Truewait_command=10no_colors=Falsepriority= {'sudo':100,'no_command':9999}debug=Falsehistory_limit=9999wait_slow_command=20slow_commands= ['react-native','gradle']num_close_matches=5

Or via environment variables:

  • THEFUCK_RULES – list of enabled rules, likeDEFAULT_RULES:rm_root orsudo:no_command;
  • THEFUCK_EXCLUDE_RULES – list of disabled rules, likegit_pull:git_push;
  • THEFUCK_REQUIRE_CONFIRMATION – require confirmation before running new command,true/false;
  • THEFUCK_WAIT_COMMAND – the max amount of time in seconds for getting previous command output;
  • THEFUCK_NO_COLORS – disable colored output,true/false;
  • THEFUCK_PRIORITY – priority of the rules, likeno_command=9999:apt_get=100,rule with lowerpriority will be matched first;
  • THEFUCK_DEBUG – enables debug output,true/false;
  • THEFUCK_HISTORY_LIMIT – how many history commands will be scanned, like2000;
  • THEFUCK_ALTER_HISTORY – push fixed command to historytrue/false;
  • THEFUCK_WAIT_SLOW_COMMAND – the max amount of time in seconds for getting previous command output if it inslow_commands list;
  • THEFUCK_SLOW_COMMANDS – list of slow commands, likelein:gradle;
  • THEFUCK_NUM_CLOSE_MATCHES – the maximum number of close matches to suggest, like5.
  • THEFUCK_EXCLUDED_SEARCH_PATH_PREFIXES – path prefixes to ignore when searching for commands, by default[].

For example:

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

Third-party packages with rules

If you'd like to make a specific set of non-public rules, but would still liketo share them with others, create a package namedthefuck_contrib_* withthe following structure:

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

The Fuck will find rules located in therules module.

Experimental instant mode

The default behavior ofThe Fuck requires time to re-run previous commands.When in instant mode,The Fuck saves time by logging output withscript,then reading the log.

gif with instant mode

Currently, instant mode only supports Python 3 with bash or zsh. zsh's autocorrect function also needs to be disabled in order for thefuck to work properly.

To enable instant mode, add--enable-experimental-instant-modeto the alias initialization in.bashrc,.bash_profile or.zshrc.

For example:

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

Developing

SeeCONTRIBUTING.md

License MIT

Project License can be foundhere.

About

Magnificent app which corrects your previous console command.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages


[8]ページ先頭

©2009-2025 Movatter.jp