Skip to content

SumiyaE/nvim_lua_setting

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

102 Commits
 
 
 
 
 
 

Repository files navigation

Install

Install Nvim

for Mac

# install neovim with brew
brew install neovim

# create nvim setting directory
cd ~/.config/
git clone https://github.com/SumiyaE/nvim_lua_setting.git nvim

各プラグインの説明

Claude Code (claudecode.nvim)

Neovim内で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

smart-splits.nvim & Hydra.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を使用するように変更されています。

参考:

vim-macos-ime

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.md

init.luaでlazy.luaを読見込み

require("config.lazy")

さらに、lazy.luaの中で各種プラグインを読み込んでいる。

-- Setup lazy.nvim
require("lazy").setup({
	spec = {
		-- import your plugins
		{ import = "plugins" },
	},
})

lazy.nvimとは?

neovimのプラグインマネージャーの一つ。
参考:lazy.nvimの使い方から起動を爆速にする方法までを解説

lazy.luaがなぜ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

init.luaからlazy.luaを読み込む時にはrequireを使っているが、lazy.luaからpluginsを読み込む時にはrequireを使っていないのはなぜか?

requireは、luaの標準ライブラリで、モジュールを読み込むための関数。 lazy.luaが実行しているsetup関数は、lazy.nvimの関数で、モジュールを読み込むためのものではないためrequireを使っていない。

lazy.luaの中で実行されるrequire("lazy")のlazyは何を指しているのか?

~/.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

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages