blob: faac3cb0a9f102b2a87c0d1006017252256e6d98 [file] [log] [blame] [view]
Project: /_project.yaml
Book: /_book.yaml
# Command-Line Completion
You can enable command-line completion (also known as tab-completion) in Bash
and Zsh. This lets you tab-complete command names, flags names and flag values,
and target names.
## Bash {:#bash}
Bazel comes with a Bash completion script.
If you installed Bazel:
* From the APT repository, then you're done -- the Bash completion script is
already installed in `/etc/bash_completion.d`.
* From Homebrew, then you're done -- the Bash completion script is
already installed in `$(brew --prefix)/etc/bash_completion.d`.
* From the installer downloaded from GitHub, then:
1. Locate the absolute path of the completion file. The installer copied it
to the `bin` directory.
Example: if you ran the installer with `--user`, this will be
`$HOME/.bazel/bin`. If you ran the installer as root, this will be
`/usr/local/lib/bazel/bin`.
2. Do one of the following:
* Either copy this file to your completion directory (if you have
one).
Example: on Ubuntu this is the `/etc/bash_completion.d` directory.
* Or source the completion file from Bash's RC file.
Add a line similar to the one below to your `~/.bashrc` (on Ubuntu)
or `~/.bash_profile` (on macOS), using the path to your completion
file's absolute path:
```
source /path/to/bazel-complete.bash
```
* Via [bootstrapping](/install/compile-source), then:
1. Build the completion script:
```
bazel build //scripts:bazel-complete.bash
```
2. The completion file is built under
`bazel-bin/scripts/bazel-complete.bash`.
Do one of the following:
* Copy this file to your completion directory, if you have
one.
Example: on Ubuntu this is the `/etc/bash_completion.d` directory
* Copy it somewhere on your local disk, such as to `$HOME`, and
source the completion file from Bash's RC file.
Add a line similar to the one below to your `~/.bashrc` (on Ubuntu)
or `~/.bash_profile` (on macOS), using the path to your completion
file's absolute path:
```
source /path/to/bazel-complete.bash
```
## Zsh {:#zsh}
Bazel comes with a Zsh completion script.
If you installed Bazel:
* From the APT repository, then you're done -- the Zsh completion script is
already installed in `/usr/share/zsh/vendor-completions`.
> If you have a heavily customized `.zshrc` and the autocomplete
> does not function, try one of the following solutions:
>
> Add the following to your `.zshrc`:
>
> ```
> zstyle :compinstall filename '/home/tradical/.zshrc'
>
> autoload -Uz compinit
> compinit
> ```
>
> or
>
> Follow the instructions
> [here](https://stackoverflow.com/questions/58331977/bazel-tab-auto-complete-in-zsh-not-working)
>
> If you are using `oh-my-zsh`, you may want to install and enable
> the `zsh-autocomplete` plugin. If you'd prefer not to, use one of the
> solutions described above.
* From Homebrew, then you're done -- the Zsh completion script is
already installed in `$(brew --prefix)/share/zsh/site-functions`.
* From the installer downloaded from GitHub, then:
1. Locate the absolute path of the completion file. The installer copied it
to the `bin` directory.
Example: if you ran the installer with `--user`, this will be
`$HOME/.bazel/bin`. If you ran the installer as root, this will be
`/usr/local/lib/bazel/bin`.
2. Add this script to a directory on your `$fpath`:
```
fpath[1,0]=~/.zsh/completion/
mkdir -p ~/.zsh/completion/
cp /path/from/above/step/_bazel ~/.zsh/completion
```
You may have to call `rm -f ~/.zcompdump; compinit`
the first time to make it work.
3. Optionally, add the following to your .zshrc.
```
# This way the completion script does not have to parse Bazel's options
# repeatedly. The directory in cache-path must be created manually.
zstyle ':completion:*' use-cache on
zstyle ':completion:*' cache-path ~/.zsh/cache
```