Vim
プラグインの ALE, vim-lsp, yegappan/lsp, coc.nvim のいずれかで設定できます。どの方法も PATH 上の nuten を呼び出すので、先に nuten の インストール が必要です。PATH にない nuten を使う場合は、例の nuten をそのパスに置き換えてください。
Vim が filetype nu と判定するのは、9.0.2131 以降の .nu だけです。.nuon も整形したい場合や古い Vim を使う場合は、次の設定で filetype nu を割り当てます。
autocmd BufRead,BufNewFile *.nu,*.nuon setfiletype nu
ALE
ALE の fixer として登録します。言語サーバーは使わず、バッファの内容を標準入力で nuten format に渡して整形します。
augroup nuten
autocmd!
autocmd FileType nu let b:ale_fixers = [{buffer -> {'command': 'nuten format --stdin-filepath %s -'}}]
autocmd FileType nu let b:ale_fix_on_save = 1
augroup END
--stdin-filepath でバッファのパスも渡しているので、Nuten はそのパスを基準に設定ファイルを探します。
vim-lsp
vim-lsp に nuten lsp を言語サーバーとして登録し、保存時に整形します。
function! s:on_lsp_buffer_enabled() abort
if &filetype ==# 'nu'
autocmd! nuten BufWritePre <buffer> LspDocumentFormatSync
endif
endfunction
if executable('nuten')
augroup nuten
autocmd!
autocmd User lsp_setup call lsp#register_server({
\ 'name': 'nuten',
\ 'cmd': {server_info -> ['nuten', 'lsp']},
\ 'allowlist': ['nu'],
\ })
autocmd User lsp_buffer_enabled call s:on_lsp_buffer_enabled()
augroup END
endif
yegappan/lsp
yegappan/lsp に nuten lsp を言語サーバーとして登録し、保存時に整形します。Vim 9.0 以降が必要です。
function! s:on_lsp_attached() abort
if &filetype ==# 'nu'
autocmd! nuten BufWritePre <buffer> LspFormat
endif
endfunction
augroup nuten
autocmd!
autocmd User LspSetup call LspAddServer([#{
\ name: 'nuten',
\ filetype: ['nu'],
\ path: 'nuten',
\ args: ['lsp'],
\ }])
autocmd User LspAttached call s:on_lsp_attached()
augroup END
coc.nvim
coc.nvim の coc-settings.json に nuten lsp を言語サーバーとして登録し、保存時に整形します。Vim 9.0.0438 以降と Node.js が必要です。
{
"languageserver": {
"nuten": {
"command": "nuten",
"args": ["lsp"],
"filetypes": ["nu"]
}
},
"[nu]": {
"coc.preferences.formatOnSave": true
}
}