恥は/dev/nullへ by 初心者

プログラミング素人がのろのろと学んだことをつづっています♪

Neovimでautocmdとcolorschemeの設定をする

情報源

今回の情報源も以下のLua-guideです。

Lua-guide - Neovim docs


autocmdの設定

Vimに記述しているautocmdをNeovimにも設定してみようと調べてみました。

Vimで以下の設定をしているとして、

augroup vimrc
  autocmd!
  autocmd FileType vim setlocal keywordprg=:help
augroup END


これをNeovimのinit.luaに記述する場合、次のようになります。

vim.api.nvim_create_augroup('vimrc', { clear = true })
vim.api.nvim_create_autocmd({ 'FileType' }, {
  pattern = 'vim',
  group = 'vimrc',
  command = 'setlocal keywordprg=:help',
})

1行目で vimrcというaugroupを作成しています。clear = trueはautocmd!の役割を担っています。 2行目以降は見たまんまで、FileTypeがvimの時にcommand行で指定したsetlocal keywordprg=:help を実行します。

Lua-guideに載っていた例を真似して下から2行目の行末に , を記述していますが、別に記述しなくても問題ありません。

Markdownファイルを編集している時に一部の _ (アンダースコア)がハイライトする問題に対処するため、以下のautocmdを記述してみました。

-- Markdownファイルにおいて一部の _ がハイライトするのを防止する
local cmhgroup = vim.api.nvim_create_augroup('clear_markdownError_highlight', { clear = true })
vim.api.nvim_create_autocmd({ 'FileType' }, {
  pattern = 'markdown',
  group = cmhgroup,
  command = 'highlight link markdownError NONE'
})

1行目でclear_markdownError_highlightというaugroupを作成しています。先の例と同じくclear = trueは autocmd! に相当します。2行目以降では、FileTypeがmarkdownの場合に(Markdownファイルを開くと)、command行にある highlight link markdownError NONE というコマンドが実行されます。

それと、こちらではaugroupの名前が長いので cmhgroupという変数を用意しています。そして、この変数をgroup行で使用しています。

ちなみに、vim.api.nvim_create_augroup関数はグループを識別する数を返すので、変数cmhgroupに格納されるのは文字列ではなく数です。

これを確認するために

print('cmhgroup is '..cmhgroup)

という文を記述しておいたら、次のように表示されました。

cmhgroup is 6


colorschemeの設定

カラースキームを設定してみます。たとえば、「torte」というカラースキームを使う場合、

vim.cmd[[colorscheme torte]]

とinit.luaに記述します。

失敗例を書いておきます。Lua-guideには

vim.cmd("colorscheme habamax")

という例が載っているのですが、この書き方ではカラースキームが有効になりませんでした。ちなみに、使用しているNeovimのバージョンは0.9.0です。

それと自作のカラースキームファイルを使う場合、以下のディレクトリの中にファイルを配置します。

~/.config/nvim/colors


追記

後から気づいたのですが、この記事に書いた

vim.api.nvim_create_augroup()
vim.api.nvim_create_autocmd()

を使ったautocmdの記述例は、Vimで以下のようにするのと同じ形ですね。

augroup takoyaki
  autocmd!
augroup END

autocmd takoyaki FileType txt set ignorecase
autocmd takoyaki FileType cpp set noignorecase

(この形ではautocmd行にグループ名を記述する手間があるので、普段は余り使いませんが・・・)