1. 程式人生 > 其它 >TheFuck—Python寫的超實用命令糾正工具

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: command 
not 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 .

最後

大家可以動手試試自己配一個修復命令,還是相當有意思的。

好了今天的分享就到這裡結束了,下次見~