# install neovim with brew
brew install neovim
# create nvim setting directory
cd ~/.config/
git clone https://github.com/SumiyaE/nvim_lua_setting.git nvimNeovim内でClaude AIと対話できるプラグイン。コード生成、編集、質問応答などが可能。
キーマッピング:
<leader>ac- Claude Codeのトグル(開く/閉じる)<leader>af- Claude Codeにフォーカス<leader>ar- 前回のセッションを再開<leader>aC- 会話を継続<leader>am- モデル選択(Sonnet, Opus, Haikuなど)<leader>ab- 現在のバッファをClaudeに追加<leader>as- 選択範囲をClaudeに送信(ビジュアルモード)<leader>as- ファイルツリーからファイルを追加(NvimTree等)<leader>aa- Claudeの提案した差分を承認<leader>ad- Claudeの提案した差分を拒否
Diff Accept/Denyの使い方: Claudeがコード変更を提案すると、まず差分(diff)として表示されます。
- Accept (
<leader>aa) - 提案を承認してファイルに適用 - Deny (
<leader>ad) - 提案を拒否して変更を破棄
参考: https://github.com/coder/claudecode.nvim
ウィンドウ間の移動とリサイズを効率化するプラグイン。
ウィンドウ移動(ノーマルモード):
<C-h>- 左のウィンドウへ移動<C-j>- 下のウィンドウへ移動<C-k>- 上のウィンドウへ移動<C-l>- 右のウィンドウへ移動
ターミナルモードからの移動:
<C-h>,<C-j>,<C-k>,<C-l>- ターミナルモードを抜けてウィンドウ移動
Hydraリサイズモード:
<leader>r- リサイズモードに入るh,j,k,l- ウィンドウサイズを調整H,J,K,L- ウィンドウサイズを大きく調整(10単位)qまたは<Esc>- リサイズモードを終了
設定のポイント:
Hydra.nvimのhint.borderオプションは非推奨となり、hint.float_opts.borderを使用するように変更されています。
参考:
macOSで日本語入力時にノーマルモードに戻ると自動で英語入力に切り替えるプラグイン。
前提条件: macismのインストールが必要。
brew tap laishulu/homebrew
brew install macism動作:
| イベント | 動作 |
|---|---|
| InsertLeave(ESC/jj) | 自動で英語入力に切り替え |
| InsertEnter | 直前の文字が日本語なら日本語入力に復帰 |
設定の仕組み:
macism- macOSに入力ソース切り替えを命令するCLIツールvim-macos-ime- いつ・何に切り替えるかを判断するプラグイン
入力ソースIDの確認方法:
# 現在の入力ソースを表示
macism
# 日本語に切り替えてから再度実行すると日本語のIDが表示される注意点:
- 日本語入力中の
jjは使えない(「っj」になるため)。日本語入力中はESCを使用 - ブラウザ等から戻った時は手動で英語に切り替える必要あり
参考: https://github.com/laishulu/vim-macos-ime
現在のnvimの設定はlazy.nvimを使用して管理している。 そもそもlazy.nvimが何をしているのかわかっていない上に、luaも雰囲気で書いている状態なので改めて設定を調べてまとめる。
ディレクトリ構成としては以下のようになっている。
~/.config/nvim
├── init.lua
├── lazy-lock.json
├── pack
├── lua
│ ├── plugins
│ │ ├──telescope.lua
│ │ ├──treesitter.lua
│ │ ├──etc......luaで書かれた各種プラグイン
│ ├── confg
│ │ ├──lazy.lua
│ ├── readme.mdinit.luaでlazy.luaを読見込み
require("config.lazy")さらに、lazy.luaの中で各種プラグインを読み込んでいる。
-- Setup lazy.nvim
require("lazy").setup({
spec = {
-- import your plugins
{ import = "plugins" },
},
})neovimのプラグインマネージャーの一つ。
参考:lazy.nvimの使い方から起動を爆速にする方法までを解説
neovimが、~/.config/nvim/init.luaに書かれている設定を自動で読み込むような仕組みになっている。 また、neovimでluaが使えるようになったのは、2021年の7月ごろにリリースされたversion 0.5からだそう。
It is also possible to write user configuration in Lua: If there is an init.lua, it is read instead of init.vim (these cannot coexist, and having both in your config directory will give an error), and .lua files in runtime directories (plugin/, colorscheme/, after/ etc.) are sourced in addition to (after) Vimscript files.
参考:https://neovim.io/news/2021/07?utm_source=chatgpt.com
requireは、luaの標準ライブラリで、モジュールを読み込むための関数。 lazy.luaが実行しているsetup関数は、lazy.nvimの関数で、モジュールを読み込むためのものではないためrequireを使っていない。
~/.local/share/nvim/lazy/lazy.nvimを指している。ここをlazy.nvimのインストール先として指定しているのが、以下の記述。
-- Bootstrap lazy.nvim
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
if not (vim.uv or vim.loop).fs_stat(lazypath) then
local lazyrepo = "https://github.com/folke/lazy.nvim.git"
local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath })
if vim.v.shell_error ~= 0 then
vim.api.nvim_echo({
{ "Failed to clone lazy.nvim:\n", "ErrorMsg" },
{ out, "WarningMsg" },
{ "\nPress any key to exit..." },
}, true, {})
vim.fn.getchar()
os.exit(1)
end
end
vim.opt.rtp:prepend(lazypath)
---
## 不明点
- [ ] Q.そもそもlazy.nvimとは何か?
- [ ] Q.lazy.luaがなぜnvimの起動時に読み込まれているのか?
- [ ] Q.lazy.luaに記載されている以下の記述が何を指しているのか?
```lua
-- Bootstrap lazy.nvim
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
if not (vim.uv or vim.loop).fs_stat(lazypath) then
local lazyrepo = "https://github.com/folke/lazy.nvim.git"
local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath })
if vim.v.shell_error ~= 0 then
vim.api.nvim_echo({
{ "Failed to clone lazy.nvim:\n", "ErrorMsg" },
{ out, "WarningMsg" },
{ "\nPress any key to exit..." },
}, true, {})
vim.fn.getchar()
os.exit(1)
end
end
vim.opt.rtp:prepend(lazypath)
-- Make sure to setup `mapleader` and `maplocalleader` before
-- loading lazy.nvim so that mappings are correct.
-- This is also a good place to setup other settings (vim.opt)- Q.init.luaからlazy.luaを読み込む時にはrequireを使っているが、lazy.luaからpluginsを読み込む時にはrequireを使っていないのはなぜか?
- Q.lazy.luaの中で実行されるrequire("lazy")の
lazyは何を指しているのか?
require("lazy").setup({
spec = {
-- import your plugins
{ import = "plugins" },
},
})
動作確認のために編集
lazygitのおかげでかなりeditorのようになった。 terraformぐらいの書き方が決まっている言語であれば、vimで開発しても良いぐらい快適になってきた。 とはいえ、terraformを使用するときにコード補完ができていないので、そこを解消した
まずは日本語を入力します。ありがとうありがとう便利だなぁこれめっちゃ助かるこれ
thankyouiii