Open9

Neovim設定メモ

nac-39nac-39

前提、現状とか

neovimは使っていたけど、プラグインの仕組みとかはよくわかっていない。人のinit.luaをコピペして継ぎ足してきたが結局コマンドの呼び出し方やキーマップを覚えてないからあまり便利ではない。

今まではmazonでneovim-lspを使っていたが、設定もよくわからないし全然使いこなせていなかった。coc.vimのほうがEasyらしいので、coc.vimに乗り換える。
参考にしている記事はこれ↓
https://zenn.dev/yano/articles/neovim_frontend_development_2022

nac-39nac-39

目標

最終的にはフロントエンドをかける環境を構築したい。
この記事ではvim-plugを使っているが、すでにPackerを導入してしまっているのでPackerを使う。
入れたプラグインのキーマップを書き換えるところまでやりたい。

nac-39nac-39

Luaの書き方関連

VimScriptとluaの対応

VimScriptのスコープ


こちらのスクショ:https://knowledge.sakura.ad.jp/23436/

augroupとautocmd

何かのタイミングで自動で実行して欲しいコマンドをautocmdに登録することができる。

ChatGPTはluaの中にvimscriptを書くといいよと教えてくれたが、

vim.api.nvim_exec([[
  augroup coc_ts
    autocmd!
    autocmd FileType typescript,typescriptreact call v:lua.coc_typescript_settings()
  augroup END
]], false)

これはこう書ける。

local augroup = vim.api.nvim_create_augroup -- Create/get sutocommand group
local autocmd = vim.api.nvim_create_autocmd -- Create autocommand

augroup('coc_ts', {})
autocmd('FileType', { 
    group = 'coc_ts',
    pattern = {'typescript', 'typescriptreact'},
    callback= function() v:lua().coc_typescript_settings() end
})

VimScriptの関数

同じ記事より:https://knowledge.sakura.ad.jp/23436/

  • abort: 途中でエラーが発生したら処理を途中で終了する
nac-39nac-39

キーマップの設定関連

キーマップはモードごとに設定できる

  • map: ノーマルモード、ビジュアルモード用のキーマッピング
  • nmap: ノーマルモード用のキーマッピング
  • vmap: ビジュアルモード用のキーマッピング
  • imap: インサートモード用のキーマッピング
  • cmap: コマンドライン用のキーマッピング

map系コマンドとnoremap系コマンド

  • map系コマンド→設定が伝搬してしまう(mapでaをbに書き換えて、mapでbをcに書き換えたらcを入力したときにbではなくaが実行される。)
  • noremap系コマンド→map済みのコマンドではなく、必ずvimのデフォルトのキーマップを書き換える。
    (え、これ全部noremapでいいじゃんと思ったけどmapの使いどころってどこなんだろう?)

こちらから拝借しました: https://maku77.github.io/vim/keymap/basic.html

特殊なキーマップ

  • <silent>: 実行するコマンドがコマンドラインに表示されないようにする (参考)
  • <buffer>: カレントバッファだけで有効。通常のmapよりも優先される。

Tips: forループを使ってキーマップを定義

opt = { noremap = true, silent = true }

for k, v in pairs({
    ['<leader>e'] = ['<cmd>lua require('fzf-lua').files()<CR>', opt)]
...
})do
    vim.api.nvim_set_keymap('n', k, v, opt)
end

参考:https://blog.atusy.net/2022/02/21/nvim-init-lua/

nac-39nac-39

定義ジャンプの設定

定義ジャンプとは、VSCodeだとCmd+クリックでできる、その関数やクラスの定義元に飛べる機能のことである。
coc.vimの関数を呼び出すことで定義ジャンプをすることができる。次のようなキーマップを追加した。

    ['<leader>k'] = '<cmd>:call CocAction("jumpDefinition", "split")<CR>'

もちろん、書いてる言語のlspを入れてないとエラーを吐く。
こちらの記事を参考にした。
https://lealog.hateblo.jp/entry/2022/10/06/175456