Open3

Neovim keymap

無名隱者無名隱者

テンプレ

init.lua
-- [[ Basic Keymaps ]]
--  See `:help vim.keymap.set()`

-- Clear highlights on search when pressing <Esc> in normal mode
--  See `:help hlsearch`
vim.keymap.set("n", "<Esc>", "<cmd>nohlsearch<CR>")

-- Diagnostic keymaps
-- vim.keymap.set("n", "<leader>q", vim.diagnostic.setloclist, { desc = "Open diagnostic [Q]uickfix list" })
vim.keymap.set("n", "<leader>q", "<cmd>qall!<CR>", { desc = "強制 すべて閉じる" })
vim.keymap.set("n", "<leader>qp", "<cmd>q!<CR>", { desc = "強制 現在の画面を閉じる" })
-- Exit terminal mode in the builtin terminal with a shortcut that is a bit easier
-- for people to discover. Otherwise, you normally need to press <C-\><C-n>, which
-- is not what someone will guess without a bit more experience.
--
-- NOTE: This won't work in all terminal emulators/tmux/etc. Try your own mapping
-- or just use <C-\><C-n> to exit terminal mode
vim.keymap.set("t", "<Esc><Esc>", "<C-\\><C-n>", { desc = "Exit terminal mode" })

-- TIP: Disable arrow keys in normal mode
-- vim.keymap.set('n', '<left>', '<cmd>echo "Use h to move!!"<CR>')
-- vim.keymap.set('n', '<right>', '<cmd>echo "Use l to move!!"<CR>')
-- vim.keymap.set('n', '<up>', '<cmd>echo "Use k to move!!"<CR>')
-- vim.keymap.set('n', '<down>', '<cmd>echo "Use j to move!!"<CR>')

-- Keybinds to make split navigation easier.
--  Use CTRL+<hjkl> to switch between windows
--
--  See `:help wincmd` for a list of all window commands
vim.keymap.set("n", "<C-h>", "<C-w><C-h>", { desc = "Move focus to the left window" })
vim.keymap.set("n", "<C-l>", "<C-w><C-l>", { desc = "Move focus to the right window" })
vim.keymap.set("n", "<C-j>", "<C-w><C-j>", { desc = "Move focus to the lower window" })
vim.keymap.set("n", "<C-k>", "<C-w><C-k>", { desc = "Move focus to the upper window" })

-- ノーマルモードで <leader>pv を押すと、Ex(ファイルブラウザ)を開く
-- vim.keymap.set("n", "<leader>pv", vim.cmd.Ex)
-- :NvimTreeToggle Open or close the tree. Takes an optional path argument.
-- :NvimTreeFocus Open the tree if it is closed, and then focus on the tree.
-- :NvimTreeFindFile Move the cursor in the tree for the current buffer, opening folders if needed.
-- :NvimTreeCollapse Collapses the nvim-tree recursively.
vim.keymap.set("n", "<leader>pv", "<cmd>NvimTreeFindFile<CR>")
vim.keymap.set("n", "<leader>nt", "<cmd>NvimTreeToggle<CR>")

-- ビジュアルモードで J を押すと、選択した行を1行下に移動し、選択を維持する
vim.keymap.set("v", "J", ":m '>+1<CR>gv=gv")
-- ビジュアルモードで K を押すと、選択した行を1行上に移動し、選択を維持する
vim.keymap.set("v", "K", ":m '<-2<CR>gv=gv")

-- ノーマルモードで J を押して行を結合するときに、カーソル位置を保存して結合後に元の位置に戻る
vim.keymap.set("n", "J", "mzJ`z")
-- ノーマルモードで Ctrl+d を押してスクロールダウンした後に、画面中央にカーソルを配置する
vim.keymap.set("n", "<C-d>", "<C-d>zz")
-- ノーマルモードで Ctrl+u を押してスクロールアップした後に、画面中央にカーソルを配置する
vim.keymap.set("n", "<C-u>", "<C-u>zz")
-- ノーマルモードで n を押して次の検索結果に移動した後に、画面中央にカーソルを配置する
vim.keymap.set("n", "n", "nzzzv")

-- ノーマルモードで N を押して前の検索結果に移動した後に、画面中央にカーソルを配置する
vim.keymap.set("n", "N", "Nzzzv")

vim.keymap.set("n", "<leader>vwm", function()
	require("vim-with-me").StartVimWithMe()
end)
vim.keymap.set("n", "<leader>svwm", function()
	require("vim-with-me").StopVimWithMe()
end)

