The cli/unexpand@0.1.0 candidate converts runs of spaces to tabs while preserving thecolumn positions of the input. It reads standard input when no file is given,accepts multiple files, and preserves all non-space bytes and line boundaries.
By default only leading blank runs are converted. -a/--all converts runsafter nonblank bytes too. --first-only restricts conversion to the firstleading blank run. -t LIST/--tabs=LIST selects positive, strictly ascendingtab stops and implies --all; a single stop repeats at that width, while anexplicit list preserves blanks beyond its final stop. The default tab stop is8 columns. Invalid lists are rejected with status 2.
Column tracking follows the C-locale byte stream. Existing tabs are preservedand advance to the next configured stop; backspace moves one column left.