Top Related Projects
A smarter cd command. Supports all major shells.
:cherry_blossom: A command-line fuzzy finder
📚 Collaborative cheatsheets for console commands
ripgrep recursively searches directories for a regex pattern while respecting your gitignore
A simple, fast and user-friendly alternative to 'find'
An interactive cheatsheet tool for the command-line
Quick Overview
TheFuck is a command-line tool that corrects errors in previous console commands. It suggests corrections for mistyped commands, helping users quickly fix and re-execute their intended commands without having to retype them entirely.
Pros
- Saves time by automatically correcting common command-line mistakes
- Supports a wide range of shells and operating systems
- Highly customizable with user-defined rules and settings
- Continuously updated with new rules and improvements
Cons
- May occasionally suggest incorrect corrections
- Requires initial setup and configuration
- Can potentially slow down terminal startup time
- May conflict with other command-line tools or aliases
Code Examples
Here are a few examples of how TheFuck works:
- Correcting a misspelled command:
$ apt-get install vim
# Command not found. Did you mean:
# command 'apt-get' from deb apt (2.0.2ubuntu0.2)
# Try: sudo apt install <deb name>
$ fuck
sudo apt-get install vim
[sudo] password for user:
- Fixing a forgotten sudo:
$ mkdir /usr/local/bin
mkdir: cannot create directory '/usr/local/bin': Permission denied
$ fuck
sudo mkdir /usr/local/bin
[sudo] password for user:
- Correcting a Git command:
$ git push origin master
fatal: 'origin' does not appear to be a git repository
fatal: Could not read from remote repository.
$ fuck
git push -u origin master
Getting Started
To install TheFuck, follow these steps:
- Install Python and pip if not already installed.
- Install TheFuck using pip:
pip install thefuck
- Add TheFuck to your shell configuration file (e.g., .bashrc, .zshrc):
eval $(thefuck --alias)
- Restart your shell or source the configuration file:
source ~/.bashrc # or ~/.zshrc
Now you can use TheFuck by typing fuck
after encountering a command error.
Competitor Comparisons
A smarter cd command. Supports all major shells.
Pros of zoxide
- Faster and more efficient for directory navigation
- Lightweight and minimal impact on system resources
- Integrates seamlessly with various shells (bash, zsh, fish, etc.)
Cons of zoxide
- Limited to directory navigation, not a general command correction tool
- Requires learning a new syntax for optimal usage
- May not be as intuitive for users accustomed to traditional
cd
commands
Code Comparison
zoxide:
pub fn query(keywords: &[String], all: bool, interactive: bool, score: Option<f64>) -> Result<()> {
let mut db = db::init()?;
let mut matches = db.query(keywords);
matches.sort_unstable_by(|a, b| b.score.partial_cmp(&a.score).unwrap());
// ... (truncated for brevity)
}
thefuck:
def get_new_command(command):
settings = get_settings()
with logs.debug_time('Get new command'):
corrected_commands = get_corrected_commands(command)
return select_command(corrected_commands, settings.debug)
Summary
zoxide focuses on efficient directory navigation, while thefuck is a more general command correction tool. zoxide is faster and lighter, but has a narrower scope. thefuck offers broader functionality but may be slower and more resource-intensive. The choice between them depends on specific user needs and preferences.
:cherry_blossom: A command-line fuzzy finder
Pros of fzf
- More versatile, can be used for general fuzzy finding beyond command-line corrections
- Faster performance, especially for large datasets
- Integrates well with various tools and workflows (e.g., vim, tmux)
Cons of fzf
- Steeper learning curve, requires more setup and configuration
- Less focused on automatic command correction
- May require additional scripting for specific use cases
Code Comparison
fzf example:
find * -type f | fzf > selected
TheFuck example:
from thefuck.rules.sudo import match, get_new_command
def test_match():
assert match(Command('apt-get install vim', 'permission denied'))
def test_get_new_command():
assert get_new_command(Command('apt-get install vim')) == 'sudo apt-get install vim'
While fzf provides a powerful fuzzy finding engine that can be integrated into various workflows, TheFuck focuses specifically on correcting command-line mistakes. fzf offers more flexibility but requires more setup, whereas TheFuck provides immediate command corrections with less configuration needed.
📚 Collaborative cheatsheets for console commands
Pros of tldr
- Provides concise, practical examples for command-line tools
- Community-driven with a large collection of commands across various platforms
- Easy to contribute and maintain due to simple markdown format
Cons of tldr
- Limited to command-line tools and doesn't correct typos or mistakes
- Requires manual lookup, not automatic like thefuck
- May not cover all edge cases or complex usage scenarios
Code comparison
tldr (example page content):
# ls
List directory contents.
- List files one per line:
ls -1
- List all files, including hidden files:
ls -a
- List all files, with trailing / added to directory names:
ls -F
thefuck (example rule):
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)
While tldr focuses on providing clear examples for commands, thefuck aims to automatically correct command-line mistakes. tldr's content is written in simple markdown, making it easy for users to read and contributors to maintain. thefuck uses Python rules to detect and correct errors, offering a more dynamic but complex approach to command-line assistance.
ripgrep recursively searches directories for a regex pattern while respecting your gitignore
Pros of ripgrep
- Faster and more efficient for searching large codebases
- Respects .gitignore rules by default, improving search relevance
- Supports searching compressed files without extraction
Cons of ripgrep
- Limited to text search functionality, lacks command correction features
- Requires more technical knowledge to use effectively
- Not designed for interactive shell usage or command-line error correction
Code Comparison
ripgrep:
pub fn search<R: io::Read>(reader: R) -> Result<Stats, Error> {
let mut searcher = SearcherBuilder::new()
.line_number(true)
.build();
searcher.search_reader(reader, |matched_lines| {
// Process matched lines
Ok(true)
})
}
thefuck:
def get_new_command(command):
return match_rule(command, Rules.get_rules())
def match_rule(command, rules):
for rule in rules:
fixed = rule.match(command)
if fixed:
return fixed
return None
Key Differences
- ripgrep focuses on fast, efficient text searching in large codebases
- thefuck specializes in correcting mistyped console commands
- ripgrep is written in Rust for performance, while thefuck uses Python for flexibility
- ripgrep is a standalone tool, whereas thefuck integrates with the shell environment
- thefuck offers more interactive and user-friendly features for command-line usage
A simple, fast and user-friendly alternative to 'find'
Pros of fd
- Faster and more efficient for file searching
- Simpler syntax and easier to use for basic file operations
- Cross-platform compatibility (Windows, macOS, Linux)
Cons of fd
- More limited in scope, focused only on file searching
- Lacks the ability to correct command-line mistakes
- May require separate installation on some systems
Code Comparison
fd:
fd pattern
fd -e txt
fd -x command {} \;
thefuck:
def match(command):
return ('permission denied' in command.stderr.lower()
or 'EACCES' in command.stderr)
def get_new_command(command):
return 'sudo {}'.format(command.script)
fd is a simple and fast file search tool, while thefuck is a more complex command-line tool for correcting mistakes. fd excels in quickly finding files and executing commands on them, whereas thefuck focuses on interpreting and correcting command-line errors. The code snippets show fd's straightforward command-line usage compared to thefuck's Python-based rule definition for error correction.
An interactive cheatsheet tool for the command-line
Pros of navi
- Focuses on command discovery and learning, providing an interactive cheatsheet
- Supports custom cheatsheets and community-contributed snippets
- Offers a more structured approach to command-line assistance
Cons of navi
- Requires manual setup and curation of cheatsheets
- May have a steeper learning curve for new users
- Less automated than thefuck, requiring more user input
Code comparison
navi:
navi --query "git commit"
thefuck:
fuck
Key differences
navi is a tool for discovering and learning commands through interactive cheatsheets, while thefuck automatically corrects mistyped console commands. navi requires more active engagement from the user, offering a structured learning experience. thefuck, on the other hand, provides instant corrections with minimal user input.
navi excels in helping users explore and understand complex command-line operations, making it particularly useful for those looking to expand their knowledge. thefuck is more focused on quick fixes and productivity gains for experienced users who make occasional typos.
Both tools enhance the command-line experience, but they serve different purposes and cater to different user needs. navi is better suited for learning and exploration, while thefuck is ideal for quick error correction and time-saving.
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual CopilotREADME
The Fuck
The Fuck is a magnificent app, inspired by a @liamosaur tweet, that corrects errors in previous console commands.
Is The Fuck too slow? Try the experimental instant mode!
More examples:
â 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
...
If you're not afraid of blindly running corrected commands, the
require_confirmation
settings option can be disabled:
â 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
...
Contents
- Requirements
- Installations
- Updating
- How it works
- Creating your own rules
- Settings
- Third party packages with rules
- Experimental instant mode
- Developing
- License
Requirements
- python (3.5+)
- pip
- python-dev
Back to Contents
Installation
On macOS or Linux, you can install The Fuck via Homebrew:
brew install thefuck
On Ubuntu / Mint, install The Fuck with the following commands:
sudo apt update
sudo apt install python3-dev python3-pip python3-setuptools
pip3 install thefuck --user
On FreeBSD, install The Fuck with the following commands:
pkg install thefuck
On ChromeOS, install The Fuck using chromebrew with the following command:
crew install thefuck
On Arch based systems, install The Fuck with the following command:
sudo pacman -S thefuck
On other systems, install The Fuck by using pip
:
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 immediately
available, run source ~/.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
Back to Contents
Updating
pip3 install thefuck --upgrade
Note: Alias functionality was changed in v1.34 of The Fuck
Uninstall
To remove The Fuck, reverse the installation process:
- erase or comment thefuck 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 is found, a new command is created using the matched rule and executed. The following 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 onecp_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 replacingwith 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 requiredgit_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 changesgit_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 supportedln_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;
Back to Contents
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 with The Fuck, but are not enabled by default:
git_push_force
– adds--force-with-lease
to agit push
(may conflict withgit_push_pull
);rm_root
– adds--no-preserve-root
torm -rf /
command.
Back to Contents
Creating your own rules
To add your own rule, create a file named your-rule-name.py
in ~/.config/thefuck/rules
. The rule file must contain two functions:
match(command: Command) -> bool
get_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 variables enabled_by_default
, requires_output
and priority
.
Command
has three attributes: script
, output
and script_parts
.
Your rule should not change Command
.
Rules api changed in 3.0: To access a rule's settings, import it with
from 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 with 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
More examples of rules, utility functions for rules, app/os-specific helpers.
Back to Contents
Settings
Several The 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 of 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
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=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'
Back to Contents
Third-party packages with rules
If you'd like to make a specific set of non-public rules, but would still like
to share them with others, create a package named thefuck_contrib_*
with
the 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 the rules
module.
Back to Contents
Experimental instant mode
The default behavior of The Fuck requires time to re-run previous commands. When in instant mode, The Fuck saves time by logging output with script, then reading the log.
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-mode
to the alias initialization in .bashrc
, .bash_profile
or .zshrc
.
For example:
eval $(thefuck --alias --enable-experimental-instant-mode)
Back to Contents
Developing
See CONTRIBUTING.md
License MIT
Project License can be found here.
Back to Contents
Top Related Projects
A smarter cd command. Supports all major shells.
:cherry_blossom: A command-line fuzzy finder
📚 Collaborative cheatsheets for console commands
ripgrep recursively searches directories for a regex pattern while respecting your gitignore
A simple, fast and user-friendly alternative to 'find'
An interactive cheatsheet tool for the command-line
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual Copilot