The Fuck是一款出色的应用程序,其灵感来自@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 Fuck :
brew install thefuck
在 Ubuntu / Mint 上,使用以下命令安装The Fuck :
sudo apt update
sudo apt install python3-dev python3-pip python3-setuptools
pip3 install thefuck --user
在 FreeBSD 上,使用以下命令安装The Fuck :
pkg install thefuck
在 ChromeOS 上,使用 chromebrew 使用以下命令安装The Fuck :
crew install thefuck
在基于 Arch 的系统上,使用以下命令安装The Fuck :
sudo pacman -S thefuck
在其他系统上,使用pip
安装The Fuck :
pip install thefuck
或者,您可以使用操作系统包管理器(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 )
或者在您的 shell 配置中(Bash、Zsh、Fish、Powershell、tcsh)。
更改仅在新的 shell 会话中可用。要使更改立即可用,请运行source ~/.bashrc
(或 shell 配置文件,如.zshrc
)。
要在不确认的情况下运行固定命令,请使用--yeah
选项(或者简称为-y
,如果您特别沮丧,则使用--hard
):
fuck --yeah
要递归修复命令直到成功,请使用-r
选项:
fuck -r
pip3 install thefuck --upgrade
注意:别名功能在The Fuck的 v1.34 中已更改
要删除The Fuck ,请逆向安装过程:
Fuck尝试将前一个命令与规则进行匹配。如果找到匹配项,则会使用匹配的规则创建新命令并执行。默认启用以下规则:
adb_unknown_command
– 修复拼写错误的命令,例如adb logcta
;ag_literal
– 在建议时将-Q
添加到ag
;aws_cli
– 修复拼写错误的命令,例如aws dynamdb scan
;az_cli
– 修复拼写错误的命令,例如az providers
;cargo
– 运行cargo build
而不是cargo
;cargo_no_command
– 修复错误的命令,如cargo buid
;cat_dir
– 当您尝试cat
目录时用ls
替换cat
;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
– 添加--delete-ghost-migrations
失败,因为 Ghosts django 向南迁移;django_south_merge
– 添加--merge
到不一致的 django 向南迁移;docker_login
– 执行docker login
并重复之前的命令;docker_not_command
– 修复错误的 docker 命令,例如docker tags
;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
更改为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 list
来代替git branch
并删除创建的分支;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 clone
添加到看似链接到 git 存储库的 URL。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
– 将--no-index
添加到未跟踪文件上的先前git diff
中;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 命令,例如git brnch
;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 --skip
而不是git rebase --continue
;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)
或在 rebase 正在进行时删除.git/rebase-merge
目录;git_remote_seturl_add
– 当git remote set_url
在不存在的远程上时运行git remote add
;git_stash
– 在变基或切换分支之前存储您的本地修改;git_stash_pop
– 在弹出存储之前添加本地修改,然后重置;git_tag_force
– 当标签已经存在时,将--force
添加到git tag <tagname>
;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
– 用./gradlew
替换gradle
;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
– 当脚本/二进制文件存在时在前面添加./
;heroku_multiple_apps
– 将--app <app>
添加到heroku
命令,例如heroku pg
;heroku_not_command
– 修复错误的heroku
命令,例如heroku log
;history
– 尝试用历史记录中最相似的命令替换命令;hostscli
– 尝试修复hostscli
使用;ifconfig_device_not_found
– 修复错误的设备名称,例如wlan0
至wlp2s0
;java
– 运行 Java 程序时删除.java
扩展名;javac
– 编译 Java 文件时追加缺少的.java
;lein_not_task
– 修复错误的lein
任务,例如lein rpl
;long_form_help
– 当不支持短格式版本时将-h
更改为--help
ln_no_hard_link
– 捕获目录上的硬链接创建,建议符号链接;ln_s_order
– 修复ln -s
参数顺序;ls_all
– 当输出为空时将-A
添加到ls
;ls_lah
– 将-lah
添加到ls
;man
– 更改手册部分;man_no_space
– 修复没有空格的 man 命令,例如mandiff
;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 命令,例如npm urgrade
;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
– 删除前导 shell 提示符$
,在从文档复制命令时很常见;remove_trailing_cedilla
– 删除尾随的变音符号ç
,这是欧洲键盘布局的常见拼写错误;rm_dir
– 当您尝试删除目录时添加-rf
;scm_correction
– 纠正错误的 scm,如hg log
到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
– 运行pytest
而不是test.py
;touch
– 在“触摸”之前创建丢失的目录;tsuru_login
– 如果未通过身份验证或会话过期,则运行tsuru login
;tsuru_not_command
– 修复错误的tsuru
命令,如tsuru shell
;tmux
– 修复tmux
命令;unknown_command
– 修复 hadoop hdfs 风格的“未知命令”,例如在hdfs dfs ls
上的命令中添加缺少的“-”;unsudo
– 如果进程拒绝以超级用户权限运行,则从之前的命令中删除sudo
。vagrant_up
– 启动 vagrant 实例;whois
– 修复whois
命令;workon_doesnt_exists
– 修复了操作系统建议创建新的virtualenvwrapper
环境名称。wrong_hyphen_before_subcommand
– 删除位置不正确的连字符( apt-install
-> apt install
、 git-log
-> git log
等)yarn_alias
– 修复别名yarn
命令,如yarn ls
;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
和apt-get
调用,例如apt-get isntall vim
;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
– 如果安装了多个版本,则添加--force
到brew uninstall
;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
调用,例如yum isntall vim
;以下命令与The Fuck捆绑在一起,但默认情况下不启用:
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
的文件。规则文件必须包含两个函数:
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
。您的规则不应更改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
更多规则示例、规则实用函数、特定于应用程序/操作系统的帮助程序。
可以在文件$XDG_CONFIG_HOME/thefuck/settings.py
中更改几个The Fuck参数( $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 Fuck的默认行为需要时间来重新运行之前的命令。在即时模式下, The Fuck通过使用脚本记录输出,然后读取日志来节省时间。
目前,即时模式仅支持带有 bash 或 zsh 的 Python 3。 zsh 的自动更正功能也需要禁用才能正常工作。
要启用即时模式,请将--enable-experimental-instant-mode
添加到.bashrc
、 .bash_profile
或.zshrc
中的别名初始化中。
例如:
eval $( thefuck --alias --enable-experimental-instant-mode )
请参阅 CONTRIBUTING.md
项目许可证可在此处找到。