TheFuck—Python寫的超實用命令糾正工具
哈嘍兄弟們,我們在學習Python的過程中,有這麼一款工具,可以輕鬆糾正我們寫錯的命令,簡直太好用了~
The Fuck 是一款功能強大的、Python編寫的應用程式,可用於糾正控制檯命令中的錯誤,非常強大。此外,使用者還可通過寫Python程式碼的方式自定義修復規則。
修復效果如下動圖所示:
更多示例如:
自動識別沒有許可權,在命令前面新增 sudo
➜ 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: commandnot found: puthon ➜ fuck python [enter/↑/↓/ctrl+c] Python 3.4.2 (default, Oct 8 2014, 13:08:17)
如果你不擔心fuck修正的結果是錯誤的,你可以禁用require_confirmation 選項,讓fuck自動執行更正的命令:
➜ 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
在開發機上可以這麼做,在生產機器上最好是謹慎一點,不推薦這麼做。
安裝
在OS X上,可以通過Homebrew(或在Linux上通過Linuxbrew)安裝The Fuck:
brew install thefuck
在Ubuntu / Mint上,使用以下命令安裝The Fuck:
sudo apt update sudo apt install python3-dev python3-pip python3-setuptools sudo pip3 install thefuck
在FreeBSD上,使用以下命令安裝The Fuck:
pkg install thefuck
在其他系統上, 使用pip安裝The Fuck:
pip install thefuck
配置
接下來需要把這個命令寫入到啟動指令碼中,根據你的終端型別,執行相應的命令即可:
Bash
chcp.com 65001 eval "$(thefuck --alias)"
其中 http://chcp.com 65001 只有在windows環境下才需要執行。
Zsh
eval "$(thefuck --alias)"
原理
其實TheFuck的原理就是規則匹配(正則表示式),如果找到匹配規則的命令,則建立一個命令給使用者選擇或直接執行。
預設情況下的規則有:
- cat_dir - 當你嘗試cat目錄的時候,用ls替換cat;
- cd_correction – 拼寫檢查和糾正失敗的cd命令;
- cd_mkdir – 在進入目錄之前建立目錄;
- cd_parent – 更改 cd… 為cd …;
- dry – 修復類似的重複問題:git git push;
- fix_alt_space – 用空格字元代替Alt + Space;
等等,具體可以在官方文件中找到:
https://github.com/nvbn/thefuck
建立自己的修復規則
要新增自己的規則,在 ~/.config/thefuck/rules 資料夾中,
建立一個檔名為 your-rule-name.py 的規則檔案,其中必須包含兩個函式:
match(command: Command) -> bool
get_new_command(command: Command) -> str | list[str]
下面是簡單的 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
# 兄弟們學習python,有時候不知道怎麼學,從哪裡開始學。掌握了基本的一些語法或者做了兩個案例後,不知道下一步怎麼走,不知道如何去學習更加高深的知識。 # 那麼對於這些大兄弟們,我準備了大量的免費視訊教程,PDF電子書籍,以及原始碼! # 直接在這個君羊 872937351 自取即可
如果命令執行結果出現 permission denied 或者 EACCES,則執行 sudo xxx.
此外,還可以配置side_effect,如果你配置了enabled_by_default = True,side_effect函式內的操作將會被執行,本例中是對當前目錄下的資料夾執行賦權操作: chmod 777 .
最後
大家可以動手試試自己配一個修復命令,還是相當有意思的。
好了今天的分享就到這裡結束了,下次見~