feat(nvim): More leader mappings and text objects

This commit is contained in:
js0ny 2025-01-12 22:36:49 +00:00
parent aeec1ce5c7
commit 073c60f07d
17 changed files with 264 additions and 130 deletions

View file

@ -139,7 +139,13 @@ end
# Coursier: Scala dependency manager
if command -v coursier > /dev/null
set -gx PATH "$PATH:/home/js0ny/.local/share/coursier/bin"
set -gx PATH "$PATH:$XDG_DATA_HOME/coursier/bin"
end
# pnpm
set -gx PNPM_HOME "$XDG_DATA_HOME/pnpm"
if not string match -q -- $PNPM_HOME $PATH
set -gx PATH "$PNPM_HOME" $PATH
end
# pnpm end
test -d /opt/miniconda3 && source /opt/miniconda3/etc/fish/conf.d/conda.fish

View file

@ -7,10 +7,16 @@
]]
-- 针对特定文件类型设置快捷键
vim.api.nvim_create_autocmd("FileType", {
pattern = "markdown", -- 指定文件类型
callback = function()
vim.api.nvim_buf_set_keymap(0, "v", "`", "c`<C-r>\"`<Esc>", { noremap = true, silent = true, desc = "Wrap selection with backticks" })
end,
pattern = "markdown", -- 指定文件类型
callback = function()
vim.api.nvim_buf_set_keymap(
0,
"v",
"`",
'c`<C-r>"`<Esc>',
{ noremap = true, silent = true, desc = "Wrap selection with backticks" }
)
end,
})
-- 加载配置
@ -24,5 +30,4 @@ require("config.plugins")
-- 加载主题
require("config.colorscheme")
-- vim.api.nvim_create_autocmd({ "VimEnter" }, { callback = open_nvim_tree })

View file

@ -1 +1 @@
vim.cmd.colorscheme("catppuccin")
vim.cmd.colorscheme("kanagawa")

View file

@ -1,20 +1,23 @@
local mode_arrow = { "n", "v", "o", "s", "x" }
local keymaps_basic = { -- Modification of Original Keymap - Colemak
{ mode = mode_arrow, keys = "n", cmd = "j" },
{ mode = mode_arrow, keys = "e", cmd = "k" },
{ mode = mode_arrow, keys = "i", cmd = "l" },
{ mode = mode_arrow, keys = "n", cmd = "j", desc = "Down" },
{ mode = mode_arrow, keys = "e", cmd = "k", desc = "Up" },
{ mode = mode_arrow, keys = "i", cmd = "l", desc = "Right" },
{ keys = "H", cmd = ":bprevious<CR>" },
{ keys = "N", cmd = "5j" },
{ keys = "E", cmd = "5k" },
{ keys = "I", cmd = ":bnext<CR>" },
{ keys = "l", cmd = "i" },
-- Text object implementation
{ mode = { "n", "o", "x" }, keys = "l", cmd = "i", group = "inside" },
{ keys = "L", cmd = "I" },
{ keys = "k", cmd = "n" },
{ keys = "K", cmd = "N" },
{ keys = "j", cmd = "e" },
{ keys = "J", cmd = "E" },
{ keys = "Y", cmd = "y$" },
-- https://github.com/LazyVim/LazyVim/blob/d1529f650fdd89cb620258bdeca5ed7b558420c7/lua/lazyvim/config/keymaps.lua#L60
{ keys = "<Esc>", cmd = "<Cmd>nohlsearch<Bar>diffupdate<CR>" },
}
return keymaps_basic

View file

@ -1,4 +1,5 @@
local M = {}
local keymaps_user_command = require("keymaps.user-command")
local global_default_opts = { noremap = true, silent = true }
local global_default_mode = { "n" }
-- local mode_arrow = { "n", "v", "o", "s", "x" }

View file

