🦁

Neovimのファイルタイプ検出は自分で微調整できるよ

に公開

この記事はVim駅伝の2025-10-17の記事です。

前回の記事はtaketsさんのごめん、カーソル移動を効率的にするヘルシェイク矢野.vimのこと考えてたです。連打起動系の機能はmini.keymapでも実現できるかもしれませんね。

Vim駅伝は常に参加者を募集しています。詳しくはこちらのページをご覧ください。


この辺を読んで知りました。

https://github.com/neovim/neovim/discussions/26571#discussioncomment-11879196

https://github.com/lttb/gh-actions-language-server#configuration-for-neovim

Neovimはデフォルトでファイルタイプを検出してくれます。たとえばyamlファイルはyamlのファイルタイプになります。vim.filetype.addを使うとファイル名とファイルタイプの対応を自分で定義できるのですが、yaml.github-actionsのようなドット区切りのファイルタイプもつけることができます。

筆者はこんな感じで設定しています。

init.lua
vim.filetype.add({
  pattern = {
    ['compose.*%.ya?ml'] = 'yaml.docker-compose',
    ['docker%-compose.*%.ya?ml'] = 'yaml.docker-compose',
    ['.*/%.github/workflows/.*%.ya?ml'] = 'yaml.github-actions',
    ['%.env.*'] = 'sh.env',
  },
})

区切りの最初の部分はハイライトなどに使われるようで、yaml.github-actionsというファイルタイプでもyamlファイルのハイライトが適用されます。

このファイルタイプをlspの起動条件にすることで、「GitHub Actions用のyamlファイルでのみ起動」という設定を簡単に書くことができます。

nvim-config/after/lsp/gh_actions_ls.lua
return {
  filetypes = { 'yaml.github-actions' },
}

なお、yaml.github-actionsに対してはfiletypes = { 'yaml' }を条件とするlspはアタッチされません。ここは完全一致のようです。

これはlspだけでなくautocmd Filetypeにも関係します。「この設定ファイルを開いたときはNeovimに特別な反応をさせたいな」といった場合があれば、覚えておくと役立つかもしれません。

関連記事

https://blog.atusy.net/2025/04/15/nvim-filetype-matching-with-shebang/

https://blog.atusy.net/2023/01/11/neovim-filetype-matching-with-chezmoi/

Discussion