#completion #tabs #power-shell #nu #env-var #variables #blazing

bin+lib posh-tabcomplete

Blazing fast tab completion for powershell

11 unstable releases (3 breaking)

0.4.0 Sep 26, 2024
0.3.0 Sep 4, 2024
0.2.1 Mar 6, 2024
0.2.0 Dec 10, 2023
0.1.2 Mar 13, 2023

#4 in #blazing

MIT/Apache and maybe CC-PDDC

135KB
2.5K SLoC

Nushell 2K SLoC // 0.1% comments Rust 235 SLoC // 0.0% comments PowerShell 184 SLoC // 0.0% comments

posh-tabcomplete

Crates.io Build Status

Blazing fast tab completion for powershell and pwsh.

demo

This video is using the MenuComplete binding in code $PROFILE:

Set-PSReadLineKeyHandler -Key Tab MenuComplete

Features:

  • Fast startup and execution using nushell/nu-engine
  • Extendable using .nu files, with built in support for commmon tasks like git and npm run
  • Supports all platforms. Tested on windows, WSL, mac and linux

By default, completions.nu is used. An alternative .nu file can be specified in the TABCOMPLETE_FILE environment variable.

Installation

Step 1. Install binary

There are binaries available in releases, or with one of these commands:

Repository Instructions
crates.io cargo install posh-tabcomplete --locked

Step 2. Setup powershell

Add this line to your profile, you can edit this by typing code $PROFILE in powershell:

Invoke-Expression (&posh-tabcomplete init | Out-String)

Built in completions

The completions packaged with the binary in completions.nu are:

Benchmarks

To run these, run ./benchmark/benchmark_all.ps1

Benchmark Results
benchmark/init - startup time posh-tabcomplete: 42ms, posh-git: 268ms (6.38x faster)
benchmark/complete - tab completion (100 branches) posh-tabcomplete: 80ms, posh-git: 176ms (2.2x faster)

Aliases / Function support

Functions are supported. For example, the completion of gco in the demo is:

function gco() { git checkout $args }

There is no support for alias completions at this time.

Full list of completions

See completions.nu:

  • git
    • branch
    • checkout
    • cherry-pick
    • fetch
    • merge
    • push
    • rebase
    • switch
    • diff
  • npm
    • run

Dependencies

~74–105MB
~2M SLoC