-- greatest remap ever
-- ビジュアルモードで <leader>p を押すと、選択範囲を削除せずにペーストする(ヤンクした内容を保持し、削除レジスタを使用)
vim.keymap.set("x", "<leader>p", [["_dP]])

-- next greatest remap ever : asbjornHaland
-- ノーマルモードおよびビジュアルモードで <leader>y を押すと、ヤンク(コピー)した内容をシステムクリップボードに保存する
vim.keymap.set({ "n", "v" }, "<leader>y", [["+y]])

-- ノーマルモードで <leader>Y を押すと、行全体をヤンク(コピー)し、システムクリップボードに保存する
vim.keymap.set("n", "<leader>Y", [["+Y]])

-- ノーマルモードおよびビジュアルモードで <leader>d を押すと、削除した内容をレジスタに保存せずに破棄する(ブラックホールレジスタを使用)
vim.keymap.set({ "n", "v" }, "<leader>d", [["_d]])

-- This is going to get me cancelled
-- インサートモードで Ctrl+c を押すとノーマルモードに戻る(<Esc> と同様の動作をする)
vim.keymap.set("i", "<C-c>", "<Esc>")

-- ノーマルモードで Q を押しても何もしないようにする(誤操作防止のため無効化)
-- vim.keymap.set("n", "Q", "<nop>")

-- ノーマルモードで Ctrl+f を押すと、新しい tmux ウィンドウで tmux-sessionizer を起動する
vim.keymap.set("n", "<C-f>", "<cmd>silent !tmux neww tmux-sessionizer<CR>")

-- ノーマルモードで <leader>f を押すと、現在のバッファを LSP のフォーマッタでフォーマットする
vim.keymap.set("n", "<leader>f", vim.lsp.buf.format)

-- ノーマルモードで Ctrl+k を押すと、次のクイックフィックス項目に移動し、画面を中央に揃える
-- vim.keymap.set("n", "<C-k>", "<cmd>cnext<CR>zz")
-- ノーマルモードで Ctrl+j を押すと、前のクイックフィックス項目に移動し、画面を中央に揃える
-- vim.keymap.set("n", "<C-j>", "<cmd>cprev<CR>zz")

-- ノーマルモードで <leader>k を押すと、次のローカルリスト項目に移動し、画面を中央に揃える
vim.keymap.set("n", "<leader>k", "<cmd>lnext<CR>zz")
-- ノーマルモードで <leader>j を押すと、前のローカルリスト項目に移動し、画面を中央に揃える
vim.keymap.set("n", "<leader>j", "<cmd>lprev<CR>zz")

-- ノーマルモードで <leader>s を押すと、現在の単語をインタラクティブに置換する
vim.keymap.set("n", "<leader>s", [[:%s/\<<C-r><C-w>\>/<C-r><C-w>/gI<Left><Left><Left>]])

-- ノーマルモードで <leader>x を押すと、現在のファイルに実行権限を付与する(chmod +x)
vim.keymap.set("n", "<leader>x", "<cmd>!chmod +x %<CR>", { silent = true })

-- ノーマルモードで <leader>ee を押すと、エラーチェックと return err の構文を自動挿入する
vim.keymap.set("n", "<leader>ee", "oif err != nil {<CR>}<Esc>Oreturn err<Esc>")

-- ノーマルモードで <leader>vpp を押すと、Neovim の packer.lua 設定ファイルを開く
-- vim.keymap.set("n", "<leader>vpp", "<cmd>e ~/.dotfiles/nvim/.config/nvim/lua/theprimeagen/packer.lua<CR>")




-- ノーマルモードで <leader>mr を押すと、CellularAutomaton プラグインの make_it_rain コマンドを実行する
vim.keymap.set("n", "<leader>mr", "<cmd>CellularAutomaton make_it_rain<CR>")

-- ノーマルモードで <leader><leader> を押すと、設定ファイルを再読み込みする
vim.keymap.set("n", "<leader><leader>", function()
	vim.cmd("so")
end)

-- インサートモード時に、jj でノーマルモードに戻る
vim.api.nvim_set_keymap("i", "jj", "<ESC>", { noremap = true, silent = true })
-- インサートモード時に、jj でノーマルモードに戻る
vim.api.nvim_set_keymap("i", "jj", "<ESC>", { noremap = true, silent = true })

vim.api.nvim_set_keymap("n", "<leader>yy", [[:lua EntireYank()<CR>]], { noremap = true, silent = true })

function EntireYank()
	-- <Plug>(textobj-entire-i)でテキストオブジェクト全体を選択してヤンク
	vim.fn.feedkeys("y" .. vim.api.nvim_replace_termcodes("<Plug>(textobj-entire-i)", true, true, true), "x")
end

vim.api.nvim_set_keymap("n", "<leader>pp", [[:lua EntireVisualPaste()<CR>]], { noremap = true, silent = true })

function EntireVisualPaste()
	-- ヴィジュアルモードにする
	vim.cmd("normal! v")
	-- <Plug>(textobj-entire-a)を呼び出す
	vim.fn.feedkeys(vim.api.nvim_replace_termcodes("<Plug>(textobj-entire-a)", true, true, true), "x")
	-- [["_dP]]でペーストする
	vim.cmd('normal! "_dP')
end

-- ノーマルモードで行末に移動
vim.api.nvim_set_keymap("n", "<leader>l", "$", { noremap = true, silent = true })

-- insertモードで行頭
vim.api.nvim_set_keymap("i", "<C-a>", "<C-o>^", { noremap = true, silent = true })
-- insertモードで行末
vim.api.nvim_set_keymap("i", "<C-b>", "<C-o>$", { noremap = true, silent = true })