Open9
Neovim設定メモ
前提、現状とか
neovimは使っていたけど、プラグインの仕組みとかはよくわかっていない。人のinit.luaをコピペして継ぎ足してきたが結局コマンドの呼び出し方やキーマップを覚えてないからあまり便利ではない。
今まではmazonでneovim-lspを使っていたが、設定もよくわからないし全然使いこなせていなかった。coc.vimのほうがEasyらしいので、coc.vimに乗り換える。
参考にしている記事はこれ↓
目標
最終的にはフロントエンドをかける環境を構築したい。
この記事ではvim-plugを使っているが、すでにPackerを導入してしまっているのでPackerを使う。
入れたプラグインのキーマップを書き換えるところまでやりたい。
Luaの書き方関連
- 基本文法
- https://learnxinyminutes.com/docs/lua/ : 基本文法はこれを見れば良さそう。jsの連想配列みたいなのがTableで、Tableでは演算子のオーバーロードみたいなことができるらしい。
- Neovimでluaを使うときの参考。最初にこれを読むべきだった。
https://github.com/willelz/nvim-lua-guide-ja/blob/master/README.ja.md
VimScriptとluaの対応
VimScriptのスコープ
こちらのスクショ:https://knowledge.sakura.ad.jp/23436/
augroupとautocmd
何かのタイミングで自動で実行して欲しいコマンドをautocmdに登録することができる。
- そもそもaugroup, autocmdとは:https://qiita.com/s_of_p/items/b61e4c3a0c7ee279848a
- luaからautocmdのapiにアクセする方法:https://zenn.dev/slin/articles/2020-11-03-neovim-lua2#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
: 途中でエラーが発生したら処理を途中で終了する
キーマップの設定関連
キーマップはモードごとに設定できる
-
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よりも優先される。
for
ループを使ってキーマップを定義
Tips: 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
定義ジャンプの設定
定義ジャンプとは、VSCodeだとCmd+クリックでできる、その関数やクラスの定義元に飛べる機能のことである。
coc.vimの関数を呼び出すことで定義ジャンプをすることができる。次のようなキーマップを追加した。
['<leader>k'] = '<cmd>:call CocAction("jumpDefinition", "split")<CR>'
もちろん、書いてる言語のlspを入れてないとエラーを吐く。
こちらの記事を参考にした。
補完機能
↓こういうやつ
デフォルトのキーマップ
-
<Ctrl + n> / <Ctrl + p>
で上下移動 -
<Ctrl + y>
で候補選択
Tabで補完できるようにする
フォーマット
Pythonのフォーマット
編集している自分のdotfilesはこれ
ファイルタイプ別設定
Vue