Skip to content

Garbled stdout (spinner/control characters) when running prek in Neovim/Fugitive #1551

@pesap

Description

@pesap

Summary

On my Neovim setup I use Fugitive to commit, which runs my pre-commit hooks. When I run pre-commit directly, the stdout renders correctly. But when it runs via prek , the output includes strange/garbled characters (looks like control sequences from a progress spinner).

Is this expected? If not, is there a way to disable the spinner/progress animation so the output is plain text?

Environment:

  • Neovim
  • vim-fugitive (commit workflow)
  • pre-commit hooks run during commit

Platform

Darwin 24.6.0 arm64

Version

0.2.29

.pre-commit-config.yaml

default_stages:
  - pre-commit

default_install_hook_types:
  - pre-commit
  - commit-msg
  - pre-push

repos:
  - repo: local
    hooks:
      - id: ruff-format
        name: ruff format
        entry: uv run ruff format --verbose
        language: system
        types_or: [python, pyi]

      - id: ruff-check
        name: ruff check
        entry: uv run ruff check --fix --config=pyproject.toml
        language: system
        types_or: [python, pyi]

      - id: ty-check
        name: ty check
        entry: uv run ty check src/
        language: system
        types_or: [python, pyi]

  - repo: builtin
    hooks:
      - id: trailing-whitespace
      - id: check-added-large-files
      - id: end-of-file-fixer
      - id: detect-private-key
      - id: trailing-whitespace
      - id: check-added-large-files
      - id: check-case-conflict
      - id: end-of-file-fixer
      - id: fix-byte-order-marker
      - id: check-json
      - id: check-toml
      - id: check-yaml
      - id: check-xml
      - id: mixed-line-ending
      - id: check-symlinks
      - id: check-merge-conflict
      - id: detect-private-key
      - id: check-executables-have-shebangs

  - repo: https://github.com/commitizen-tools/commitizen
    rev: v4.10.0
    hooks:
      - id: commitizen
        stages:
          - commit-msg

  - repo: local
    hooks:
      - id: pytest
        name: pytest (quick)
        entry: uv run pytest -q -m "not slow" --maxfail=1 --disable-warnings
        language: system
        types: [python]
        pass_filenames: false
        stages: [pre-push]


  - repo: https://github.com/astral-sh/uv-pre-commit
    # uv version.
    rev: 0.9.4
    hooks:
      - id: uv-lock

Log file

Here is an example of the render output that I see on neovim.

[2Kruff format..............................................................
^[[2K^[[1Aruff format..............................................................                   ^[[1A
^[[2Kruff format..............................................................Passed
^[[2Kruff check...............................................................
^[[2K^[[1Aruff check...............................................................                   ^[[1A
^[[2Kruff check...............................................................Passed
^[[2Kty check.................................................................
^[[2K^[[1Aty check.................................................................                   ^[[1A
^[[2K^[[1Aty check.................................................................                   ^[[1A
^[[2Kty check.................................................................Passed
^[[2Kdocstring coverage.......................................................
^[[2K^[[1Adocstring coverage.......................................................                   ^[[1A
^[[2Kdocstring coverage.......................................................Failed
- hook id: docstring-coverage
- exit code: 2

  error: Failed to spawn: `docstr-coverage`
    Caused by: No such file or directory (os error 2)
^[[2Ktrim trailing whitespace.................................................Passed
^[[2Kcheck for added large files..............................................Passed
^[[2Kfix end of files.........................................................Passed
^[[2Kcheck for case conflicts.................................................Passed
^[[2Kfix utf-8 byte order marker..............................................Passed
^[[2Kcheck json...........................................(no files to check)Skipped
^[[2Kcheck toml...........................................(no files to check)Skipped
^[[2Kcheck yaml...........................................(no files to check)Skipped
^[[2Kcheck xml............................................(no files to check)Skipped
^[[2Kmixed line ending........................................................Passed
^[[2Kcheck for broken symlinks............................(no files to check)Skipped
^[[2Kcheck for merge conflicts................................................Passed
^[[2Kdetect private key.......................................................Passed
^[[2Kdon't commit to branch...................................................Passed
^[[2Kcheck that executables have shebangs.................(no files to check)Skipped
^[[2Kuv-lock..............................................(no files to check)Skipped
^[[2K

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions