junegunn/fzf · error

tab stop must be a positive integer

Error message

tab stop must be a positive integer

What it means

fzf requires --tabstop to be at least 1, since it defines how many columns a tab character occupies. A tabstop of 0 or below would cause division/layout problems, so the check at options.go:3521 rejects opts.Tabstop < 1.

Source

Thrown at src/options.go:3521

			return errors.New("unexpected value for " + arg + ": " + *val)
		}
	}
	*index += len(allArgs)

	if opts.HeaderLines < 0 {
		return errors.New("header lines must be a non-negative integer")
	}

	if opts.HscrollOff < 0 {
		return errors.New("hscroll offset must be a non-negative integer")
	}

	if opts.ScrollOff < 0 {
		return errors.New("scroll offset must be a non-negative integer")
	}

	if opts.Tabstop < 1 {
		return errors.New("tab stop must be a positive integer")
	}

	if len(opts.JumpLabels) == 0 {
		return errors.New("empty jump labels")
	}

	if opts.FreezeLeft < 0 || opts.FreezeRight < 0 {
		return errors.New("number of fields to freeze must be a non-negative integer")
	}

	if validateJumpLabels {
		for _, r := range opts.JumpLabels {
			if r < 32 || r > 126 {
				return errors.New("non-ascii jump labels are not allowed")
			}
		}
	}
	return err

View on GitHub (pinned to bd4efa277b)

Solutions

  1. Use 1 or greater (default is 8)
  2. Clamp computed values to at least 1
  3. Omit the option for the default

Example fix

# before
fzf --tabstop=0
# after
fzf --tabstop=8
Defensive patterns

Strategy: validation

Validate before calling

// Shell: enforce tabstop >= 1
[ "$tabstop" -ge 1 ] || tabstop=8
exec fzf --tabstop="$tabstop"

Prevention

When it happens

Trigger: Passing --tabstop=0 or a negative number. Any value < 1 after parsing triggers errors.New("tab stop must be a positive integer").

Common situations: Scripts passing a computed tab width that collapses to 0; assuming 0 means 'use default'.

Related errors


AI-assisted analysis of junegunn/fzf@bd4efa277b (2026-08-15). Data as JSON: /api/errors/9be046e2738286df. Report an issue: GitHub.