Skip to content

Commit dc1f574

Browse files
committed
Fix polyglot ftdetect as fallback for native vim
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
1 parent f061edd commit dc1f574

File tree

1 file changed

+9
-11
lines changed

1 file changed

+9
-11
lines changed

autoload/polyglot/init.vim

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -142,14 +142,6 @@ if exists('s:cpo_save')
142142
unlet s:cpo_save
143143
endif
144144

145-
" Load user-defined filetype.vim and oter plugins ftdetect first
146-
" This is to use polyglot-defined ftdetect always as fallback to user settings
147-
augroup filetypedetect
148-
runtime! filetype.vim
149-
runtime! ftdetect/*.vim
150-
augroup END
151-
152-
153145
augroup filetypedetect
154146

155147
" Switch to compatible mode for the time being
@@ -161,11 +153,17 @@ if !has_key(g:polyglot_is_disabled, 'ftdetect')
161153
" It can happen vim filetype.vim loads first, then we need a reset
162154
if exists("did_load_filetypes")
163155
au! filetypedetect
164-
endif
165156

166-
" Prevent filetype.vim of vim from loading again
167-
let did_load_filetypes = 1
157+
" Load user-defined filetype.vim and other plugins ftdetect first
158+
" This is to use polyglot-defined ftdetect always as fallback to user settings
159+
augroup filetypedetect
160+
runtime! filetype.vim
161+
runtime! ftdetect/*.vim
162+
augroup END
168163

164+
" Prevent filetype.vim of vim from loading again
165+
let did_load_filetypes = 1
166+
endif
169167

170168
" DO NOT EDIT CODE BELOW, IT IS GENERATED WITH MAKEFILE
171169

0 commit comments

Comments
 (0)