Skip to content

Conversation

@alerque
Copy link

@alerque alerque commented Oct 3, 2025

The current rule is incorrect and leaves out common valid filename patterns. The result is that what would work otherwise is actually broken by this plugin. Vim and Neovim both ship with correct patterns that recognize Justfile, and the vim-just plugin does the same. Any combination of vanilla editors and that plugin work file, but adding vim-polyglot breaks it entirely.

Closes NoahTheDuke/vim-just#125

Kache added a commit to Kache/vim-polyglot that referenced this pull request Nov 10, 2025
Fix ftdetect for ft ext defined only by native vim, e.g.
`*.jjdescription`, `*.http`, `*.mysql_history`, & others

It seems vim-polyglot loads vim-`filetype.vim` then clobbers it by
"resetting" with `au! filetypedetect` afterwards, even though
vim-polyglot intends to be a fallback, according to comments in
`init.vim`

This is evidenced by `*.jjdescription`, `*.http`, and `.mysql_history`,
filetype extensions defined in vim-`filetype.vim` but not
polyglot-`filetype.vim`:

    vim -c "redir >> /dev/stdout" -c "set filetype?" -c "redir END" -c "sleep 3" -c "quit" foo.jjdescription
    vim -c "redir >> /dev/stdout" -c "set filetype?" -c "redir END" -c "sleep 3" -c "quit" foo.http
    vim -c "redir >> /dev/stdout" -c "set filetype?" -c "redir END" -c "sleep 3" -c "quit" .mysql_history

Compare:

    vim --clean -c "redir >> /dev/stdout" -c "set filetype?" -c "redir END" -c "sleep 3" -c "quit" foo.jjdescription
    vim --clean -c "redir >> /dev/stdout" -c "set filetype?" -c "redir END" -c "sleep 3" -c "quit" foo.http
    vim --clean -c "redir >> /dev/stdout" -c "set filetype?" -c "redir END" -c "sleep 3" -c "quit" .mysql_history

And:

    vim -c "redir >> /dev/stdout" -c "set filetype?" -c "redir END" -c "sleep 3" -c "quit" foo.py
    vim -c "redir >> /dev/stdout" -c "set filetype?" -c "redir END" -c "sleep 3" -c "quit" foo.bash
    vim -c "redir >> /dev/stdout" -c "set filetype?" -c "redir END" -c "sleep 3" -c "quit" foo.js

Note although vim-polyglot does not define `bash.vim` nor
`javascript.vim`, polyglot-`filetype.vim` does define the `*.bash` and
`*.js` extensions, so they "still work"

I'm using `vim --version` and vim-plug:

    VIM - Vi IMproved 9.1 (2024 Jan 02, compiled May 23 2025 00:48:59)
    Included patches: 1-948, 950-1230, 1242, 1244

Tried to retain original intent to first load poly-`filetype.vim` then
vim-`filetype.vim` on top. Early workarounds:
 * disable vim-polyglot ftdetect `let g:polyglot_disabled = ['ftdetect']`
 * `init.vim`: comment out `au! filetypedetect`
 * `init.vim`: comment out `Load user-defined...` and `Prevent filetype.vim...` paragraphs

