--============================================================================= -- keymappings -- plugin用以外のkeymapを定義する -- plugin用のmappingは各pluginの設定中で行なう -- -- NOTE: , の使い分けの方針 -- : 何かしらのactionを起こす系 -- : 何かを表示する系 --============================================================================= ------------------------------------------------------------------------------- -- 二重読み込み防止 ------------------------------------------------------------------------------- if vim.g['vimrc#loaded_keymappings'] then return end vim.g['vimrc#loaded_keymappings'] = true ------------------------------------------------------------------------------- -- localな変数、function ------------------------------------------------------------------------------- local keyset = vim.keymap.set local opts = { noremap = true, silent = true } local augroup = vim.api.nvim_create_augroup local au = vim.api.nvim_create_autocmd -- 次のタブに移動(タブが一個ならtabnewする) local function tabnext() local tab_count = #vim.fn.gettabinfo() if tonumber(tab_count) > 1 then vim.cmd([[tabnext]]) else vim.cmd([[tabnew]]) end end -- 前のタブに移動(タブが一個ならtabnewする) local function tabp() local tab_count = #vim.fn.gettabinfo() if tonumber(tab_count) > 1 then vim.cmd([[tabp]]) else vim.cmd([[tabnew | -tabmove]]) end end -- 全角文字に行内ジャンプ local function jump_to_zenkaku(hankaku_zenkaku_pairs) for hankaku, zenkaku in pairs(hankaku_zenkaku_pairs) do keyset({ 'n', 'x' }, 'f' .. hankaku, 'f' .. zenkaku, opts) keyset({ 'n', 'x' }, 't' .. hankaku, 't' .. zenkaku, opts) keyset({ 'n', 'x' }, 'F' .. hankaku, 'F' .. zenkaku, opts) keyset({ 'n', 'x' }, 'T' .. hankaku, 'T' .. zenkaku, opts) keyset('n', 'df' .. hankaku, 'df' .. zenkaku, opts) keyset('n', 'dt' .. hankaku, 'dt' .. zenkaku, opts) keyset('n', 'cf' .. hankaku, 'cf' .. zenkaku, opts) keyset('n', 'ct' .. hankaku, 'ct' .. zenkaku, opts) keyset('n', 'yf' .. hankaku, 'yf' .. zenkaku, opts) keyset('n', 'yt' .. hankaku, 'yt' .. zenkaku, opts) end end ------------------------------------------------------------------------------- -- NOTE: markは使ってないのでleaderにする vim.g.mapleader = "m" ------------------------------------------------------------------------------- -- 通常のmapping ------------------------------------------------------------------------------- keyset("i", "jj", "", opts) keyset("n", "", ":nohlsearch", opts) keyset("n", "gb", ":bn", opts) keyset("n", "gB", ":bN", opts) keyset({ "n", "x" }, "", "7j", opts) keyset({ "n", "x" }, "", "7k", opts) -- タブ移動 keyset("n", "", tabnext, opts) keyset("n", "gt", tabnext, opts) keyset("n", "", tabp, opts) keyset("n", "gT", tabp, opts) -- NOTE: のmappingがにも適用されてしまうので元の動きに戻す keyset({ "n" }, "", "", opts) -- タブを閉じる keyset("n", "tc", ":tabclose", opts) -- cmdlineモードをemacsキーバインドでカーソル移動 -- keyset("c", "", "", opts) -- keyset("c", "", "", opts) -- keyset("c", "", "", opts) -- keyset("c", "", "", opts) -- keyset("c", "", "", opts) -- FIXME: 上の書き方だと何故か効かないので一旦vimscriptの書き方で vim.cmd([[ cnoremap cnoremap cnoremap cnoremap cnoremap ]]) ------------------------------------------------------------------------------- -- 遅延で定義するmapping(vim起動時にあれこれ処理させたくない) ------------------------------------------------------------------------------- augroup("map_zenkaku", {}) au({ "BufRead", "InsertEnter" }, { group = "map_zenkaku", callback = function() -- 全角文字と半角文字の対応を定義 jump_to_zenkaku({ [" "] = " ", ["!"] = "!", ["%"] = "%", ["&"] = "&", ["("] = "(", [")"] = ")", ["+"] = "+", [","] = "、", ["-"] = "ー", ["."] = "。", ["/"] = "・", ["0"] = "0", ["1"] = "1", ["2"] = "2", ["3"] = "3", ["4"] = "4", ["5"] = "5", ["6"] = "6", ["7"] = "7", ["8"] = "8", ["9"] = "9", [":"] = ":", [";"] = ";", ["<"] = "<", ["="] = "=", [">"] = ">", ["?"] = "?", ["["] = "「", ["]"] = "」", ["a"] = "あ", ["e"] = "え", ["i"] = "い", ["o"] = "お", ["u"] = "う", ["{"] = "『", ["|"] = "|", ["}"] = "』", }) end, once = true, })