@ -1,5 +1,34 @@
local M = {}
local formatFx = function()
require("conform").format({ async = true })
end
local renameCurrentBuffer = function()
local old_name = vim.fn.expand("%:p")
local new_name = vim.fn.input("New name: ", vim.fn.expand("%:p:h") .. "/")
if new_name == "" then
print("No new name provided")
return
elseif new_name == old_name then
return
end
vim.cmd("write")
local success, err = os.rename(old_name, new_name)
if not success then
print("Error renaming file: " .. err)
return
end
vim.cmd("edit " .. new_name)
vim.cmd("bdelete " .. old_name)
end
vim.api.nvim_create_user_command("Rename", renameCurrentBuffer, {})
local leader_general = {
{ keys = "<space>", cmd = ":Telescope find_files<CR>", desc = "Find Files" },
{ keys = "/", cmd = ":Telescope live_grep<CR>", desc = "Grep Files" },
@ -42,18 +71,28 @@ local leader_w = { -- leader w: Windows Management
{ keys = "I", cmd = ":resize -5<CR>", desc = "Decrease Window Width" },
}
local leader_f = { -- leader f: Files/Find
local leader_f = { -- <leader>f: +files/find
{ keys = "f", cmd = ":Telescope fd<CR>", desc = "Find Files" },
{ keys = "s", cmd = ":Telescope live_grep<CR>", desc = "Grep Files" },
{ keys = "b", cmd = ":Telescope buffers<CR>", desc = "List Buffers" },
{ keys = "e", cmd = ":NvimTreeToggle<CR>", desc = "Toggle File Explorer" },
{ keys = "t", cmd = ":FloatermToggle<CR>", desc = "toggle visibility of the float terminal" },
{ keys = "T", cmd = ":FloatermNew<CR>", desc = "Spawn a float terminal" },
{ keys = "h", cmd = ":Telescope oldfiles<CR>", desc = "Search history files" },
{ keys = "c", cmd = ":Telescope find_files cwd=~/.config/nvim<CR>", desc = "Search Config" },
{ keys = "o", cmd = ":!open %", desc = "Open file in default program" },
{ keys = "R", cmd = renameCurrentBuffer, desc = "Rename current file" },
}
local leader_p = { -- leader p: Project
{ keys = "p", cmd = ":Telescope projects<CR>", desc = "List all Projects" },
{ keys = "g", cmd = ":Telescope projects<CR>", desc = "List all Git Projects" },
{ keys = "s", cmd = ":Telescope session-lens<CR>", desc = "List all sessions" },
}
local leader_b = { -- leader b: Buffer
{ keys = "a", cmd = ":Alpha", desc = "Dashboard" },
local leader_b = { -- <leader>b: +buffer
{ keys = "a", cmd = ":Alpha<CR>", desc = "Dashboard" },
{ keys = "b", cmd = ":Telescope buffers<CR>", desc = "List Buffers" },
{ keys = "d", cmd = ":bdelete<CR>", desc = "Delete Buffer" },
{ keys = "h", cmd = ":bprevious<CR>", desc = "Previous Buffer" },
{ keys = "i", cmd = ":bnext<CR>", desc = "Next Buffer" },
@ -62,7 +101,25 @@ local leader_b = { -- leader b: Buffer
{ keys = "0", cmd = ":bfirst<CR>", desc = "First Buffer" },
{ keys = "^", cmd = ":bfirst<CR>", desc = "First Buffer" },
{ keys = "$", cmd = ":blast<CR>", desc = "Last Buffer" },
{ keys = "s", cmd = ":Telescope buffers<CR>", desc = "Search buffers" },
-- { keys = "s", cmd = ":Telescope buffers<CR>", desc = "Search buffers" },
}
local leader_t = { -- <leader>t: +toggle/test
{ keys = "f", cmd = ":NvimTreeToggle", desc = "Toggle File Explorer" },
{ keys = "F", cmd = ":FormatToggle<CR>", desc = "Toggle autoformat-on-save" },
{ keys = "t", cmd = ":FloatermToggle<CR>", desc = "toggle visibility of the float terminal" },
}
local leader_c = { -- <leader>c: +code/compile
{ keys = "r", cmd = ":RunCode<CR>", desc = "Run code" },
{ keys = "e", cmd = ":Telescope diagnostics<CR>", desc = "Navigate errors/warnings" },
{ keys = "f", cmd = formatFx, desc = "Format buffer" },
{ keys = "s", cmd = ":Telescope treesitter<CR>", desc = "Search symbols" },
{ keys = "S", cmd = ":Telescope grep_string<CR>", desc = "Search current symbol" },
}
local leader_u = { -- <leader>u: +ui
{ keys = "i", cmd = ":Telescope colorscheme<CR>", desc = "Change colorscheme" },
}
for _, map in ipairs(leader_q) do
@ -85,4 +142,24 @@ for _, map in ipairs(leader_b) do
table.insert(M, map)
end
for _, map in ipairs(leader_c) do
map.keys = "<leader>c" .. map.keys
table.insert(M, map)
end
for _, map in ipairs(leader_t) do
map.keys = "<leader>t" .. map.keys
table.insert(M, map)
end
for _, map in ipairs(leader_u) do
map.keys = "<leader>u" .. map.keys
table.insert(M, map)
end
for _, map in ipairs(leader_p) do
map.keys = "<leader>p" .. map.keys
table.insert(M, map)
end
return M

View file

@ -55,6 +55,8 @@ function M.plugin(api, opts)
{ keys = "x", cmd = api.fs.cut, opts = opts("Cut") },
{ keys = "y", cmd = api.fs.copy.relative_path, opts = opts("Copy Relative Path") },
{ keys = "Y", cmd = api.fs.copy.absolute_path, opts = opts("Copy Absolute Path") },
-- From Directory Opus
{ keys = "#", cmd = "<Cmd>set relativenumber!<CR>", opts = opts("Toggle Relative Number") },
-- Numeric 数字键
{ keys = "!", cmd = api.node.run.cmd, opts = opts("Run Command") },
-- Non-Alphanumeric 非字母数字键

View file

@ -0,0 +1,30 @@
vim.api.nvim_create_user_command("Format", function(args)
local range = nil
if args.count ~= -1 then
local end_line = vim.api.nvim_buf_get_lines(0, args.line2 - 1, args.line2, true)[1]
range = {
start = { args.line1, 0 },
["end"] = { args.line2, end_line:len() },
}
end
require("conform").format({ async = true, lsp_format = "fallback", range = range })
end, { range = true })
vim.api.nvim_create_user_command("FormatToggle", function(args)
local buffer_local = args.bang
if buffer_local then
-- Toggle buffer-local formatting
vim.b.disable_autoformat = not vim.b.disable_autoformat
else
-- Toggle global formatting
vim.g.disable_autoformat = not vim.g.disable_autoformat
end
-- Print current status
local scope = buffer_local and "buffer" or "global"
local status = buffer_local and vim.b.disable_autoformat or vim.g.disable_autoformat
print(string.format("Format-on-save %s: %s", scope, status and "disabled" or "enabled"))
end, {
desc = "Toggle autoformat-on-save (use ! for buffer-local)",
bang = true,
})

View file

@ -1,5 +1,7 @@
return {
{ "catppuccin/nvim", name = "catppuccin" },
{ "olimorris/onedarkpro.nvim" },
{ "rebelot/kanagawa.nvim" },
{ "RRethy/vim-illuminate" },
{
"nvim-lualine/lualine.nvim",

View file

@ -3,4 +3,47 @@ return {
{ import = "plugins.mod.nvim-tree" },
{ import = "plugins.mod.telescope" },
{ import = "plugins.mod.projects" },
{
"lewis6991/hover.nvim",
config = function()
require("hover").setup({
init = function()
-- Require providers
require("hover.providers.lsp")
-- require('hover.providers.gh')
-- require('hover.providers.gh_user')
-- require('hover.providers.jira')
-- require('hover.providers.dap')
-- require('hover.providers.fold_preview')
-- require('hover.providers.diagnostic')
-- require('hover.providers.man')
-- require('hover.providers.dictionary')
end,
preview_opts = {
border = "single",
},
-- Whether the contents of a currently open hover window should be moved
-- to a :h preview-window when pressing the hover keymap.
preview_window = false,
title = true,
mouse_providers = {
"LSP",
},
mouse_delay = 1000,
})
-- Setup keymaps
vim.keymap.set("n", "gE", require("hover").hover_select, { desc = "hover.nvim (select)" })
vim.keymap.set("n", "<C-p>", function()
require("hover").hover_switch("previous")
end, { desc = "hover.nvim (previous source)" })
vim.keymap.set("n", "<C-n>", function()
require("hover").hover_switch("next")
end, { desc = "hover.nvim (next source)" })
-- Mouse support
vim.keymap.set("n", "<MouseMove>", require("hover").hover_mouse, { desc = "hover.nvim (mouse)" })
vim.o.mousemoveevent = true
end,
},
}

View file

@ -61,4 +61,6 @@ return {
-- })
end,
},
{ import = "plugins.mod.conform-nvim" },
{ "nvim-treesitter/nvim-treesitter-context" },
}

View file

@ -1,7 +1,14 @@
return {
{ "wakatime/vim-wakatime", lazy = false },
{ "voldikss/vim-floaterm" },
{ "CRAG666/betterTerm.nvim", opts = {
position = "bot",
size = 15,
} },
{ "CRAG666/code_runner.nvim", config = true },
{ import = "plugins.mod.obsidian-nvim" },
{
"folke/which-key.nvim",
event = "VeryLazy",
opts = {

View file

@ -0,0 +1,38 @@
return {
"stevearc/conform.nvim",
event = { "BufWritePre" },
cmd = { "ConformInfo" },
-- This will provide type hinting with LuaLS
---@module "conform"
---@type conform.setupOpts
opts = {
-- Define your formatters
formatters_by_ft = {
lua = { "stylua" },
python = { "isort", "black" },
javascript = { "prettierd", "prettier", stop_after_first = true },
},
-- Set default options
default_format_opts = {
lsp_format = "fallback",
},
-- Set up format-on-save
format_on_save = function(bufnr)
-- Disable with a global or buffer-local variable
if vim.g.disable_autoformat or vim.b[bufnr].disable_autoformat then
return
end
return { timeout_ms = 500, lsp_format = "fallback" }
end,
-- Customize formatters
formatters = {
shfmt = {
prepend_args = { "-i", "2" },
},
},
},
init = function()
-- If you want the formatexpr, here is the place to set it
vim.o.formatexpr = "v:lua.require'conform'.formatexpr()"
end,
}

View file

@ -31,6 +31,22 @@ return {
on_attach = my_on_attach,
sync_root_with_cwd = true,
respect_buf_cwd = true,
disable_netrw = true,
renderer = {
icons = {
glyphs = {
git = { -- https://github.com/nvim-neo-tree/neo-tree.nvim/blob/main/doc/neo-tree.txt#L1077C1-L1077C29
unmerged = "",
renamed = "",
deleted = "",
untracked = "",
ignored = "",
unstaged = "󰄱",
staged = "",
},
},
},
},
})
end,
}

View file

@ -3,6 +3,17 @@ return {
config = function()
require("telescope").setup({
defaults = {
prompt_prefix = "",
selection_caret = " ",
entry_prefix = " ",
layout_config = { -- https://github.com/NvChad/NvChad/blob/v2.5/lua/nvchad/configs/telescope.lua
horizontal = {
prompt_position = "top",
preview_width = 0.55,
},
width = 0.87,
height = 0.80,
},
mappings = {
n = {
["n"] = "move_selection_next",
@ -11,6 +22,7 @@ return {
["r"] = "preview_scrolling_down",
["a"] = "preview_scrolling_left",
["s"] = "preview_scrolling_right",
["q"] = require("telescope.actions").close,
},
},
},