Unsure how to test "vim-`filetype.vim` loads first case", which seems
related to [handling nvim and other package managers](sheerun/issues/706#issuecomment-826067169),
which I haven't done

My print debugging output below, indentations for clarity.

Before:
```
poly filetype.vim start
  init.vim start
    init.vim did_load_polyglot: false
    init.vim runtime! filetype.vim
      poly filetype.vim start
	init.vim init() no-op
      poly filetype.vim end
      vim filetype.vim start
	init.vim init() no-op
      vim filetype.vim end
    init.vim init() no-op
    init.vim did_load_filetypes: true
  init.vim end
  init.vim init() no-op
poly filetype.vim end
vim filetype.vim start
vim filetype.vim finish early
polyglot.vim start
  init.vim init() no-op
polyglot.vim finish
```

After:
```
poly filetype.vim start
  init.vim start
    init.vim did_load_polyglot: false
    init.vim did_load_filetypes: false
  init.vim end
  init.vim init() no-op
poly filetype.vim end
vim filetype.vim start
  init.vim init() no-op
vim filetype.vim end
polyglot.vim start
  init.vim init() no-op
polyglot.vim finish
```

Related: sheerun#706, sheerun#758, sheerun#756, sheerun#758, sheerun#871, NoahTheDuke/vim-just#125
Fix: sheerun#877, sheerun#125, sheerun#829, sheerun#845, sheerun#817
Kache added a commit to Kache/vim-polyglot that referenced this pull request Nov 10, 2025
Fix ftdetect for ft ext defined only by native vim, e.g.
`*.jjdescription`, `*.http`, `*.mysql_history`, & others

It seems vim-polyglot loads vim-`filetype.vim` then clobbers it by
"resetting" with `au! filetypedetect` afterwards, even though
vim-polyglot intends to be a fallback, according to comments in
`init.vim`

This is evidenced by `*.jjdescription`, `*.http`, and `.mysql_history`,
filetype extensions defined in vim-`filetype.vim` but not
polyglot-`filetype.vim`:

    vim -c "redir >> /dev/stdout" -c "set filetype?" -c "redir END" -c "sleep 3" -c "quit" foo.jjdescription
    vim -c "redir >> /dev/stdout" -c "set filetype?" -c "redir END" -c "sleep 3" -c "quit" foo.http
    vim -c "redir >> /dev/stdout" -c "set filetype?" -c "redir END" -c "sleep 3" -c "quit" .mysql_history

Compare:

    vim --clean -c "redir >> /dev/stdout" -c "set filetype?" -c "redir END" -c "sleep 3" -c "quit" foo.jjdescription
    vim --clean -c "redir >> /dev/stdout" -c "set filetype?" -c "redir END" -c "sleep 3" -c "quit" foo.http
    vim --clean -c "redir >> /dev/stdout" -c "set filetype?" -c "redir END" -c "sleep 3" -c "quit" .mysql_history

And:

    vim -c "redir >> /dev/stdout" -c "set filetype?" -c "redir END" -c "sleep 3" -c "quit" foo.py
    vim -c "redir >> /dev/stdout" -c "set filetype?" -c "redir END" -c "sleep 3" -c "quit" foo.bash
    vim -c "redir >> /dev/stdout" -c "set filetype?" -c "redir END" -c "sleep 3" -c "quit" foo.js

Note although vim-polyglot does not define `bash.vim` nor
`javascript.vim`, polyglot-`filetype.vim` does define the `*.bash` and
`*.js` extensions, so they "still work"

I'm using `vim --version` and vim-plug:

    VIM - Vi IMproved 9.1 (2024 Jan 02, compiled May 23 2025 00:48:59)
    Included patches: 1-948, 950-1230, 1242, 1244

Tried to retain original intent to first load poly-`filetype.vim` then
vim-`filetype.vim` on top. Early workarounds:
 * disable vim-polyglot ftdetect `let g:polyglot_disabled = ['ftdetect']`
 * `init.vim`: comment out `au! filetypedetect`
 * `init.vim`: comment out `Load user-defined...` and `Prevent filetype.vim...` paragraphs

Unsure how to test "vim-`filetype.vim` loads first case", which seems
related to [handling nvim and other package managers](sheerun/issues/706#issuecomment-826067169),
which I haven't done

My print debugging output below, indentations for clarity.

Before:
```
poly filetype.vim start
  init.vim start
    init.vim did_load_polyglot: false
    init.vim runtime! filetype.vim
      poly filetype.vim start
	init.vim init() no-op
      poly filetype.vim end
      vim filetype.vim start
	init.vim init() no-op
      vim filetype.vim end
    init.vim init() no-op
    init.vim did_load_filetypes: true
  init.vim end
  init.vim init() no-op
poly filetype.vim end
vim filetype.vim start
vim filetype.vim finish early
polyglot.vim start
  init.vim init() no-op
polyglot.vim finish
```

After:
```
poly filetype.vim start
  init.vim start
    init.vim did_load_polyglot: false
    init.vim did_load_filetypes: false
  init.vim end
  init.vim init() no-op
poly filetype.vim end
vim filetype.vim start
  init.vim init() no-op
vim filetype.vim end
polyglot.vim start
  init.vim init() no-op
polyglot.vim finish
```

Related: sheerun#706, sheerun#758, sheerun#756, sheerun#758, sheerun#871, NoahTheDuke/vim-just#125
Fix: sheerun#877, sheerun#829, sheerun#845, sheerun#817
Kache added a commit to Kache/vim-polyglot that referenced this pull request Dec 3, 2025
Fix ftdetect for ft ext defined only by native vim, e.g.
`*.jjdescription`, `*.http`, `*.mysql_history`, & others

It seems vim-polyglot loads vim-`filetype.vim` then clobbers it by
"resetting" with `au! filetypedetect` afterwards, even though
vim-polyglot intends to be a fallback, according to comments in
`init.vim`

This is evidenced by `*.jjdescription`, `*.http`, and `.mysql_history`,
filetype extensions defined in vim-`filetype.vim` but not
polyglot-`filetype.vim`:

    vim -c "redir >> /dev/stdout" -c "set filetype?" -c "redir END" -c "sleep 3" -c "quit" foo.jjdescription
    vim -c "redir >> /dev/stdout" -c "set filetype?" -c "redir END" -c "sleep 3" -c "quit" foo.http
    vim -c "redir >> /dev/stdout" -c "set filetype?" -c "redir END" -c "sleep 3" -c "quit" .mysql_history

Compare:

    vim --clean -c "redir >> /dev/stdout" -c "set filetype?" -c "redir END" -c "sleep 3" -c "quit" foo.jjdescription
    vim --clean -c "redir >> /dev/stdout" -c "set filetype?" -c "redir END" -c "sleep 3" -c "quit" foo.http
    vim --clean -c "redir >> /dev/stdout" -c "set filetype?" -c "redir END" -c "sleep 3" -c "quit" .mysql_history

And:

    vim -c "redir >> /dev/stdout" -c "set filetype?" -c "redir END" -c "sleep 3" -c "quit" foo.py
    vim -c "redir >> /dev/stdout" -c "set filetype?" -c "redir END" -c "sleep 3" -c "quit" foo.bash
    vim -c "redir >> /dev/stdout" -c "set filetype?" -c "redir END" -c "sleep 3" -c "quit" foo.js

Note although vim-polyglot does not define `bash.vim` nor
`javascript.vim`, polyglot-`filetype.vim` does define the `*.bash` and
`*.js` extensions, so they "still work"

I'm using `vim --version` and vim-plug:

    VIM - Vi IMproved 9.1 (2024 Jan 02, compiled May 23 2025 00:48:59)
    Included patches: 1-948, 950-1230, 1242, 1244

Tried to retain original intent to first load poly-`filetype.vim` then
vim-`filetype.vim` on top. Early workarounds:
 * disable vim-polyglot ftdetect `let g:polyglot_disabled = ['ftdetect']`
 * `init.vim`: comment out `au! filetypedetect`
 * `init.vim`: comment out `Load user-defined...` and `Prevent filetype.vim...` paragraphs

Unsure how to test "vim-`filetype.vim` loads first case", which seems
related to [handling nvim and other package managers](sheerun/issues/706#issuecomment-826067169),
which I haven't done

My print debugging output below, indentations for clarity.

Before:
```
poly filetype.vim start
  init.vim start
    init.vim did_load_polyglot: false
    init.vim runtime! filetype.vim
      poly filetype.vim start
	init.vim init() no-op
      poly filetype.vim end
      vim filetype.vim start
	init.vim init() no-op
      vim filetype.vim end
    init.vim init() no-op
    init.vim did_load_filetypes: true
  init.vim end
  init.vim init() no-op
poly filetype.vim end
vim filetype.vim start
vim filetype.vim finish early
polyglot.vim start
  init.vim init() no-op
polyglot.vim finish
```

After:
```
poly filetype.vim start
  init.vim start
    init.vim did_load_polyglot: false
    init.vim did_load_filetypes: false
  init.vim end
  init.vim init() no-op
poly filetype.vim end
vim filetype.vim start
  init.vim init() no-op
vim filetype.vim end
polyglot.vim start
  init.vim init() no-op
polyglot.vim finish
```

Related: sheerun#706, sheerun#758, sheerun#756, sheerun#871, NoahTheDuke/vim-just#125
Fix: sheerun#877, sheerun#829, sheerun#845, sheerun#817
Kache added a commit to Kache/vim-polyglot that referenced this pull request Dec 3, 2025
Fix ftdetect for ft ext defined only by native vim, e.g.
`*.jjdescription`, `*.http`, `*.mysql_history`, & others

It seems vim-polyglot loads vim-`filetype.vim` then clobbers it by
"resetting" with `au! filetypedetect` afterwards, even though
vim-polyglot intends to be a fallback, according to comments in
`init.vim`

This is evidenced by `*.jjdescription`, `*.http`, and `.mysql_history`,
filetype extensions defined in vim-`filetype.vim` but not
polyglot-`filetype.vim`:

    vim -c "set filetype?" -c 'sleep 2' -c 'q!' foo.jjdescription
    vim -c "set filetype?" -c 'sleep 2' -c 'q!' foo.http
    vim -c "set filetype?" -c 'sleep 2' -c 'q!' .mysql_history

Compare:

    vim --clean -c "set filetype?" -c 'sleep 2' -c 'q!' foo.jjdescription
    vim --clean -c "set filetype?" -c 'sleep 2' -c 'q!' foo.http
    vim --clean -c "set filetype?" -c 'sleep 2' -c 'q!' .mysql_history

And:

    vim -c "set filetype?" -c 'sleep 2' -c 'q!' foo.py
    vim -c "set filetype?" -c 'sleep 2' -c 'q!' foo.bash
    vim -c "set filetype?" -c 'sleep 2' -c 'q!' foo.js

Note although vim-polyglot does not define `bash.vim` nor
`javascript.vim`, polyglot-`filetype.vim` does define the `*.bash` and
`*.js` extensions, so they "still work"

I'm using `vim --version` and vim-plug:

    VIM - Vi IMproved 9.1 (2024 Jan 02, compiled May 23 2025 00:48:59)
    Included patches: 1-948, 950-1230, 1242, 1244

Tried to retain original intent to first load poly-`filetype.vim` then
vim-`filetype.vim` on top. Early workarounds:
 * disable vim-polyglot ftdetect `let g:polyglot_disabled = ['ftdetect']`
 * `init.vim`: comment out `au! filetypedetect`
 * `init.vim`: comment out `Load user-defined...` and `Prevent filetype.vim...` paragraphs

Unsure how to test "vim-`filetype.vim` loads first case", which seems
related to [handling nvim and other package managers](sheerun/issues/706#issuecomment-826067169),
which I haven't done

My print debugging output below, indentations for clarity.

Before:
```
poly filetype.vim start
  init.vim start
    init.vim did_load_polyglot: false
    init.vim runtime! filetype.vim
      poly filetype.vim start
	init.vim init() no-op
      poly filetype.vim end
      vim filetype.vim start
	init.vim init() no-op
      vim filetype.vim end
    init.vim init() no-op
    init.vim did_load_filetypes: true
  init.vim end
  init.vim init() no-op
poly filetype.vim end
vim filetype.vim start
vim filetype.vim finish early
polyglot.vim start
  init.vim init() no-op
polyglot.vim finish
```

After:
```
poly filetype.vim start
  init.vim start
    init.vim did_load_polyglot: false
    init.vim did_load_filetypes: false
  init.vim end
  init.vim init() no-op
poly filetype.vim end
vim filetype.vim start
  init.vim init() no-op
vim filetype.vim end
polyglot.vim start
  init.vim init() no-op
polyglot.vim finish
```

Related: sheerun#706, sheerun#758, sheerun#756, sheerun#871, NoahTheDuke/vim-just#125
Fix: sheerun#877, sheerun#829, sheerun#845, sheerun#817
@Kache
Copy link

Kache commented Dec 3, 2025

my #878 addresses this issue for me, demo:

vim -c "set filetype?" -c 'sleep 2' -c 'q!' Justfile
vim -c "set filetype?" -c 'sleep 2' -c 'q!' .justfile
vim -c "set filetype?" -c 'sleep 2' -c 'q!' .Justfile

@alerque
Copy link
Author

alerque commented Dec 3, 2025

@Kache Your PR does not "fix" this problem. It never runs into the problem because newer versions of VIM ship with support so you're skipping loading this at all (which is fine), but this issue would still exist for people that have older versions of VIM.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Unable to detect (capitalized) Justfile as ft=just

2 participants