コマンドを打ち間違えたらf**kしよう![thefuck]

みなさんコマンドを打ち間違えることありませんか?


今回はそんな打ち間違えたコマンドを治してくれる魔法のコマンド`fuck`を紹介したいと思います。

# インストール
pipかHomebrewでインストールすることができます。

```zsh:zsh
brew install thefuck
```

```zsh:zsh
pip install thefuck
```

shellに下記を記述して、読み込みます。
私はzshだったので.zshrcに書いて読み込みました
```.zshrc
eval $(thefuck --alias)
```
```zsh:zsh
source ~/.zshrc
```

# 使ってみる

例えば下のようにコマンドを打ち間違えたとします。
```zsh:zsh
❯ git poll origin develop
git: 'poll' is not a git command. See 'git --help'.

The most similar command is
        pull

```

その場合に`fuck`とコマンドを打つと修正してくれます。
```zsh:zsh
fuck
```

```zsh:zsh
❯ fuck
git pull origin develop [enter/↑/↓/ctrl+c]
From https://github.com/maooz4426/Todolist-go-clean
 * branch            develop    -> FETCH_HEAD
Already up to date
```

docker composeしたいって時でも
```zsh:zsh
❯ dockrr compose up
zsh: command not found: dockrr
```
`fuck`したらコマンドを修正することができました。
```zsh:zsh
❯ fuck
docker compose up [enter/↑/↓/ctrl+c]
[+] Building 18.8s (11/11) FINISHED
```

# 使えなかったケース
例えば下のコマンドようにdocker compose upをミスった時は動いてくれませんでした。
```zsh:zsh
❯ docker compose yp

Usage:  docker compose [OPTIONS] COMMAND

Define and run multi-container applications with Docker

Options:
      --all-resources              Include all resources, even those not used by services
      --ansi string                Control when to print ANSI control characters ("never"|"always"|"auto") (default "auto")
      --compatibility              Run compose in backward compatibility mode
      --dry-run                    Execute command in dry run mode
      --env-file stringArray       Specify an alternate environment file
  -f, --file stringArray           Compose configuration files
      --parallel int               Control max parallelism, -1 for unlimited (default -1)
      --profile stringArray        Specify a profile to enable
      --progress string            Set type of progress output (auto, tty, plain, json, quiet) (default "auto")
      --project-directory string   Specify an alternate working directory
                                   (default: the path of the, first specified, Compose file)
  -p, --project-name string        Project name

Commands:
  attach      Attach local standard input, output, and error streams to a service's running container
  build       Build or rebuild services
  config      Parse, resolve and render compose file in canonical format
  cp          Copy files/folders between a service container and the local filesystem
  create      Creates containers for a service
  down        Stop and remove containers, networks
  events      Receive real time events from containers
  exec        Execute a command in a running container
  images      List images used by the created containers
  kill        Force stop service containers
  logs        View output from containers
  ls          List running compose projects
  pause       Pause services
  port        Print the public port for a port binding
  ps          List containers
  pull        Pull service images
  push        Push service images
  restart     Restart service containers
  rm          Removes stopped service containers
  run         Run a one-off command on a service
  scale       Scale services
  start       Start services
  stats       Display a live stream of container(s) resource usage statistics
  stop        Stop services
  top         Display the running processes
  unpause     Unpause services
  up          Create and start containers
  version     Show the Docker Compose version information
  wait        Block until the first service container stops
  watch       Watch build context for service and rebuild/refresh containers when files are updated

Run 'docker compose COMMAND --help' for more information on a command.
unknown docker command: "compose yp"
```

このコマンドでは無理そうです。
```zsh:zsh
❯ fuck
docker compose COMMAND --help [enter/↑/↓/ctrl+c]
```

# まとめ
fuckコマンドで簡単にコマンドの修正を行うことができました。

ただ、自動保管できないコマンドもあるようなので、イライラした時にだけ使った方が良さそうですね...
>というかqiitaに書くような単語じゃない