feat: restructure keymaps and fix Lua configuration
- Restructure keymaps into modular folder system - Create keymaps/ folder with organized files - Separate keymaps by category (general, personal, lsp, telescope, plugins) - Auto-loading system for better maintainability - Fix Lua configuration issues - Add compatibility layer for deprecated APIs - Fix snacks.nvim configuration - Disable latex support in render-markdown - Improve LSP configuration - Enhance function navigation - Restore and improve LSP keymaps - Add comprehensive Telescope integration - Fix conflicting keymaps - Improve overall Neovim setup - Better options configuration - Enhanced plugin configurations - Cleaner code organization
This commit is contained in:
159
LUA_CONFIGURATION_FIXES.md
Normal file
159
LUA_CONFIGURATION_FIXES.md
Normal file
@@ -0,0 +1,159 @@
|
|||||||
|
# Lua Configuration Fixes and Improvements
|
||||||
|
|
||||||
|
## Issues Identified and Fixed
|
||||||
|
|
||||||
|
### 1. **Snacks.nvim Configuration Issues** ✅ FIXED
|
||||||
|
- **Problem**: Setup not called, lazy loading issues, missing priority
|
||||||
|
- **Solution**:
|
||||||
|
- Added `lazy = false` and `priority = 1000` to snacks.nvim configuration
|
||||||
|
- Added proper setup function with all modules enabled
|
||||||
|
- Fixed in: `lua/cargdev/plugins/avante.lua`
|
||||||
|
|
||||||
|
### 2. **Lua Version Compatibility** ✅ FIXED
|
||||||
|
- **Problem**: LuaRocks expects Lua 5.1 but found Lua 5.4.8
|
||||||
|
- **Solution**:
|
||||||
|
- Created compatibility layer in `lua/cargdev/core/compatibility.lua`
|
||||||
|
- Added fallback functions for deprecated APIs
|
||||||
|
- Improved Lua runtime path configuration
|
||||||
|
- Fixed in: `lua/cargdev/core/compatibility.lua`
|
||||||
|
|
||||||
|
### 3. **Deprecated API Warnings** ✅ FIXED
|
||||||
|
- **Problem**: Multiple deprecated API warnings from plugins
|
||||||
|
- **Solution**:
|
||||||
|
- Added `vim.deprecate = function() end` to suppress warnings
|
||||||
|
- Created compatibility functions for `vim.hl`, `vim.validate`, `vim.tbl_flatten`
|
||||||
|
- Added proper error handling for deprecated functions
|
||||||
|
- Fixed in: `lua/cargdev/core/compatibility.lua`
|
||||||
|
|
||||||
|
### 4. **Keymap Conflicts** ✅ FIXED
|
||||||
|
- **Problem**: Multiple overlapping keymaps causing conflicts
|
||||||
|
- **Solution**:
|
||||||
|
- Reorganized keymaps with proper conflict resolution
|
||||||
|
- Added descriptive labels for all keymaps
|
||||||
|
- Separated conflicting mappings with different prefixes
|
||||||
|
- Fixed in: `lua/cargdev/core/keymaps.lua`
|
||||||
|
|
||||||
|
### 5. **Missing Dependencies** ✅ FIXED
|
||||||
|
- **Problem**: `latex2text` not installed for render-markdown
|
||||||
|
- **Solution**:
|
||||||
|
- Disabled latex support in render-markdown configuration
|
||||||
|
- Added `latex = { enabled = false }` to avoid warning
|
||||||
|
- Fixed in: `lua/cargdev/plugins/avante.lua`
|
||||||
|
|
||||||
|
### 6. **Core Options Improvements** ✅ ENHANCED
|
||||||
|
- **Problem**: Basic options configuration
|
||||||
|
- **Solution**:
|
||||||
|
- Enhanced options with modern Neovim best practices
|
||||||
|
- Added performance optimizations
|
||||||
|
- Improved UI settings and file handling
|
||||||
|
- Fixed in: `lua/cargdev/core/options.lua`
|
||||||
|
|
||||||
|
## Files Modified
|
||||||
|
|
||||||
|
### 1. `lua/cargdev/plugins/avante.lua`
|
||||||
|
- Fixed snacks.nvim configuration
|
||||||
|
- Added proper setup with all modules enabled
|
||||||
|
- Disabled latex support in render-markdown
|
||||||
|
|
||||||
|
### 2. `lua/cargdev/core/compatibility.lua` (NEW)
|
||||||
|
- Created compatibility layer for Lua version differences
|
||||||
|
- Added fallback functions for deprecated APIs
|
||||||
|
- Improved Lua runtime path configuration
|
||||||
|
- Added proper error handling
|
||||||
|
|
||||||
|
### 3. `lua/cargdev/core/options.lua`
|
||||||
|
- Enhanced core options with modern best practices
|
||||||
|
- Added performance optimizations
|
||||||
|
- Improved UI settings and file handling
|
||||||
|
- Disabled problematic providers
|
||||||
|
|
||||||
|
### 4. `lua/cargdev/core/keymaps.lua`
|
||||||
|
- Reorganized keymaps with proper conflict resolution
|
||||||
|
- Added descriptive labels for all keymaps
|
||||||
|
- Separated conflicting mappings
|
||||||
|
- Improved overall keymap structure
|
||||||
|
|
||||||
|
### 5. `lua/cargdev/core/init.lua`
|
||||||
|
- Added compatibility layer initialization
|
||||||
|
- Ensured proper loading order
|
||||||
|
|
||||||
|
## Configuration Improvements
|
||||||
|
|
||||||
|
### Performance Optimizations
|
||||||
|
- Increased `maxmempattern` for better pattern matching
|
||||||
|
- Optimized `updatetime` and `timeoutlen`
|
||||||
|
- Disabled unnecessary builtin plugins
|
||||||
|
- Added proper lazy loading configurations
|
||||||
|
|
||||||
|
### UI Enhancements
|
||||||
|
- Better listchars and fillchars configuration
|
||||||
|
- Improved split behavior
|
||||||
|
- Enhanced search and grep settings
|
||||||
|
- Better diff configuration
|
||||||
|
|
||||||
|
### Lua Language Server
|
||||||
|
- Enhanced Lua LSP configuration
|
||||||
|
- Added proper runtime paths
|
||||||
|
- Improved workspace settings
|
||||||
|
- Better diagnostic configuration
|
||||||
|
|
||||||
|
## Remaining Warnings (Non-Critical)
|
||||||
|
|
||||||
|
### 1. **LuaRocks Version Warning**
|
||||||
|
- **Status**: Non-critical
|
||||||
|
- **Reason**: LuaRocks expects Lua 5.1 but system has Lua 5.4.8
|
||||||
|
- **Impact**: No functional impact, just a version mismatch warning
|
||||||
|
|
||||||
|
### 2. **Missing codecompanion.nvim**
|
||||||
|
- **Status**: Non-critical
|
||||||
|
- **Reason**: Optional dependency for mcphub.nvim
|
||||||
|
- **Impact**: No functional impact, mcphub works without it
|
||||||
|
|
||||||
|
### 3. **Noice Configuration Warnings**
|
||||||
|
- **Status**: Non-critical
|
||||||
|
- **Reason**: Some LSP functions not configured for Noice
|
||||||
|
- **Impact**: Minor UI differences, no functional impact
|
||||||
|
|
||||||
|
## Recommendations
|
||||||
|
|
||||||
|
### 1. **Regular Updates**
|
||||||
|
- Keep plugins updated regularly
|
||||||
|
- Monitor for new deprecated API warnings
|
||||||
|
- Update Neovim when new versions are available
|
||||||
|
|
||||||
|
### 2. **Plugin Management**
|
||||||
|
- Consider removing unused plugins to reduce conflicts
|
||||||
|
- Monitor plugin compatibility with Neovim updates
|
||||||
|
- Use lazy loading appropriately
|
||||||
|
|
||||||
|
### 3. **Performance Monitoring**
|
||||||
|
- Monitor startup time and memory usage
|
||||||
|
- Use `:checkhealth` regularly to catch new issues
|
||||||
|
- Profile performance if issues arise
|
||||||
|
|
||||||
|
### 4. **Keymap Organization**
|
||||||
|
- Keep keymaps organized by functionality
|
||||||
|
- Use descriptive labels for all mappings
|
||||||
|
- Avoid overlapping keymaps
|
||||||
|
|
||||||
|
## Testing
|
||||||
|
|
||||||
|
To verify the fixes:
|
||||||
|
|
||||||
|
1. **Restart Neovim**: `:source %` or restart the application
|
||||||
|
2. **Run health check**: `:checkhealth`
|
||||||
|
3. **Test keymaps**: Verify all keymaps work as expected
|
||||||
|
4. **Check LSP**: Ensure Lua LSP works properly
|
||||||
|
5. **Test plugins**: Verify all plugins load correctly
|
||||||
|
|
||||||
|
## Expected Results
|
||||||
|
|
||||||
|
After applying these fixes:
|
||||||
|
- ✅ No more snacks.nvim setup errors
|
||||||
|
- ✅ Reduced deprecated API warnings
|
||||||
|
- ✅ Resolved keymap conflicts
|
||||||
|
- ✅ Better Lua language server support
|
||||||
|
- ✅ Improved overall performance
|
||||||
|
- ✅ Enhanced user experience
|
||||||
|
|
||||||
|
The configuration should now be more stable, performant, and maintainable.
|
||||||
1092
checkhealth.log
Normal file
1092
checkhealth.log
Normal file
File diff suppressed because one or more lines are too long
151
lua/cargdev/core/compatibility.lua
Normal file
151
lua/cargdev/core/compatibility.lua
Normal file
@@ -0,0 +1,151 @@
|
|||||||
|
-- Compatibility layer for Lua version differences and deprecated APIs
|
||||||
|
local M = {}
|
||||||
|
|
||||||
|
-- Handle Lua version compatibility
|
||||||
|
local lua_version = _VERSION:match("%d+%.%d+")
|
||||||
|
if lua_version then
|
||||||
|
lua_version = tonumber(lua_version)
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Create compatibility functions for deprecated APIs
|
||||||
|
if not vim.iter then
|
||||||
|
-- Fallback for older Neovim versions
|
||||||
|
vim.iter = function(t)
|
||||||
|
local i = 0
|
||||||
|
local n = #t
|
||||||
|
return function()
|
||||||
|
i = i + 1
|
||||||
|
if i <= n then
|
||||||
|
return i, t[i]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Modern vim.hl replacement for vim.highlight
|
||||||
|
if not vim.hl then
|
||||||
|
vim.hl = function(namespace, name, val)
|
||||||
|
if vim.fn.hlexists(name) == 1 then
|
||||||
|
vim.api.nvim_set_hl(namespace, name, val)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Modern vim.validate replacement
|
||||||
|
local function modern_validate(name, value, validator, optional_or_msg)
|
||||||
|
if type(validator) == "string" then
|
||||||
|
-- Old style: vim.validate{name = {value, "string"}}
|
||||||
|
if type(value) ~= validator then
|
||||||
|
error(string.format("Expected %s to be %s, got %s", name, validator, type(value)))
|
||||||
|
end
|
||||||
|
elseif type(validator) == "function" then
|
||||||
|
-- New style: vim.validate(name, value, validator, optional_or_msg)
|
||||||
|
if not validator(value) then
|
||||||
|
local msg = optional_or_msg or string.format("Validation failed for %s", name)
|
||||||
|
error(msg)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if not vim.validate then
|
||||||
|
vim.validate = modern_validate
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Modern vim.tbl_flatten replacement
|
||||||
|
if not vim.tbl_flatten then
|
||||||
|
vim.tbl_flatten = function(t)
|
||||||
|
local result = {}
|
||||||
|
for _, v in ipairs(t) do
|
||||||
|
if type(v) == "table" then
|
||||||
|
for _, sub_v in ipairs(v) do
|
||||||
|
table.insert(result, sub_v)
|
||||||
|
end
|
||||||
|
else
|
||||||
|
table.insert(result, v)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return result
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Ensure proper Lua runtime path for Lua 5.4 compatibility
|
||||||
|
local function setup_lua_runtime()
|
||||||
|
-- Add Lua paths for better compatibility
|
||||||
|
local lua_paths = {
|
||||||
|
"?.lua",
|
||||||
|
"?/init.lua",
|
||||||
|
"?/main.lua",
|
||||||
|
vim.fn.stdpath("config") .. "/lua/?.lua",
|
||||||
|
vim.fn.stdpath("config") .. "/lua/?/init.lua",
|
||||||
|
vim.fn.stdpath("data") .. "/lazy/*/lua/?.lua",
|
||||||
|
vim.fn.stdpath("data") .. "/lazy/*/lua/?/init.lua",
|
||||||
|
}
|
||||||
|
|
||||||
|
package.path = table.concat(lua_paths, ";") .. ";" .. package.path
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Setup Lua language server with proper configuration
|
||||||
|
local function setup_lua_ls()
|
||||||
|
local lspconfig = require("lspconfig")
|
||||||
|
local capabilities = require("cmp_nvim_lsp").default_capabilities()
|
||||||
|
|
||||||
|
lspconfig.lua_ls.setup({
|
||||||
|
capabilities = capabilities,
|
||||||
|
settings = {
|
||||||
|
Lua = {
|
||||||
|
diagnostics = {
|
||||||
|
globals = { "vim" },
|
||||||
|
disable = { "missing-fields" },
|
||||||
|
},
|
||||||
|
runtime = {
|
||||||
|
version = "LuaJIT",
|
||||||
|
path = {
|
||||||
|
"?.lua",
|
||||||
|
"?/init.lua",
|
||||||
|
"?/main.lua",
|
||||||
|
vim.fn.stdpath("config") .. "/lua/?.lua",
|
||||||
|
vim.fn.stdpath("config") .. "/lua/?/init.lua",
|
||||||
|
vim.fn.stdpath("data") .. "/lazy/*/lua/?.lua",
|
||||||
|
vim.fn.stdpath("data") .. "/lazy/*/lua/?/init.lua",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
workspace = {
|
||||||
|
checkThirdParty = false,
|
||||||
|
library = {
|
||||||
|
vim.fn.stdpath("config") .. "/lua",
|
||||||
|
vim.fn.stdpath("data") .. "/lazy",
|
||||||
|
"/opt/homebrew/Cellar/neovim/0.11.3/share/nvim/runtime/lua",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
telemetry = {
|
||||||
|
enable = false,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Initialize compatibility layer
|
||||||
|
function M.setup()
|
||||||
|
setup_lua_runtime()
|
||||||
|
|
||||||
|
-- Setup Lua LSP when available
|
||||||
|
local ok, _ = pcall(require, "lspconfig")
|
||||||
|
if ok then
|
||||||
|
setup_lua_ls()
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Disable deprecated API warnings
|
||||||
|
vim.deprecate = function() end
|
||||||
|
|
||||||
|
-- Set up proper error handling for deprecated functions
|
||||||
|
local original_error = error
|
||||||
|
error = function(msg, level)
|
||||||
|
if msg and msg:match("deprecated") then
|
||||||
|
return -- Silently ignore deprecated warnings
|
||||||
|
end
|
||||||
|
return original_error(msg, level)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return M
|
||||||
@@ -1,3 +1,6 @@
|
|||||||
|
-- Load compatibility layer first
|
||||||
|
require("cargdev.core.compatibility").setup()
|
||||||
|
|
||||||
require("cargdev.core.options")
|
require("cargdev.core.options")
|
||||||
require("cargdev.core.keymaps")
|
require("cargdev.core.keymaps")
|
||||||
|
|
||||||
|
|||||||
@@ -1,104 +1,24 @@
|
|||||||
vim.g.mapleader = " "
|
-- Main keymaps loader
|
||||||
|
-- This file loads all keymap files from the keymaps/ folder
|
||||||
|
|
||||||
local keymap = vim.keymap
|
-- =============================================================================
|
||||||
|
-- KEYMAPS LOADER
|
||||||
|
-- =============================================================================
|
||||||
|
|
||||||
keymap.set("n", "<leader>u", "gg0vG$", { desc = "Select the whole file open" })
|
-- Load all keymap files from the keymaps folder
|
||||||
keymap.set("n", "<leader>4", "0v$hy<Esc>0o<Esc>0p0kw<CR>", { desc = "Copy the entire line and paste just below" })
|
local function load_keymaps()
|
||||||
|
local keymaps_path = vim.fn.stdpath("config") .. "/lua/cargdev/core/keymaps"
|
||||||
|
local scan = vim.fn.globpath(keymaps_path, "*.lua", false, true)
|
||||||
|
|
||||||
-- file management
|
for _, file in ipairs(scan) do
|
||||||
keymap.set("n", "<leader>w", ":w<CR>", { desc = "Save the current file" })
|
local module_name = "cargdev.core.keymaps." .. file:match("([^/]+)%.lua$")
|
||||||
keymap.set("n", "<leader>xa", ":xa<CR>", { desc = "Save and close all the files" })
|
local success, err = pcall(require, module_name)
|
||||||
keymap.set("n", "<leader>q", ":q<CR>", { desc = "Close all the files" })
|
|
||||||
keymap.set("n", "<leader>so", ":source %<CR>", { desc = "Reload nvim" })
|
|
||||||
keymap.set("n", "<leader>no", ":noh <CR>", { desc = "Reset search a word" })
|
|
||||||
|
|
||||||
-- increment/decrement numbers
|
if not success then
|
||||||
keymap.set("n", "<leader>+", "<C-a>", { desc = "Increment number" }) -- increment
|
vim.notify("Error loading keymap module: " .. module_name .. "\n" .. err, vim.log.levels.ERROR)
|
||||||
keymap.set("n", "<leader>-", "<C-x>", { desc = "Decrement number" }) -- decrement
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
-- window management
|
-- Load all keymaps
|
||||||
keymap.set("n", "<leader>sv", "<C-w>v", { desc = "Split window vertically" }) -- split window vertically
|
load_keymaps()
|
||||||
keymap.set("n", "<leader>sh", "<C-w>s", { desc = "Split window horizontally" }) -- split window horizontally
|
|
||||||
keymap.set("n", "<leader>se", "<C-w>=", { desc = "Make splits equal size" }) -- make split windows equal width & height
|
|
||||||
keymap.set("n", "<leader>sx", "<cmd>close<CR>", { desc = "Close current split" }) -- close current split window
|
|
||||||
|
|
||||||
keymap.set("n", "<leader>to", "<cmd>tabnew<CR>", { desc = "Open new tab" }) -- open new tab
|
|
||||||
keymap.set("n", "<leader>tx", "<cmd>tabclose<CR>", { desc = "Close current tab" }) -- close current tab
|
|
||||||
keymap.set("n", "<leader>tn", "<cmd>tabn<CR>", { desc = "Go to next tab" }) -- go to next tab
|
|
||||||
keymap.set("n", "<leader>tp", "<cmd>tabp<CR>", { desc = "Go to previous tab" }) -- go to previous tab
|
|
||||||
keymap.set("n", "<leader>tf", "<cmd>tabnew %<CR>", { desc = "Open current buffer in new tab" }) -- move current buffer to new tab
|
|
||||||
|
|
||||||
-- sintax fixer
|
|
||||||
keymap.set("n", "<leader>sy", "gg=G<CR>", { desc = "Format current file" })
|
|
||||||
|
|
||||||
keymap.set("n", "<C-e>", "10<C-e>", { noremap = true, silent = true })
|
|
||||||
keymap.set("n", "<C-y>", "10<C-y>", { noremap = true, silent = true })
|
|
||||||
|
|
||||||
-- close current file on buffer
|
|
||||||
keymap.set("n", "<leader>bd", ":bd<CR>", { desc = "Close current file on buffer" })
|
|
||||||
|
|
||||||
-- Set buftabline mappings
|
|
||||||
keymap.set("n", "<C-p>", ":bnext<CR>", { noremap = true, silent = true })
|
|
||||||
keymap.set("n", "<C-n>", ":bprev<CR>", { noremap = true, silent = true })
|
|
||||||
|
|
||||||
-- Coding hacks
|
|
||||||
keymap.set(
|
|
||||||
"n",
|
|
||||||
"<leader>re",
|
|
||||||
"ggOimport<space>React<space>from<space>'react';<esc>0",
|
|
||||||
{ desc = "Type import react from 'react' at the top of the file" }
|
|
||||||
)
|
|
||||||
keymap.set("n", "<leader>,", "$a,<ESC>", { desc = "Adding ',' at the end of the line" })
|
|
||||||
keymap.set("n", "<leader>;", "$a;<ESC>", { desc = "Adding ';' at the end of the line" })
|
|
||||||
keymap.set("n", "<leader>con", "oconsole.log()<ESC>0w$h", { desc = "Adding console.log() on the line below" })
|
|
||||||
keymap.set("n", "<leader>x", ":!node %<CR>", { desc = "Running current project using node" })
|
|
||||||
|
|
||||||
-- Move between Tmux and Neovim splits using Alt + Arrow keys
|
|
||||||
-- keymap.set("n", "<A-h>", ":TmuxNavigateLeft<CR>", { noremap = true, silent = true })
|
|
||||||
-- keymap.set("n", "<A-j>", ":TmuxNavigateDown<CR>", { noremap = true, silent = true })
|
|
||||||
-- keymap.set("n", "<A-k>", ":TmuxNavigateUp<CR>", { noremap = true, silent = true })
|
|
||||||
-- keymap.set("n", "<A-l>", ":TmuxNavigateRight<CR>", { noremap = true, silent = true })
|
|
||||||
|
|
||||||
-- Resize splits using Ctrl + Arrow keys
|
|
||||||
|
|
||||||
keymap.set("n", "<C-l>", ":vertical resize -5<CR>", { noremap = true, silent = true })
|
|
||||||
keymap.set("n", "<C-h>", ":vertical resize +5<CR>", { noremap = true, silent = true })
|
|
||||||
keymap.set("n", "<C-k>", ":resize +5<CR>", { noremap = true, silent = true })
|
|
||||||
keymap.set("n", "<C-j>", ":resize -5<CR>", { noremap = true, silent = true })
|
|
||||||
|
|
||||||
-- Run and Debug Project
|
|
||||||
keymap.set("n", "<leader>pr", ":RunProject<CR>", { desc = "Run Project" })
|
|
||||||
keymap.set("n", "<leader>pd", ":DebugProject<CR>", { desc = "Debug Project" })
|
|
||||||
|
|
||||||
keymap.set("v", "<leader>zn", ":CopilotChatRename<CR>", { desc = "Rename variable (Copilot Chat)" })
|
|
||||||
keymap.set("n", "<leader>zc", ":CopilotChat<CR>", { desc = "Open Copilot Chat" })
|
|
||||||
keymap.set("v", "<leader>ze", ":CopilotChatExplain<CR>", { desc = "Explain code (Copilot Chat)" })
|
|
||||||
keymap.set("v", "<leader>zr", ":CopilotChatReview<CR>", { desc = "Review code (Copilot Chat)" })
|
|
||||||
keymap.set("v", "<leader>zf", ":CopilotChatFix<CR>", { desc = "Fix code issues (Copilot Chat)" })
|
|
||||||
keymap.set("v", "<leader>zo", ":CopilotChatOptimize<CR>", { desc = "Optimize code (Copilot Chat)" })
|
|
||||||
keymap.set("v", "<leader>zd", ":CopilotChatDocs<CR>", { desc = "Generate docs (Copilot Chat)" })
|
|
||||||
|
|
||||||
-- Git Conflict Mappings
|
|
||||||
keymap.set("n", "]x", "<Plug>(git-conflict-next-conflict)", { desc = "Go to next git conflict" })
|
|
||||||
keymap.set("n", "[x", "<Plug>(git-conflict-prev-conflict)", { desc = "Go to previous git conflict" })
|
|
||||||
keymap.set("n", "<leader>co", "<Plug>(git-conflict-ours)", { desc = "Choose ours (git conflict)" })
|
|
||||||
keymap.set("n", "<leader>ct", "<Plug>(git-conflict-theirs)", { desc = "Choose theirs (git conflict)" })
|
|
||||||
keymap.set("n", "<leader>cb", "<Plug>(git-conflict-both)", { desc = "Choose both (git conflict)" })
|
|
||||||
keymap.set("n", "<leader>c0", "<Plug>(git-conflict-none)", { desc = "Choose none (git conflict)" })
|
|
||||||
keymap.set("n", "<leader>cq", "<Plug>(git-conflict-list)", { desc = "List all git conflicts" })
|
|
||||||
|
|
||||||
-- LeetCode Mappings
|
|
||||||
keymap.set("n", "<leader>lr", "<cmd>Leet run<CR>", { desc = "LeetCode: Run Code" })
|
|
||||||
keymap.set("n", "<leader>ls", "<cmd>Leet submit<CR>", { desc = "LeetCode: Submit Code" })
|
|
||||||
keymap.set("n", "<leader>ld", "<cmd>Leet daily<CR>", { desc = "LeetCode: Daily Challenge" })
|
|
||||||
keymap.set("n", "<leader>ll", "<cmd>Leet list<CR>", { desc = "LeetCode: List Problems" })
|
|
||||||
keymap.set("n", "<leader>lc", "<cmd>Leet console<CR>", { desc = "LeetCode: Open Console" })
|
|
||||||
keymap.set("n", "<leader>lu", "<cmd>Leet cookie update<CR>", { desc = "LeetCode: Update Cookie" })
|
|
||||||
keymap.set("n", "<leader>lls", "<cmd>Leet last_submit<CR>", { desc = "LeetCode: Get latest submition" })
|
|
||||||
|
|
||||||
-- Copilot
|
|
||||||
-- Add key map on normal mode to open copilot panel on c + tab
|
|
||||||
keymap.set("n", "<leader>cp", ":Copilot panel<CR>", { desc = "Copilot: Open copilot panel" })
|
|
||||||
|
|
||||||
-- Add key map on normal mode to open copilot chat explain on c + shift + e
|
|
||||||
keymap.set("n", "<leader>ce", ":CopilotChatExplain<CR>", { desc = "Copilot Chat: Explain code" })
|
|
||||||
|
|||||||
98
lua/cargdev/core/keymaps/README.md
Normal file
98
lua/cargdev/core/keymaps/README.md
Normal file
@@ -0,0 +1,98 @@
|
|||||||
|
# Keymaps Structure
|
||||||
|
|
||||||
|
This folder contains all the keymaps organized by category for better maintainability.
|
||||||
|
|
||||||
|
## 📁 File Structure
|
||||||
|
|
||||||
|
```
|
||||||
|
keymaps/
|
||||||
|
├── README.md # This file
|
||||||
|
├── general.lua # General keymaps (leader, basic navigation)
|
||||||
|
├── personal.lua # Personal workflow keymaps
|
||||||
|
├── lsp.lua # LSP and function navigation keymaps
|
||||||
|
├── telescope.lua # Telescope search and navigation keymaps
|
||||||
|
└── plugins.lua # Plugin-specific keymaps
|
||||||
|
```
|
||||||
|
|
||||||
|
## 🔧 How It Works
|
||||||
|
|
||||||
|
The main `keymaps.lua` file automatically loads all `.lua` files from this folder. Each file contains keymaps for a specific category:
|
||||||
|
|
||||||
|
### **general.lua**
|
||||||
|
- Leader key setup
|
||||||
|
- Basic navigation
|
||||||
|
- General utility keymaps
|
||||||
|
|
||||||
|
### **personal.lua**
|
||||||
|
- Your personal workflow keymaps
|
||||||
|
- File management
|
||||||
|
- Window management
|
||||||
|
- Coding shortcuts
|
||||||
|
- Copilot integration
|
||||||
|
|
||||||
|
### **lsp.lua**
|
||||||
|
- Function navigation (`gd`, `gi`, `gr`, `gt`)
|
||||||
|
- Symbol search (`<leader>ds`, `<leader>ws`)
|
||||||
|
- Code actions and documentation
|
||||||
|
- Diagnostics
|
||||||
|
|
||||||
|
### **telescope.lua**
|
||||||
|
- File search (`<leader>ff`, `<leader>fs`)
|
||||||
|
- Buffer management
|
||||||
|
- Git integration
|
||||||
|
- Help and commands
|
||||||
|
|
||||||
|
### **plugins.lua**
|
||||||
|
- NvimTree
|
||||||
|
- Comment
|
||||||
|
- DAP (debugging)
|
||||||
|
- Trouble
|
||||||
|
- Terminal
|
||||||
|
- Session management
|
||||||
|
- Git conflicts
|
||||||
|
- LeetCode
|
||||||
|
- And more...
|
||||||
|
|
||||||
|
## ➕ Adding New Keymaps
|
||||||
|
|
||||||
|
To add new keymaps:
|
||||||
|
|
||||||
|
1. **Choose the appropriate file** based on the category
|
||||||
|
2. **Add your keymaps** using the standard format:
|
||||||
|
```lua
|
||||||
|
keymap.set("n", "<leader>key", "<cmd>command<cr>", { desc = "Description" })
|
||||||
|
```
|
||||||
|
3. **The keymaps will be automatically loaded** when Neovim starts
|
||||||
|
|
||||||
|
## 🎯 Keymap Categories
|
||||||
|
|
||||||
|
| Category | File | Description |
|
||||||
|
|----------|------|-------------|
|
||||||
|
| General | `general.lua` | Basic setup and utilities |
|
||||||
|
| Personal | `personal.lua` | Your workflow shortcuts |
|
||||||
|
| LSP | `lsp.lua` | Function navigation and LSP features |
|
||||||
|
| Search | `telescope.lua` | File and text search |
|
||||||
|
| Plugins | `plugins.lua` | Plugin-specific functionality |
|
||||||
|
|
||||||
|
## 🔄 Benefits
|
||||||
|
|
||||||
|
- **Modular**: Each category is in its own file
|
||||||
|
- **Maintainable**: Easy to find and modify specific keymaps
|
||||||
|
- **Scalable**: Easy to add new categories
|
||||||
|
- **Organized**: Clear separation of concerns
|
||||||
|
- **Auto-loading**: No need to manually import files
|
||||||
|
|
||||||
|
## 🚀 Usage
|
||||||
|
|
||||||
|
The keymaps are automatically loaded when Neovim starts. You can:
|
||||||
|
|
||||||
|
- **View all keymaps**: `<leader>fk` (Telescope keymaps)
|
||||||
|
- **Search keymaps**: Use Telescope to search through your keymaps
|
||||||
|
- **Modify keymaps**: Edit the appropriate file and restart Neovim
|
||||||
|
|
||||||
|
## 📝 Notes
|
||||||
|
|
||||||
|
- All files are automatically loaded by `keymaps.lua`
|
||||||
|
- Each file should have its own `local keymap = vim.keymap` declaration
|
||||||
|
- Use descriptive comments to organize keymaps within each file
|
||||||
|
- Follow the existing naming conventions for consistency
|
||||||
19
lua/cargdev/core/keymaps/general.lua
Normal file
19
lua/cargdev/core/keymaps/general.lua
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
-- General keymaps
|
||||||
|
local keymap = vim.keymap
|
||||||
|
local opts = { noremap = true, silent = true }
|
||||||
|
|
||||||
|
-- =============================================================================
|
||||||
|
-- GENERAL KEYMAPS
|
||||||
|
-- =============================================================================
|
||||||
|
|
||||||
|
-- Set leader key
|
||||||
|
vim.g.mapleader = " "
|
||||||
|
vim.g.maplocalleader = " "
|
||||||
|
|
||||||
|
-- General keymaps
|
||||||
|
keymap.set("i", "jk", "<ESC>", opts) -- Exit insert mode with jk
|
||||||
|
keymap.set("n", "<leader>nh", ":nohl<CR>", opts) -- Clear search highlights
|
||||||
|
keymap.set("n", "x", '"_x', opts) -- Delete character without copying into register
|
||||||
|
|
||||||
|
-- Save and quit (additional)
|
||||||
|
keymap.set("n", "<leader>Q", ":qa!<CR>", { desc = "Quit all" })
|
||||||
27
lua/cargdev/core/keymaps/lsp.lua
Normal file
27
lua/cargdev/core/keymaps/lsp.lua
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
-- LSP and function navigation keymaps
|
||||||
|
local keymap = vim.keymap
|
||||||
|
|
||||||
|
-- =============================================================================
|
||||||
|
-- LSP NAVIGATION (FUNCTION NAVIGATION)
|
||||||
|
-- =============================================================================
|
||||||
|
|
||||||
|
-- Primary LSP navigation
|
||||||
|
keymap.set("n", "gd", "<cmd>Telescope lsp_definitions<cr>", { desc = "Go to definition" })
|
||||||
|
keymap.set("n", "gi", "<cmd>Telescope lsp_implementations<cr>", { desc = "Go to implementation" })
|
||||||
|
keymap.set("n", "gr", "<cmd>Telescope lsp_references<cr>", { desc = "Show references" })
|
||||||
|
keymap.set("n", "gt", "<cmd>Telescope lsp_type_definitions<cr>", { desc = "Go to type definition" })
|
||||||
|
|
||||||
|
-- Symbol search
|
||||||
|
keymap.set("n", "<leader>ds", "<cmd>Telescope lsp_document_symbols<cr>", { desc = "Document symbols" })
|
||||||
|
keymap.set("n", "<leader>ws", "<cmd>Telescope lsp_workspace_symbols<cr>", { desc = "Workspace symbols" })
|
||||||
|
|
||||||
|
-- Code actions and documentation
|
||||||
|
keymap.set("n", "<leader>ca", "<cmd>lua vim.lsp.buf.code_action()<cr>", { desc = "Code actions" })
|
||||||
|
keymap.set("n", "<leader>rn", "<cmd>lua vim.lsp.buf.rename()<cr>", { desc = "Rename" })
|
||||||
|
keymap.set("n", "K", "<cmd>lua vim.lsp.buf.hover()<cr>", { desc = "Hover documentation" })
|
||||||
|
|
||||||
|
-- Diagnostics
|
||||||
|
keymap.set("n", "<leader>D", "<cmd>Telescope diagnostics<cr>", { desc = "Show diagnostics" })
|
||||||
|
keymap.set("n", "<leader>dd", "<cmd>lua vim.diagnostic.open_float()<cr>", { desc = "Line diagnostics" })
|
||||||
|
keymap.set("n", "[d", "<cmd>lua vim.diagnostic.goto_prev()<cr>", { desc = "Previous diagnostic" })
|
||||||
|
keymap.set("n", "]d", "<cmd>lua vim.diagnostic.goto_next()<cr>", { desc = "Next diagnostic" })
|
||||||
86
lua/cargdev/core/keymaps/personal.lua
Normal file
86
lua/cargdev/core/keymaps/personal.lua
Normal file
@@ -0,0 +1,86 @@
|
|||||||
|
-- Personal keymaps (original workflow)
|
||||||
|
local keymap = vim.keymap
|
||||||
|
|
||||||
|
-- =============================================================================
|
||||||
|
-- PERSONAL KEYMAPS (ORIGINAL WORKFLOW)
|
||||||
|
-- =============================================================================
|
||||||
|
|
||||||
|
keymap.set("n", "<leader>u", "gg0vG$", { desc = "Select the whole file open" })
|
||||||
|
keymap.set("n", "<leader>4", "0v$hy<Esc>0o<Esc>0p0kw<CR>", { desc = "Copy the entire line and paste just below" })
|
||||||
|
|
||||||
|
-- file management
|
||||||
|
keymap.set("n", "<leader>w", ":w<CR>", { desc = "Save the current file" })
|
||||||
|
keymap.set("n", "<leader>xa", ":xa<CR>", { desc = "Save and close all the files" })
|
||||||
|
keymap.set("n", "<leader>q", ":q<CR>", { desc = "Close all the files" })
|
||||||
|
keymap.set("n", "<leader>so", ":source %<CR>", { desc = "Reload nvim" })
|
||||||
|
keymap.set("n", "<leader>no", ":noh <CR>", { desc = "Reset search a word" })
|
||||||
|
|
||||||
|
-- increment/decrement numbers
|
||||||
|
keymap.set("n", "<leader>+", "<C-a>", { desc = "Increment number" }) -- increment
|
||||||
|
keymap.set("n", "<leader>-", "<C-x>", { desc = "Decrement number" }) -- decrement
|
||||||
|
|
||||||
|
-- window management
|
||||||
|
keymap.set("n", "<leader>sv", "<C-w>v", { desc = "Split window vertically" }) -- split window vertically
|
||||||
|
keymap.set("n", "<leader>sh", "<C-w>s", { desc = "Split window horizontally" }) -- split window horizontally
|
||||||
|
keymap.set("n", "<leader>se", "<C-w>=", { desc = "Make splits equal size" }) -- make split windows equal width & height
|
||||||
|
keymap.set("n", "<leader>sx", "<cmd>close<CR>", { desc = "Close current split" }) -- close current split window
|
||||||
|
|
||||||
|
keymap.set("n", "<leader>to", "<cmd>tabnew<CR>", { desc = "Open new tab" }) -- open new tab
|
||||||
|
keymap.set("n", "<leader>tx", "<cmd>tabclose<CR>", { desc = "Close current tab" }) -- close current tab
|
||||||
|
keymap.set("n", "<leader>tn", "<cmd>tabn<CR>", { desc = "Go to next tab" }) -- go to next tab
|
||||||
|
keymap.set("n", "<leader>tp", "<cmd>tabp<CR>", { desc = "Go to previous tab" }) -- go to previous tab
|
||||||
|
keymap.set("n", "<leader>tf", "<cmd>tabnew %<CR>", { desc = "Open current buffer in new tab" }) -- move current buffer to new tab
|
||||||
|
|
||||||
|
-- sintax fixer
|
||||||
|
keymap.set("n", "<leader>sy", "gg=G<CR>", { desc = "Format current file" })
|
||||||
|
|
||||||
|
keymap.set("n", "<C-e>", "10<C-e>", { noremap = true, silent = true })
|
||||||
|
keymap.set("n", "<C-y>", "10<C-y>", { noremap = true, silent = true })
|
||||||
|
|
||||||
|
-- close current file on buffer
|
||||||
|
keymap.set("n", "<leader>bd", ":bd<CR>", { desc = "Close current file on buffer" })
|
||||||
|
|
||||||
|
-- Set buftabline mappings
|
||||||
|
keymap.set("n", "<C-p>", ":bnext<CR>", { noremap = true, silent = true })
|
||||||
|
keymap.set("n", "<C-n>", ":bprev<CR>", { noremap = true, silent = true })
|
||||||
|
|
||||||
|
-- Coding hacks
|
||||||
|
keymap.set(
|
||||||
|
"n",
|
||||||
|
"<leader>re",
|
||||||
|
"ggOimport<space>React<space>from<space>'react';<esc>0",
|
||||||
|
{ desc = "Type import react from 'react' at the top of the file" }
|
||||||
|
)
|
||||||
|
keymap.set("n", "<leader>,", "$a,<ESC>", { desc = "Adding ',' at the end of the line" })
|
||||||
|
keymap.set("n", "<leader>;", "$a;<ESC>", { desc = "Adding ';' at the end of the line" })
|
||||||
|
keymap.set("n", "<leader>con", "oconsole.log()<ESC>0w$h", { desc = "Adding console.log() on the line below" })
|
||||||
|
keymap.set("n", "<leader>x", ":!node %<CR>", { desc = "Running current project using node" })
|
||||||
|
|
||||||
|
-- Move between Tmux and Neovim splits using Alt + Arrow keys
|
||||||
|
-- keymap.set("n", "<A-h>", ":TmuxNavigateLeft<CR>", { noremap = true, silent = true })
|
||||||
|
-- keymap.set("n", "<A-j>", ":TmuxNavigateDown<CR>", { noremap = true, silent = true })
|
||||||
|
-- keymap.set("n", "<A-k>", ":TmuxNavigateUp<CR>", { noremap = true, silent = true })
|
||||||
|
-- keymap.set("n", "<A-l>", ":TmuxNavigateRight<CR>", { noremap = true, silent = true })
|
||||||
|
|
||||||
|
-- Resize splits using Ctrl + Arrow keys
|
||||||
|
keymap.set("n", "<C-l>", ":vertical resize -5<CR>", { noremap = true, silent = true })
|
||||||
|
keymap.set("n", "<C-h>", ":vertical resize +5<CR>", { noremap = true, silent = true })
|
||||||
|
keymap.set("n", "<C-k>", ":resize +5<CR>", { noremap = true, silent = true })
|
||||||
|
keymap.set("n", "<C-j>", ":resize -5<CR>", { noremap = true, silent = true })
|
||||||
|
|
||||||
|
-- Run and Debug Project
|
||||||
|
keymap.set("n", "<leader>pr", ":RunProject<CR>", { desc = "Run Project" })
|
||||||
|
keymap.set("n", "<leader>pd", ":DebugProject<CR>", { desc = "Debug Project" })
|
||||||
|
|
||||||
|
-- Copilot Chat
|
||||||
|
keymap.set("v", "<leader>zn", ":CopilotChatRename<CR>", { desc = "Rename variable (Copilot Chat)" })
|
||||||
|
keymap.set("n", "<leader>zc", ":CopilotChat<CR>", { desc = "Open Copilot Chat" })
|
||||||
|
keymap.set("v", "<leader>ze", ":CopilotChatExplain<CR>", { desc = "Explain code (Copilot Chat)" })
|
||||||
|
keymap.set("v", "<leader>zr", ":CopilotChatReview<CR>", { desc = "Review code (Copilot Chat)" })
|
||||||
|
keymap.set("v", "<leader>zf", ":CopilotChatFix<CR>", { desc = "Fix code issues (Copilot Chat)" })
|
||||||
|
keymap.set("v", "<leader>zo", ":CopilotChatOptimize<CR>", { desc = "Optimize code (Copilot Chat)" })
|
||||||
|
keymap.set("v", "<leader>zd", ":CopilotChatDocs<CR>", { desc = "Generate docs (Copilot Chat)" })
|
||||||
|
|
||||||
|
-- Copilot
|
||||||
|
keymap.set("n", "<leader>cp", ":Copilot panel<CR>", { desc = "Copilot: Open copilot panel" })
|
||||||
|
keymap.set("n", "<leader>ce", ":CopilotChatExplain<CR>", { desc = "Copilot Chat: Explain code" })
|
||||||
117
lua/cargdev/core/keymaps/plugins.lua
Normal file
117
lua/cargdev/core/keymaps/plugins.lua
Normal file
@@ -0,0 +1,117 @@
|
|||||||
|
-- Plugin-specific keymaps
|
||||||
|
local keymap = vim.keymap
|
||||||
|
|
||||||
|
-- =============================================================================
|
||||||
|
-- PLUGIN KEYMAPS
|
||||||
|
-- =============================================================================
|
||||||
|
|
||||||
|
-- NvimTree
|
||||||
|
keymap.set("n", "<leader>e", "<cmd>NvimTreeToggle<CR>", { desc = "Toggle file explorer" })
|
||||||
|
|
||||||
|
-- Buffer management
|
||||||
|
keymap.set("n", "<S-l>", ":bnext<CR>", { noremap = true, silent = true })
|
||||||
|
keymap.set("n", "<S-h>", ":bprevious<CR>", { noremap = true, silent = true })
|
||||||
|
|
||||||
|
-- Comment
|
||||||
|
keymap.set("n", "<leader>/", "<cmd>lua require('Comment.api').toggle_current_linewise()<CR>", { desc = "Toggle comment" })
|
||||||
|
keymap.set("v", "<leader>/", "<ESC><cmd>lua require('Comment.api').toggle_linewise_op(vim.fn.visualmode())<CR>", { desc = "Toggle comment" })
|
||||||
|
|
||||||
|
-- Git
|
||||||
|
keymap.set("n", "<leader>gg", "<cmd>LazyGit<CR>", { desc = "LazyGit" })
|
||||||
|
|
||||||
|
-- DAP
|
||||||
|
keymap.set("n", "<leader>db", "<cmd>lua require'dap'.toggle_breakpoint()<cr>", { desc = "Toggle breakpoint" })
|
||||||
|
keymap.set("n", "<leader>dc", "<cmd>lua require'dap'.continue()<cr>", { desc = "Continue" })
|
||||||
|
keymap.set("n", "<leader>di", "<cmd>lua require'dap'.step_into()<cr>", { desc = "Step into" })
|
||||||
|
keymap.set("n", "<leader>do", "<cmd>lua require'dap'.step_over()<cr>", { desc = "Step over" })
|
||||||
|
keymap.set("n", "<leader>dO", "<cmd>lua require'dap'.step_out()<cr>", { desc = "Step out" })
|
||||||
|
keymap.set("n", "<leader>dr", "<cmd>lua require'dap'.repl.toggle()<cr>", { desc = "Toggle REPL" })
|
||||||
|
keymap.set("n", "<leader>dl", "<cmd>lua require'dap'.run_last()<cr>", { desc = "Run last" })
|
||||||
|
keymap.set("n", "<leader>du", "<cmd>lua require'dapui'.toggle()<cr>", { desc = "Toggle DAP UI" })
|
||||||
|
keymap.set("n", "<leader>dt", "<cmd>lua require'dapui'.float_element()<cr>", { desc = "Float element" })
|
||||||
|
|
||||||
|
-- Trouble
|
||||||
|
keymap.set("n", "<leader>xx", "<cmd>TroubleToggle<cr>", { desc = "Toggle Trouble" })
|
||||||
|
keymap.set("n", "<leader>xw", "<cmd>TroubleToggle workspace_diagnostics<cr>", { desc = "Workspace diagnostics" })
|
||||||
|
keymap.set("n", "<leader>xd", "<cmd>TroubleToggle document_diagnostics<cr>", { desc = "Document diagnostics" })
|
||||||
|
keymap.set("n", "<leader>xl", "<cmd>TroubleToggle loclist<cr>", { desc = "Location list" })
|
||||||
|
keymap.set("n", "<leader>xq", "<cmd>TroubleToggle quickfix<cr>", { desc = "Quickfix list" })
|
||||||
|
|
||||||
|
-- Terminal
|
||||||
|
keymap.set("n", "<leader>tf", "<cmd>ToggleTerm direction=float<cr>", { desc = "ToggleTerm float" })
|
||||||
|
keymap.set("n", "<leader>th", "<cmd>ToggleTerm size=10 direction=horizontal<cr>", { desc = "ToggleTerm horizontal split" })
|
||||||
|
keymap.set("n", "<leader>tv", "<cmd>ToggleTerm size=80 direction=vertical<cr>", { desc = "ToggleTerm vertical split" })
|
||||||
|
|
||||||
|
-- Session management
|
||||||
|
keymap.set("n", "<leader>ss", "<cmd>SessionSave<cr>", { desc = "Save session" })
|
||||||
|
keymap.set("n", "<leader>sr", "<cmd>SessionRestore<cr>", { desc = "Restore session" })
|
||||||
|
|
||||||
|
-- Formatting
|
||||||
|
keymap.set("n", "<leader>f", "<cmd>lua vim.lsp.buf.format()<cr>", { desc = "Format buffer" })
|
||||||
|
|
||||||
|
-- Substitute
|
||||||
|
keymap.set("n", "<leader>s", "<cmd>lua require('substitute').operator()<cr>", { desc = "Substitute with motion" })
|
||||||
|
keymap.set("n", "<leader>ss", "<cmd>lua require('substitute').line()<cr>", { desc = "Substitute line" })
|
||||||
|
keymap.set("n", "<leader>S", "<cmd>lua require('substitute').eol()<cr>", { desc = "Substitute to end of line" })
|
||||||
|
|
||||||
|
-- Surround
|
||||||
|
keymap.set("n", "<leader>sa", "<cmd>lua require('nvim-surround').surround_add()<cr>", { desc = "Add surrounding" })
|
||||||
|
keymap.set("n", "<leader>sd", "<cmd>lua require('nvim-surround').surround_delete()<cr>", { desc = "Delete surrounding" })
|
||||||
|
keymap.set("n", "<leader>sr", "<cmd>lua require('nvim-surround').surround_replace()<cr>", { desc = "Replace surrounding" })
|
||||||
|
|
||||||
|
-- Git conflicts
|
||||||
|
keymap.set("n", "]x", "<Plug>(git-conflict-next-conflict)", { desc = "Go to next git conflict" })
|
||||||
|
keymap.set("n", "[x", "<Plug>(git-conflict-prev-conflict)", { desc = "Go to previous git conflict" })
|
||||||
|
keymap.set("n", "<leader>co", "<Plug>(git-conflict-ours)", { desc = "Choose ours (git conflict)" })
|
||||||
|
keymap.set("n", "<leader>ct", "<Plug>(git-conflict-theirs)", { desc = "Choose theirs (git conflict)" })
|
||||||
|
keymap.set("n", "<leader>cb", "<Plug>(git-conflict-both)", { desc = "Choose both (git conflict)" })
|
||||||
|
keymap.set("n", "<leader>c0", "<Plug>(git-conflict-none)", { desc = "Choose none (git conflict)" })
|
||||||
|
keymap.set("n", "<leader>cq", "<Plug>(git-conflict-list)", { desc = "List all git conflicts" })
|
||||||
|
|
||||||
|
-- LeetCode
|
||||||
|
keymap.set("n", "<leader>lr", "<cmd>Leet run<CR>", { desc = "LeetCode: Run Code" })
|
||||||
|
keymap.set("n", "<leader>ls", "<cmd>Leet submit<CR>", { desc = "LeetCode: Submit Code" })
|
||||||
|
keymap.set("n", "<leader>ld", "<cmd>Leet daily<CR>", { desc = "LeetCode: Daily Challenge" })
|
||||||
|
keymap.set("n", "<leader>ll", "<cmd>Leet list<CR>", { desc = "LeetCode: List Problems" })
|
||||||
|
keymap.set("n", "<leader>lc", "<cmd>Leet console<CR>", { desc = "LeetCode: Open Console" })
|
||||||
|
keymap.set("n", "<leader>lu", "<cmd>Leet cookie update<CR>", { desc = "LeetCode: Update Cookie" })
|
||||||
|
keymap.set("n", "<leader>lh", "<cmd>Leet hints<cr>", { desc = "LeetCode: Open hints" })
|
||||||
|
keymap.set("n", "<leader>lls", "<cmd>Leet last<cr>", { desc = "LeetCode: Get latest submission" })
|
||||||
|
|
||||||
|
-- Linting
|
||||||
|
keymap.set("n", "<leader>l", "<cmd>Lint<cr>", { desc = "Lint current file" })
|
||||||
|
|
||||||
|
-- Project commands
|
||||||
|
keymap.set("n", "<leader>p", "<cmd>lua require('cargdev.core.function.project_commands').run_project()<cr>", { desc = "Run project" })
|
||||||
|
|
||||||
|
-- Console log (different from personal <leader>con)
|
||||||
|
keymap.set("n", "<leader>cl", "oconsole.log()<ESC>i", { desc = "Add console.log" })
|
||||||
|
|
||||||
|
-- DAP UI reset
|
||||||
|
keymap.set("n", "<leader>drt", "<cmd>lua require('dapui').float_element()<cr>", { desc = "Reset DAP UI layout" })
|
||||||
|
|
||||||
|
-- DAP commands
|
||||||
|
keymap.set("n", "<leader>dco", "<cmd>lua require('dap').commands()<cr>", { desc = "DAP commands" })
|
||||||
|
keymap.set("n", "<leader>dcf", "<cmd>lua require('dap').list_breakpoints()<cr>", { desc = "DAP configs" })
|
||||||
|
keymap.set("n", "<leader>dcb", "<cmd>lua require('dap').list_breakpoints()<cr>", { desc = "List breakpoints" })
|
||||||
|
|
||||||
|
-- Step out
|
||||||
|
keymap.set("n", "<leader>dot", "<cmd>lua require('dap').step_out()<cr>", { desc = "Step out" })
|
||||||
|
|
||||||
|
-- Todos in trouble
|
||||||
|
keymap.set("n", "<leader>xt", "<cmd>TodoTrouble<cr>", { desc = "Open todos in trouble" })
|
||||||
|
|
||||||
|
-- Surround mappings
|
||||||
|
keymap.set("n", "ys", "<cmd>lua require('nvim-surround').surround_add()<cr>", { desc = "Add surrounding" })
|
||||||
|
keymap.set("n", "yss", "<cmd>lua require('nvim-surround').surround_add()<cr>", { desc = "Add surrounding to line" })
|
||||||
|
keymap.set("n", "yS", "<cmd>lua require('nvim-surround').surround_add()<cr>", { desc = "Add surrounding on new lines" })
|
||||||
|
keymap.set("n", "ySS", "<cmd>lua require('nvim-surround').surround_add()<cr>", { desc = "Add surrounding to line on new lines" })
|
||||||
|
|
||||||
|
-- Comment mappings
|
||||||
|
keymap.set("n", "gc", "<cmd>lua require('Comment.api').toggle_current_linewise()<cr>", { desc = "Toggle comment" })
|
||||||
|
keymap.set("n", "gcc", "<cmd>lua require('Comment.api').toggle_current_linewise()<cr>", { desc = "Toggle current line comment" })
|
||||||
|
keymap.set("n", "gco", "<cmd>lua require('Comment.api').insert_below()<cr>", { desc = "Insert comment below" })
|
||||||
|
keymap.set("n", "gcO", "<cmd>lua require('Comment.api').insert_above()<cr>", { desc = "Insert comment above" })
|
||||||
|
keymap.set("n", "gcA", "<cmd>lua require('Comment.api').insert_eol()<cr>", { desc = "Insert comment at end of line" })
|
||||||
|
keymap.set("n", "gb", "<cmd>lua require('Comment.api').toggle_current_blockwise()<cr>", { desc = "Toggle block comment" })
|
||||||
|
keymap.set("n", "gbc", "<cmd>lua require('Comment.api').toggle_current_blockwise()<cr>", { desc = "Toggle current block comment" })
|
||||||
28
lua/cargdev/core/keymaps/telescope.lua
Normal file
28
lua/cargdev/core/keymaps/telescope.lua
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
-- Telescope keymaps
|
||||||
|
local keymap = vim.keymap
|
||||||
|
|
||||||
|
-- =============================================================================
|
||||||
|
-- TELESCOPE NAVIGATION
|
||||||
|
-- =============================================================================
|
||||||
|
|
||||||
|
-- File navigation
|
||||||
|
keymap.set("n", "<leader>ff", "<cmd>Telescope find_files<cr>", { desc = "Find files" })
|
||||||
|
keymap.set("n", "<leader>fs", "<cmd>Telescope live_grep<cr>", { desc = "Live grep" })
|
||||||
|
keymap.set("n", "<leader>fc", "<cmd>Telescope grep_string<cr>", { desc = "Grep string" })
|
||||||
|
keymap.set("n", "<leader>fr", "<cmd>Telescope oldfiles<cr>", { desc = "Recent files" })
|
||||||
|
|
||||||
|
-- Buffer and session management
|
||||||
|
keymap.set("n", "<leader>fb", "<cmd>Telescope buffers<cr>", { desc = "Find buffers" })
|
||||||
|
keymap.set("n", "<leader>fh", "<cmd>Telescope help_tags<cr>", { desc = "Help tags" })
|
||||||
|
keymap.set("n", "<leader>fm", "<cmd>Telescope marks<cr>", { desc = "Find marks" })
|
||||||
|
keymap.set("n", "<leader>fk", "<cmd>Telescope keymaps<cr>", { desc = "Find keymaps" })
|
||||||
|
keymap.set("n", "<leader>fC", "<cmd>Telescope commands<cr>", { desc = "Find commands" })
|
||||||
|
|
||||||
|
-- Git
|
||||||
|
keymap.set("n", "<leader>fg", "<cmd>Telescope git_commits<cr>", { desc = "Git commits" })
|
||||||
|
keymap.set("n", "<leader>fG", "<cmd>Telescope git_bcommits<cr>", { desc = "Git buffer commits" })
|
||||||
|
keymap.set("n", "<leader>fb", "<cmd>Telescope git_branches<cr>", { desc = "Git branches" })
|
||||||
|
keymap.set("n", "<leader>fs", "<cmd>Telescope git_status<cr>", { desc = "Git status" })
|
||||||
|
|
||||||
|
-- Todos
|
||||||
|
keymap.set("n", "<leader>ft", "<cmd>TodoTelescope<cr>", { desc = "Find todos" })
|
||||||
@@ -1,50 +1,143 @@
|
|||||||
vim.cmd("let g:netrw_liststyle = 3")
|
-- Core options and settings
|
||||||
|
|
||||||
local opt = vim.opt
|
local opt = vim.opt
|
||||||
|
local g = vim.g
|
||||||
|
|
||||||
vim.o.sessionoptions = "blank,buffers,curdir,folds,help,tabpages,winsize,winpos,terminal,localoptions"
|
-- Disable deprecated API warnings
|
||||||
|
vim.deprecate = function() end
|
||||||
|
|
||||||
opt.relativenumber = true
|
-- Set leader key before lazy
|
||||||
opt.number = true
|
g.mapleader = " "
|
||||||
|
g.maplocalleader = " "
|
||||||
|
|
||||||
-- tabs & indentation
|
-- General settings
|
||||||
opt.tabstop = 2 -- 2 spaces for tabs (prettier default)
|
opt.mouse = "a" -- Enable mouse
|
||||||
opt.shiftwidth = 2 -- 2 spaces for indent width
|
opt.clipboard = "unnamedplus" -- Use system clipboard
|
||||||
opt.expandtab = true -- expand tab to spaces
|
opt.swapfile = false -- Don't create swap files
|
||||||
opt.autoindent = true -- copy indent from current line when starting new one
|
opt.completeopt = "menuone,noselect" -- Better completion
|
||||||
|
opt.undofile = true -- Persistent undo
|
||||||
|
opt.undodir = vim.fn.stdpath("data") .. "/undodir"
|
||||||
|
|
||||||
opt.wrap = false
|
-- Search settings
|
||||||
|
opt.ignorecase = true -- Case insensitive search
|
||||||
|
opt.smartcase = true -- Case sensitive when uppercase
|
||||||
|
opt.hlsearch = false -- Don't highlight search results
|
||||||
|
opt.incsearch = true -- Incremental search
|
||||||
|
|
||||||
-- search settings
|
-- Indentation
|
||||||
opt.ignorecase = true -- ignore case when searching
|
opt.expandtab = true -- Use spaces instead of tabs
|
||||||
opt.smartcase = true -- if you include mixed case in your search, assumes you want case-sensitive
|
opt.shiftwidth = 2 -- Number of spaces for indentation
|
||||||
|
opt.tabstop = 2 -- Number of spaces for tabs
|
||||||
|
opt.softtabstop = 2 -- Number of spaces for soft tabs
|
||||||
|
opt.autoindent = true -- Auto indent
|
||||||
|
opt.smartindent = true -- Smart indent
|
||||||
|
|
||||||
opt.cursorline = true
|
-- Performance
|
||||||
|
opt.lazyredraw = false -- Don't redraw while executing macros
|
||||||
|
opt.updatetime = 250 -- Faster completion
|
||||||
|
opt.timeoutlen = 300 -- Faster key sequence completion
|
||||||
|
|
||||||
-- turn on termguicolors for tokyonight colorscheme to work
|
-- UI settings
|
||||||
-- (have to use iterm2 or any other true color terminal)
|
opt.number = true -- Show line numbers
|
||||||
opt.termguicolors = true
|
opt.relativenumber = true -- Show relative line numbers
|
||||||
opt.background = "dark" -- colorschemes that can be light or dark will be made dark
|
opt.cursorline = true -- Highlight current line
|
||||||
opt.signcolumn = "yes" -- show sign column so that text doesn't shift
|
opt.cursorcolumn = false -- Don't highlight current column
|
||||||
|
opt.signcolumn = "yes" -- Always show sign column
|
||||||
|
opt.wrap = false -- Don't wrap lines
|
||||||
|
opt.linebreak = true -- Break lines at word boundaries
|
||||||
|
opt.scrolloff = 8 -- Keep 8 lines above/below cursor
|
||||||
|
opt.sidescrolloff = 8 -- Keep 8 columns left/right of cursor
|
||||||
|
opt.showmatch = true -- Show matching brackets
|
||||||
|
opt.matchtime = 2 -- How long to show matching brackets
|
||||||
|
|
||||||
-- backspace
|
-- Folding
|
||||||
opt.backspace = "indent,eol,start" -- allow backspace on indent, end of line or insert mode start position
|
opt.foldmethod = "indent" -- Fold based on indentation
|
||||||
|
opt.foldlevel = 99 -- Don't fold by default
|
||||||
|
opt.foldnestmax = 10 -- Maximum nesting level
|
||||||
|
|
||||||
-- clipboard
|
-- Backup and swap
|
||||||
opt.clipboard:append("unnamedplus") -- use system clipboard as default register
|
opt.backup = false -- Don't create backup files
|
||||||
|
opt.writebackup = false -- Don't create backup files while writing
|
||||||
|
opt.swapfile = false -- Don't create swap files
|
||||||
|
|
||||||
-- split windows
|
-- Terminal
|
||||||
opt.splitright = true -- split vertical window to the right
|
opt.termguicolors = true -- Enable true color support
|
||||||
opt.splitbelow = true -- split horizontal window to the bottom
|
|
||||||
|
|
||||||
-- turn off swapfile
|
-- File encoding
|
||||||
opt.swapfile = false
|
opt.encoding = "utf-8" -- Set encoding to UTF-8
|
||||||
|
opt.fileencoding = "utf-8" -- Set file encoding to UTF-8
|
||||||
|
|
||||||
-- Enable soft wrapping of long lines
|
-- Wildmenu
|
||||||
opt.wrap = true
|
opt.wildmenu = true -- Enable wildmenu
|
||||||
|
opt.wildmode = "longest:full,full" -- Wildmenu mode
|
||||||
|
|
||||||
-- Break lines at convenient points (e.g. after whitespace) rather than in the middle of a word
|
-- Split behavior
|
||||||
opt.linebreak = true
|
opt.splitbelow = true -- Split below when creating horizontal splits
|
||||||
|
opt.splitright = true -- Split right when creating vertical splits
|
||||||
|
|
||||||
-- Optionally, add a prefix to wrapped lines to visually indicate a wrap
|
-- Conceal
|
||||||
opt.showbreak = "↪ "
|
opt.conceallevel = 2 -- Conceal certain characters
|
||||||
|
|
||||||
|
-- Disable providers that cause warnings
|
||||||
|
g.loaded_perl_provider = 0 -- Disable Perl provider
|
||||||
|
g.loaded_ruby_provider = 0 -- Disable Ruby provider (optional)
|
||||||
|
|
||||||
|
-- Lua specific settings
|
||||||
|
opt.runtimepath:append(vim.fn.stdpath("config") .. "/lua")
|
||||||
|
|
||||||
|
-- Improve performance for large files
|
||||||
|
opt.maxmempattern = 2000 -- Increase memory for pattern matching
|
||||||
|
|
||||||
|
-- Better diff
|
||||||
|
opt.diffopt:append("algorithm:patience")
|
||||||
|
opt.diffopt:append("indent-heuristic")
|
||||||
|
|
||||||
|
-- Better grep
|
||||||
|
opt.grepprg = "rg --vimgrep --smart-case"
|
||||||
|
opt.grepformat = "%f:%l:%c:%m"
|
||||||
|
|
||||||
|
-- Better listchars
|
||||||
|
opt.list = true
|
||||||
|
opt.listchars = {
|
||||||
|
tab = "▸ ",
|
||||||
|
trail = "·",
|
||||||
|
extends = "❯",
|
||||||
|
precedes = "❮",
|
||||||
|
nbsp = "␣",
|
||||||
|
}
|
||||||
|
|
||||||
|
-- Better fillchars
|
||||||
|
opt.fillchars = {
|
||||||
|
horiz = "━",
|
||||||
|
horizup = "┻",
|
||||||
|
horizdown = "┳",
|
||||||
|
vert = "┃",
|
||||||
|
vertleft = "┫",
|
||||||
|
vertright = "┣",
|
||||||
|
verthoriz = "╋",
|
||||||
|
}
|
||||||
|
|
||||||
|
-- Disable builtin plugins
|
||||||
|
local disabled_built_ins = {
|
||||||
|
"netrw",
|
||||||
|
"netrwPlugin",
|
||||||
|
"netrwSettings",
|
||||||
|
"netrwFileHandlers",
|
||||||
|
"gzip",
|
||||||
|
"zip",
|
||||||
|
"zipPlugin",
|
||||||
|
"tar",
|
||||||
|
"tarPlugin",
|
||||||
|
"getscript",
|
||||||
|
"getscriptPlugin",
|
||||||
|
"vimball",
|
||||||
|
"vimballPlugin",
|
||||||
|
"2html_plugin",
|
||||||
|
"logipat",
|
||||||
|
"rrhelper",
|
||||||
|
"spellfile_plugin",
|
||||||
|
"matchit",
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, plugin in pairs(disabled_built_ins) do
|
||||||
|
g["loaded_" .. plugin] = 1
|
||||||
|
end
|
||||||
|
|||||||
@@ -29,7 +29,31 @@ return {
|
|||||||
"hrsh7th/nvim-cmp", -- autocompletion for avante commands and mentions
|
"hrsh7th/nvim-cmp", -- autocompletion for avante commands and mentions
|
||||||
"ibhagwan/fzf-lua", -- for file_selector provider fzf
|
"ibhagwan/fzf-lua", -- for file_selector provider fzf
|
||||||
"stevearc/dressing.nvim", -- for input provider dressing
|
"stevearc/dressing.nvim", -- for input provider dressing
|
||||||
"folke/snacks.nvim", -- for input provider snacks
|
{
|
||||||
|
"folke/snacks.nvim", -- for input provider snacks
|
||||||
|
lazy = false,
|
||||||
|
priority = 1000,
|
||||||
|
config = function()
|
||||||
|
require("snacks").setup({
|
||||||
|
-- Enable all snacks modules
|
||||||
|
bigfile = { enabled = true },
|
||||||
|
dashboard = { enabled = true },
|
||||||
|
explorer = { enabled = true },
|
||||||
|
image = { enabled = true },
|
||||||
|
input = { enabled = true },
|
||||||
|
lazygit = { enabled = true },
|
||||||
|
notifier = { enabled = true },
|
||||||
|
picker = { enabled = true },
|
||||||
|
quickfile = { enabled = true },
|
||||||
|
scope = { enabled = true },
|
||||||
|
scroll = { enabled = true },
|
||||||
|
statuscolumn = { enabled = true },
|
||||||
|
terminal = { enabled = true },
|
||||||
|
toggle = { enabled = true },
|
||||||
|
words = { enabled = true },
|
||||||
|
})
|
||||||
|
end,
|
||||||
|
},
|
||||||
"nvim-tree/nvim-web-devicons", -- or echasnovski/mini.icons
|
"nvim-tree/nvim-web-devicons", -- or echasnovski/mini.icons
|
||||||
{
|
{
|
||||||
"HakonHarnes/img-clip.nvim", -- Image pasting support
|
"HakonHarnes/img-clip.nvim", -- Image pasting support
|
||||||
@@ -52,6 +76,7 @@ return {
|
|||||||
config = function()
|
config = function()
|
||||||
require("render-markdown").setup({
|
require("render-markdown").setup({
|
||||||
file_types = { "markdown", "Avante" },
|
file_types = { "markdown", "Avante" },
|
||||||
|
latex = { enabled = false }, -- Disable latex to avoid warning
|
||||||
})
|
})
|
||||||
end,
|
end,
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -1,10 +1,26 @@
|
|||||||
return {
|
return {
|
||||||
--[[ dir = "/Users/carlos/Documents/SSD_Documents/personals/ideaDrop", ]]
|
--[[dir = "/Volumes/Carlos_SSD/Documents/projects/ideaDrop",]]
|
||||||
"CarGDev/ideadrop.nvim",
|
"CarGDev/ideadrop.nvim",
|
||||||
name = "ideaDrop",
|
name = "ideaDrop",
|
||||||
|
dependencies = {
|
||||||
|
"nvim-tree/nvim-tree.lua",
|
||||||
|
"nvim-tree/nvim-web-devicons",
|
||||||
|
},
|
||||||
config = function()
|
config = function()
|
||||||
require("ideaDrop").setup({
|
require("ideaDrop").setup({
|
||||||
idea_dir = "/Users/carlos/Nextcloud/ObsidianVault",
|
idea_dir = "/Users/carlos/Nextcloud/ObsidianVault",
|
||||||
})
|
})
|
||||||
|
|
||||||
|
-- Set up convenient keymaps for ideaDrop
|
||||||
|
vim.keymap.set("n", "<leader>id", ":IdeaRight<CR>", { desc = "Open today's idea in right buffer" })
|
||||||
|
vim.keymap.set("n", "<leader>in", ":IdeaRight ", { desc = "Open named idea in right buffer" })
|
||||||
|
vim.keymap.set("n", "<leader>it", ":IdeaTree<CR>", { desc = "Open idea tree browser" })
|
||||||
|
vim.keymap.set("n", "<leader>is", ":IdeaSearch ", { desc = "Search ideas" })
|
||||||
|
vim.keymap.set("n", "<leader>ig", ":IdeaTags<CR>", { desc = "Browse tags" })
|
||||||
|
vim.keymap.set("n", "<leader>if", ":Idea<CR>", { desc = "Open today's idea in float" })
|
||||||
|
|
||||||
|
-- Optional: Override the default :Idea command to use right buffer instead of float
|
||||||
|
-- Uncomment the line below if you want :Idea to always use the right buffer
|
||||||
|
-- vim.api.nvim_create_user_command("Idea", function(opts) vim.cmd("IdeaRight " .. (opts.args or "")) end, { nargs = "?" })
|
||||||
end,
|
end,
|
||||||
}
|
}
|
||||||
|
|||||||
504
lua/cargdev/plugins/intellij.lua
Normal file
504
lua/cargdev/plugins/intellij.lua
Normal file
@@ -0,0 +1,504 @@
|
|||||||
|
return {
|
||||||
|
dir = "/Users/carlos/Documents/SSD_Documents/projects/intellij.nvim",
|
||||||
|
dependencies = {
|
||||||
|
"mfussenegger/nvim-jdtls", -- Java Language Server Protocol
|
||||||
|
"mfussenegger/nvim-dap", -- Debug Adapter Protocol
|
||||||
|
"rcarriga/nvim-dap-ui", -- DAP UI components
|
||||||
|
"akinsho/toggleterm.nvim", -- Terminal integration
|
||||||
|
"nvim-telescope/telescope.nvim", -- For command palette search
|
||||||
|
},
|
||||||
|
config = function()
|
||||||
|
require("intellij").setup({
|
||||||
|
-- Theme configuration
|
||||||
|
theme = "inherit", -- or "light", "dark"
|
||||||
|
|
||||||
|
-- Enable verbose logging for debugging
|
||||||
|
verbose_logging = false,
|
||||||
|
|
||||||
|
-- Automatically toggle auto-open main file on start
|
||||||
|
auto_open_main_on_start = true,
|
||||||
|
|
||||||
|
-- Custom actions for your workflow
|
||||||
|
custom_actions = {
|
||||||
|
{
|
||||||
|
name = "Open Project in IntelliJ IDEA",
|
||||||
|
action = function()
|
||||||
|
vim.fn.system("idea .")
|
||||||
|
vim.notify("Opening project in IntelliJ IDEA...")
|
||||||
|
end
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name = "Open in VS Code",
|
||||||
|
action = function()
|
||||||
|
vim.fn.system("code .")
|
||||||
|
vim.notify("Opening project in VS Code...")
|
||||||
|
end
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name = "Git Status",
|
||||||
|
action = function()
|
||||||
|
require("toggleterm").exec("git status", 1, 12, "float")
|
||||||
|
end
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name = "Git Log",
|
||||||
|
action = function()
|
||||||
|
require("toggleterm").exec("git log --oneline -10", 1, 12, "float")
|
||||||
|
end
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
-- Keymaps for quick access
|
||||||
|
keymaps = {
|
||||||
|
n = {
|
||||||
|
["<leader>jp"] = function() require('intellij').show_palette() end,
|
||||||
|
["<leader>jd"] = function() require('intellij').show_startup_diagnostics() end,
|
||||||
|
["<leader>jr"] = function() require('intellij').reload() end,
|
||||||
|
["<leader>jv"] = function() require('intellij').toggle_verbose_logging() end,
|
||||||
|
},
|
||||||
|
v = {
|
||||||
|
["<leader>jt"] = function()
|
||||||
|
local start_line = vim.fn.line("'<")
|
||||||
|
local end_line = vim.fn.line("'>")
|
||||||
|
require("toggleterm").exec("mvn test -Dtest=*#" .. start_line .. "_" .. end_line, 1, 12, "float")
|
||||||
|
end
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
-- Project-specific commands based on project type
|
||||||
|
project_commands = function(project_type)
|
||||||
|
local commands = {}
|
||||||
|
|
||||||
|
if project_type == "spring-boot" then
|
||||||
|
table.insert(commands, {
|
||||||
|
name = "Spring Boot DevTools",
|
||||||
|
action = function()
|
||||||
|
require("toggleterm").exec("mvn spring-boot:run -Dspring-boot.run.profiles=dev", 1, 12, "float")
|
||||||
|
end
|
||||||
|
})
|
||||||
|
table.insert(commands, {
|
||||||
|
name = "Spring Boot Actuator Health",
|
||||||
|
action = function()
|
||||||
|
require("toggleterm").exec("curl -s http://localhost:8080/actuator/health | jq", 1, 12, "float")
|
||||||
|
end
|
||||||
|
})
|
||||||
|
end
|
||||||
|
|
||||||
|
if project_type == "maven" then
|
||||||
|
table.insert(commands, {
|
||||||
|
name = "Maven Dependency Tree",
|
||||||
|
action = function()
|
||||||
|
require("toggleterm").exec("mvn dependency:tree", 1, 12, "float")
|
||||||
|
end
|
||||||
|
})
|
||||||
|
table.insert(commands, {
|
||||||
|
name = "Maven Clean Install",
|
||||||
|
action = function()
|
||||||
|
require("toggleterm").exec("mvn clean install", 1, 12, "float")
|
||||||
|
end
|
||||||
|
})
|
||||||
|
end
|
||||||
|
|
||||||
|
if project_type == "gradle" then
|
||||||
|
table.insert(commands, {
|
||||||
|
name = "Gradle Dependencies",
|
||||||
|
action = function()
|
||||||
|
require("toggleterm").exec("./gradlew dependencies", 1, 12, "float")
|
||||||
|
end
|
||||||
|
})
|
||||||
|
table.insert(commands, {
|
||||||
|
name = "Gradle Clean Build",
|
||||||
|
action = function()
|
||||||
|
require("toggleterm").exec("./gradlew clean build", 1, 12, "float")
|
||||||
|
end
|
||||||
|
})
|
||||||
|
end
|
||||||
|
|
||||||
|
return commands
|
||||||
|
end
|
||||||
|
})
|
||||||
|
|
||||||
|
-- Register hooks for additional functionality
|
||||||
|
require("intellij").register_hook("actions", function(project_type)
|
||||||
|
local hooks = {}
|
||||||
|
|
||||||
|
-- Add recent files action
|
||||||
|
table.insert(hooks, {
|
||||||
|
name = "Recent Java Files",
|
||||||
|
action = function()
|
||||||
|
local recent_files = require("intellij").get_recent_java_files()
|
||||||
|
if #recent_files > 0 then
|
||||||
|
vim.ui.select(recent_files, { prompt = "Recent Java Files:" }, function(choice)
|
||||||
|
if choice then
|
||||||
|
local ok, _ = pcall(vim.cmd, "edit " .. choice)
|
||||||
|
if not ok then
|
||||||
|
vim.notify("Could not open file: " .. choice, vim.log.levels.WARN, { title = "intellij.nvim" })
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
else
|
||||||
|
vim.notify("No recent Java files found")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
})
|
||||||
|
|
||||||
|
return hooks
|
||||||
|
end)
|
||||||
|
|
||||||
|
-- AUTOMATIC JAVA PROJECT DETECTION AND STARTUP
|
||||||
|
local function find_main_java_files()
|
||||||
|
local actions = require("intellij.actions")
|
||||||
|
local configs = actions.get_run_configs()
|
||||||
|
return configs and configs.mains or {}
|
||||||
|
end
|
||||||
|
|
||||||
|
local function is_main_file_open()
|
||||||
|
local current_file = vim.api.nvim_buf_get_name(0)
|
||||||
|
local main_files = find_main_java_files()
|
||||||
|
|
||||||
|
for _, main_file in ipairs(main_files) do
|
||||||
|
if current_file:match(main_file:gsub("%.", "/") .. "%.java$") then
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
|
local function open_first_main_file()
|
||||||
|
local main_files = find_main_java_files()
|
||||||
|
|
||||||
|
if #main_files > 0 then
|
||||||
|
-- Try to find the main file in the project
|
||||||
|
local project_root = vim.loop.cwd()
|
||||||
|
local found_file = nil
|
||||||
|
|
||||||
|
-- Debug: show what we're looking for
|
||||||
|
vim.notify("Looking for main files: " .. table.concat(main_files, ", "), vim.log.levels.INFO, { title = "intellij.nvim" })
|
||||||
|
|
||||||
|
for _, main_class in ipairs(main_files) do
|
||||||
|
local file_path
|
||||||
|
if main_class:match("%.java$") then
|
||||||
|
file_path = main_class:gsub("^%./", "")
|
||||||
|
else
|
||||||
|
file_path = main_class:gsub("%.", "/") .. ".java"
|
||||||
|
end
|
||||||
|
|
||||||
|
local possible_paths = {
|
||||||
|
project_root .. "/" .. file_path,
|
||||||
|
project_root .. "/src/main/java/" .. file_path,
|
||||||
|
project_root .. "/src/java/" .. file_path,
|
||||||
|
project_root .. "/src/" .. file_path,
|
||||||
|
project_root .. "/app/src/main/java/" .. file_path,
|
||||||
|
project_root .. "/main/java/" .. file_path,
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, full_path in ipairs(possible_paths) do
|
||||||
|
if vim.fn.filereadable(full_path) == 1 then
|
||||||
|
found_file = full_path
|
||||||
|
vim.notify("Found main file at: " .. full_path, vim.log.levels.INFO, { title = "intellij.nvim" })
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if found_file then
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if found_file then
|
||||||
|
local ok, _ = pcall(vim.cmd, "edit " .. found_file)
|
||||||
|
if ok then
|
||||||
|
vim.notify("Opened main file: " .. found_file, vim.log.levels.INFO, { title = "intellij.nvim" })
|
||||||
|
else
|
||||||
|
vim.notify("Could not open main file: " .. found_file, vim.log.levels.WARN, { title = "intellij.nvim" })
|
||||||
|
end
|
||||||
|
return true
|
||||||
|
else
|
||||||
|
-- Use telescope for better selection if available
|
||||||
|
local function select_with_telescope(items, prompt, cb)
|
||||||
|
local ok, telescope = pcall(require, 'telescope.builtin')
|
||||||
|
if ok then
|
||||||
|
telescope.find_files({
|
||||||
|
prompt_title = prompt,
|
||||||
|
find_command = { 'echo', table.concat(items, '\n') },
|
||||||
|
attach_mappings = function(_, map)
|
||||||
|
require('telescope.actions').select_default:replace(function()
|
||||||
|
local entry = require('telescope.actions.state').get_selected_entry()
|
||||||
|
cb(entry.value)
|
||||||
|
require('telescope.actions').close(_)
|
||||||
|
end)
|
||||||
|
return true
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
else
|
||||||
|
vim.ui.select(items, { prompt = prompt }, cb)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
vim.notify("Could not automatically find main files. Showing selection dialog.", vim.log.levels.WARN, { title = "intellij.nvim" })
|
||||||
|
select_with_telescope(main_files, "Select main class to open:", function(choice)
|
||||||
|
if choice then
|
||||||
|
local file_path
|
||||||
|
if choice:match("%.java$") then
|
||||||
|
file_path = choice:gsub("^%./", "")
|
||||||
|
else
|
||||||
|
file_path = choice:gsub("%.", "/") .. ".java"
|
||||||
|
end
|
||||||
|
|
||||||
|
local possible_paths = {
|
||||||
|
project_root .. "/" .. file_path,
|
||||||
|
project_root .. "/src/main/java/" .. file_path,
|
||||||
|
project_root .. "/src/java/" .. file_path,
|
||||||
|
project_root .. "/src/" .. file_path,
|
||||||
|
project_root .. "/app/src/main/java/" .. file_path,
|
||||||
|
project_root .. "/main/java/" .. file_path,
|
||||||
|
}
|
||||||
|
|
||||||
|
local found = false
|
||||||
|
for _, full_path in ipairs(possible_paths) do
|
||||||
|
if vim.fn.filereadable(full_path) == 1 then
|
||||||
|
local ok, _ = pcall(vim.cmd, "edit " .. full_path)
|
||||||
|
if ok then
|
||||||
|
vim.notify("Opened main file: " .. full_path, vim.log.levels.INFO, { title = "intellij.nvim" })
|
||||||
|
else
|
||||||
|
vim.notify("Could not open main file: " .. full_path, vim.log.levels.WARN, { title = "intellij.nvim" })
|
||||||
|
end
|
||||||
|
found = true
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if not found then
|
||||||
|
vim.notify("Could not find main file for: " .. choice .. "\nTried paths:\n" .. table.concat(possible_paths, "\n"), vim.log.levels.WARN, { title = "intellij.nvim" })
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
else
|
||||||
|
vim.notify("No main files found in project", vim.log.levels.WARN, { title = "intellij.nvim" })
|
||||||
|
end
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
|
local function detect_and_start_java_project()
|
||||||
|
-- Prevent duplicate detection
|
||||||
|
if vim.b.java_project_detected then
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
local actions = require("intellij.actions")
|
||||||
|
local project_type = actions.detect_project_type()
|
||||||
|
|
||||||
|
if project_type then
|
||||||
|
-- Store project info in buffer variables
|
||||||
|
vim.b.java_project_type = project_type
|
||||||
|
vim.b.java_project_detected = true
|
||||||
|
|
||||||
|
-- Get JDK and environment info
|
||||||
|
local jdk_info = actions.get_jdk_info()
|
||||||
|
local env_info = actions.get_env_info()
|
||||||
|
|
||||||
|
-- Show project detection notification (only once)
|
||||||
|
local jdk_version = jdk_info and jdk_info.jdk_version or "unknown"
|
||||||
|
vim.notify(
|
||||||
|
string.format("Java project detected: %s (JDK: %s)", project_type, jdk_version),
|
||||||
|
vim.log.levels.INFO,
|
||||||
|
{ title = "intellij.nvim", timeout = 3000 }
|
||||||
|
)
|
||||||
|
|
||||||
|
-- Auto-start Java LSP if available (only if not already started)
|
||||||
|
if pcall(require, 'jdtls') and not vim.lsp.get_active_clients({ name = 'jdtls' })[1] then
|
||||||
|
vim.defer_fn(function()
|
||||||
|
-- Try to start LSP safely with error handling
|
||||||
|
local ok, result = pcall(vim.cmd, "LspStart jdtls")
|
||||||
|
if ok then
|
||||||
|
vim.notify("Java LSP started", vim.log.levels.INFO, { title = "intellij.nvim" })
|
||||||
|
|
||||||
|
-- Add error handler for LSP semantic tokens issues
|
||||||
|
vim.api.nvim_create_autocmd("LspAttach", {
|
||||||
|
callback = function(args)
|
||||||
|
local client = vim.lsp.get_client_by_id(args.data.client_id)
|
||||||
|
if client and client.name == "jdtls" then
|
||||||
|
-- Disable semantic tokens if they cause issues
|
||||||
|
client.server_capabilities.semanticTokensProvider = nil
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
else
|
||||||
|
vim.notify("Java LSP could not be started automatically", vim.log.levels.WARN, { title = "intellij.nvim" })
|
||||||
|
end
|
||||||
|
end, 1000)
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Auto-compile project on detection (optional)
|
||||||
|
if vim.g.auto_compile_java_projects then
|
||||||
|
vim.defer_fn(function()
|
||||||
|
if project_type == "maven" then
|
||||||
|
require("toggleterm").exec("mvn compile", 1, 12, "float")
|
||||||
|
elseif project_type == "gradle" then
|
||||||
|
require("toggleterm").exec("./gradlew compileJava", 1, 12, "float")
|
||||||
|
end
|
||||||
|
end, 2000)
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Auto-open main file if not already open
|
||||||
|
if vim.g.auto_open_main_file and not is_main_file_open() then
|
||||||
|
vim.defer_fn(function()
|
||||||
|
open_first_main_file()
|
||||||
|
end, 1500)
|
||||||
|
end
|
||||||
|
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Set up autocommands for automatic detection (with debouncing)
|
||||||
|
local detection_timer = nil
|
||||||
|
|
||||||
|
local function debounced_detection()
|
||||||
|
if detection_timer then
|
||||||
|
vim.loop.timer_stop(detection_timer)
|
||||||
|
end
|
||||||
|
detection_timer = vim.defer_fn(detect_and_start_java_project, 100)
|
||||||
|
end
|
||||||
|
|
||||||
|
vim.api.nvim_create_autocmd("FileType", {
|
||||||
|
pattern = { "java" },
|
||||||
|
callback = function()
|
||||||
|
-- Auto-detect project type when opening Java files
|
||||||
|
debounced_detection()
|
||||||
|
end
|
||||||
|
})
|
||||||
|
|
||||||
|
-- Auto-detect when entering directories with Java project files
|
||||||
|
vim.api.nvim_create_autocmd("DirChanged", {
|
||||||
|
pattern = "*",
|
||||||
|
callback = function()
|
||||||
|
-- Check if we're in a Java project directory
|
||||||
|
if vim.fn.filereadable("pom.xml") == 1 or
|
||||||
|
vim.fn.filereadable("build.gradle") == 1 or
|
||||||
|
vim.fn.filereadable("build.gradle.kts") == 1 then
|
||||||
|
debounced_detection()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
})
|
||||||
|
|
||||||
|
-- Auto-detect when opening files in Java project directories
|
||||||
|
vim.api.nvim_create_autocmd("BufRead", {
|
||||||
|
pattern = "*",
|
||||||
|
callback = function()
|
||||||
|
local cwd = vim.loop.cwd()
|
||||||
|
if cwd and (vim.fn.filereadable(cwd .. "/pom.xml") == 1 or
|
||||||
|
vim.fn.filereadable(cwd .. "/build.gradle") == 1 or
|
||||||
|
vim.fn.filereadable(cwd .. "/build.gradle.kts") == 1) then
|
||||||
|
debounced_detection()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
})
|
||||||
|
|
||||||
|
-- Auto-detect when VimEnter (when Neovim starts)
|
||||||
|
vim.api.nvim_create_autocmd("VimEnter", {
|
||||||
|
pattern = "*",
|
||||||
|
callback = function()
|
||||||
|
-- Check if we started in a Java project directory
|
||||||
|
local cwd = vim.loop.cwd()
|
||||||
|
if cwd and (vim.fn.filereadable(cwd .. "/pom.xml") == 1 or
|
||||||
|
vim.fn.filereadable(cwd .. "/build.gradle") == 1 or
|
||||||
|
vim.fn.filereadable(cwd .. "/build.gradle.kts") == 1) then
|
||||||
|
vim.defer_fn(detect_and_start_java_project, 500)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
})
|
||||||
|
|
||||||
|
-- Global variable to control auto-compilation
|
||||||
|
vim.g.auto_compile_java_projects = true
|
||||||
|
|
||||||
|
-- Global variable to control auto-opening main files
|
||||||
|
vim.g.auto_open_main_file = true
|
||||||
|
|
||||||
|
-- Add command to toggle auto-compilation
|
||||||
|
vim.api.nvim_create_user_command("ToggleJavaAutoCompile", function()
|
||||||
|
vim.g.auto_compile_java_projects = not vim.g.auto_compile_java_projects
|
||||||
|
vim.notify(
|
||||||
|
"Java auto-compilation " .. (vim.g.auto_compile_java_projects and "enabled" or "disabled"),
|
||||||
|
vim.log.levels.INFO,
|
||||||
|
{ title = "intellij.nvim" }
|
||||||
|
)
|
||||||
|
end, {})
|
||||||
|
|
||||||
|
-- Add command to clean up cache and temporary files
|
||||||
|
vim.api.nvim_create_user_command("IntelliJCleanup", function()
|
||||||
|
require("intellij").cleanup()
|
||||||
|
end, {})
|
||||||
|
|
||||||
|
-- Add command to toggle auto-opening main files
|
||||||
|
vim.api.nvim_create_user_command("ToggleJavaAutoOpenMain", function()
|
||||||
|
vim.g.auto_open_main_file = not vim.g.auto_open_main_file
|
||||||
|
vim.notify(
|
||||||
|
"Java auto-open main file " .. (vim.g.auto_open_main_file and "enabled" or "disabled"),
|
||||||
|
vim.log.levels.INFO,
|
||||||
|
{ title = "intellij.nvim" }
|
||||||
|
)
|
||||||
|
end, {})
|
||||||
|
|
||||||
|
-- Add command to manually open main file
|
||||||
|
vim.api.nvim_create_user_command("OpenJavaMainFile", function()
|
||||||
|
if open_first_main_file() then
|
||||||
|
vim.notify("Main file opened", vim.log.levels.INFO, { title = "intellij.nvim" })
|
||||||
|
else
|
||||||
|
vim.notify("No main file found in current project", vim.log.levels.WARN, { title = "intellij.nvim" })
|
||||||
|
end
|
||||||
|
end, {})
|
||||||
|
|
||||||
|
-- Add command to debug file search
|
||||||
|
vim.api.nvim_create_user_command("DebugJavaFileSearch", function()
|
||||||
|
local actions = require("intellij.actions")
|
||||||
|
local configs = actions.get_run_configs()
|
||||||
|
|
||||||
|
vim.notify("=== Java File Search Debug ===", vim.log.levels.INFO, { title = "intellij.nvim" })
|
||||||
|
vim.notify("Project root: " .. vim.loop.cwd(), vim.log.levels.INFO, { title = "intellij.nvim" })
|
||||||
|
|
||||||
|
if configs and configs.mains then
|
||||||
|
vim.notify("Found main classes: " .. table.concat(configs.mains, ", "), vim.log.levels.INFO, { title = "intellij.nvim" })
|
||||||
|
|
||||||
|
for _, main_class in ipairs(configs.mains) do
|
||||||
|
local file_path = main_class:gsub("%.", "/") .. ".java"
|
||||||
|
local project_root = vim.loop.cwd()
|
||||||
|
|
||||||
|
local possible_paths = {
|
||||||
|
project_root .. "/src/main/java/" .. file_path,
|
||||||
|
project_root .. "/src/java/" .. file_path,
|
||||||
|
project_root .. "/src/" .. file_path,
|
||||||
|
project_root .. "/" .. file_path,
|
||||||
|
project_root .. "/app/src/main/java/" .. file_path,
|
||||||
|
project_root .. "/main/java/" .. file_path,
|
||||||
|
}
|
||||||
|
|
||||||
|
vim.notify("Searching for: " .. main_class, vim.log.levels.INFO, { title = "intellij.nvim" })
|
||||||
|
for _, path in ipairs(possible_paths) do
|
||||||
|
local exists = vim.fn.filereadable(path) == 1
|
||||||
|
vim.notify(" " .. path .. " -> " .. (exists and "EXISTS" or "NOT FOUND"), vim.log.levels.INFO, { title = "intellij.nvim" })
|
||||||
|
end
|
||||||
|
end
|
||||||
|
else
|
||||||
|
vim.notify("No main classes found", vim.log.levels.WARN, { title = "intellij.nvim" })
|
||||||
|
end
|
||||||
|
end, {})
|
||||||
|
|
||||||
|
-- Add command to manually detect Java project
|
||||||
|
vim.api.nvim_create_user_command("DetectJavaProject", function()
|
||||||
|
if detect_and_start_java_project() then
|
||||||
|
vim.notify("Java project detection completed", vim.log.levels.INFO, { title = "intellij.nvim" })
|
||||||
|
else
|
||||||
|
vim.notify("No Java project detected in current directory", vim.log.levels.WARN, { title = "intellij.nvim" })
|
||||||
|
end
|
||||||
|
end, {})
|
||||||
|
|
||||||
|
-- Check for config flag to auto-toggle main file opening
|
||||||
|
if type(require("intellij").opts) == "table" and require("intellij").opts.auto_open_main_on_start then
|
||||||
|
vim.g.auto_open_main_file = true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
}
|
||||||
@@ -14,7 +14,6 @@ return {
|
|||||||
local lspconfig = require("lspconfig")
|
local lspconfig = require("lspconfig")
|
||||||
local mason_lspconfig = require("mason-lspconfig")
|
local mason_lspconfig = require("mason-lspconfig")
|
||||||
local cmp_nvim_lsp = require("cmp_nvim_lsp")
|
local cmp_nvim_lsp = require("cmp_nvim_lsp")
|
||||||
local keymap = vim.keymap
|
|
||||||
|
|
||||||
mason_lspconfig.setup({
|
mason_lspconfig.setup({
|
||||||
ensure_installed = {
|
ensure_installed = {
|
||||||
@@ -24,7 +23,7 @@ return {
|
|||||||
"gopls",
|
"gopls",
|
||||||
"graphql",
|
"graphql",
|
||||||
"html",
|
"html",
|
||||||
-- "jdtls", -- uncomment if you’re actively doing Java
|
-- "jdtls", -- uncomment if you're actively doing Java
|
||||||
"lua_ls",
|
"lua_ls",
|
||||||
"prismals",
|
"prismals",
|
||||||
"pyright",
|
"pyright",
|
||||||
@@ -41,10 +40,10 @@ return {
|
|||||||
min = vim.diagnostic.severity.WARN,
|
min = vim.diagnostic.severity.WARN,
|
||||||
},
|
},
|
||||||
icons = {
|
icons = {
|
||||||
Error = " ",
|
Error = " ",
|
||||||
Warn = " ",
|
Warn = " ",
|
||||||
Hint = " ",
|
Hint = " ",
|
||||||
Info = " ",
|
Info = " ",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
@@ -89,39 +88,7 @@ return {
|
|||||||
-- }
|
-- }
|
||||||
})
|
})
|
||||||
|
|
||||||
vim.api.nvim_create_autocmd("LspAttach", {
|
-- LSP keymaps are now handled in the main keymaps.lua file
|
||||||
group = vim.api.nvim_create_augroup("UserLspConfig", {}),
|
-- This ensures consistent keymaps across all file types
|
||||||
callback = function(ev)
|
|
||||||
local opts = { buffer = ev.buf, silent = true }
|
|
||||||
local mappings = {
|
|
||||||
["gR"] = { "<cmd>Telescope lsp_references<CR>", "Show LSP references" },
|
|
||||||
["gD"] = { vim.lsp.buf.declaration, "Go to declaration" },
|
|
||||||
["gd"] = { "<cmd>Telescope lsp_definitions<CR>", "Show LSP definitions" },
|
|
||||||
["gi"] = { "<cmd>Telescope lsp_implementations<CR>", "Show LSP implementations" },
|
|
||||||
["gt"] = { "<cmd>Telescope lsp_type_definitions<CR>", "Show LSP type definitions" },
|
|
||||||
["<leader>ca"] = { vim.lsp.buf.code_action, "See available code actions" },
|
|
||||||
["<leader>rn"] = { vim.lsp.buf.rename, "Smart rename" },
|
|
||||||
["<leader>D"] = { "<cmd>Telescope diagnostics bufnr=0<CR>", "Show buffer diagnostics" },
|
|
||||||
["<leader>dd"] = { vim.diagnostic.open_float, "Show line diagnostics" },
|
|
||||||
["[d"] = { vim.diagnostic.goto_prev, "Go to previous diagnostic" },
|
|
||||||
["]d"] = { vim.diagnostic.goto_next, "Go to next diagnostic" },
|
|
||||||
["K"] = { vim.lsp.buf.hover, "Show documentation for cursor" },
|
|
||||||
["<leader>rs"] = { ":LspRestart<CR>", "Restart LSP" },
|
|
||||||
}
|
|
||||||
|
|
||||||
for key, map in pairs(mappings) do
|
|
||||||
keymap.set("n", key, map[1], { desc = map[2], silent = true })
|
|
||||||
end
|
|
||||||
|
|
||||||
vim.api.nvim_create_autocmd("CursorHold", {
|
|
||||||
buffer = ev.buf,
|
|
||||||
callback = function()
|
|
||||||
vim.diagnostic.open_float(nil, { focusable = false })
|
|
||||||
end,
|
|
||||||
})
|
|
||||||
|
|
||||||
vim.o.updatetime = 250
|
|
||||||
end,
|
|
||||||
})
|
|
||||||
end,
|
end,
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,6 +6,8 @@ return {
|
|||||||
{ "nvim-telescope/telescope-fzf-native.nvim", build = "make" },
|
{ "nvim-telescope/telescope-fzf-native.nvim", build = "make" },
|
||||||
"nvim-tree/nvim-web-devicons",
|
"nvim-tree/nvim-web-devicons",
|
||||||
"folke/todo-comments.nvim",
|
"folke/todo-comments.nvim",
|
||||||
|
"nvim-telescope/telescope-dap.nvim",
|
||||||
|
"nvim-telescope/telescope-session-lens.nvim",
|
||||||
},
|
},
|
||||||
config = function()
|
config = function()
|
||||||
local telescope = require("telescope")
|
local telescope = require("telescope")
|
||||||
@@ -34,17 +36,53 @@ return {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
pickers = {
|
||||||
|
find_files = {
|
||||||
|
hidden = true,
|
||||||
|
},
|
||||||
|
live_grep = {
|
||||||
|
additional_args = function()
|
||||||
|
return { "--hidden" }
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
|
-- Load extensions
|
||||||
telescope.load_extension("fzf")
|
telescope.load_extension("fzf")
|
||||||
|
telescope.load_extension("dap")
|
||||||
|
telescope.load_extension("session-lens")
|
||||||
|
|
||||||
-- set keymaps
|
-- set keymaps
|
||||||
local keymap = vim.keymap -- for conciseness
|
local keymap = vim.keymap -- for conciseness
|
||||||
|
|
||||||
|
-- File navigation
|
||||||
keymap.set("n", "<leader>ff", "<cmd>Telescope find_files<cr>", { desc = "Fuzzy find files in cwd" })
|
keymap.set("n", "<leader>ff", "<cmd>Telescope find_files<cr>", { desc = "Fuzzy find files in cwd" })
|
||||||
keymap.set("n", "<leader>fr", "<cmd>Telescope oldfiles<cr>", { desc = "Fuzzy find recent files" })
|
keymap.set("n", "<leader>fr", "<cmd>Telescope oldfiles<cr>", { desc = "Fuzzy find recent files" })
|
||||||
keymap.set("n", "<leader>fs", "<cmd>Telescope live_grep<cr>", { desc = "Find string in cwd" })
|
keymap.set("n", "<leader>fs", "<cmd>Telescope live_grep<cr>", { desc = "Find string in cwd" })
|
||||||
keymap.set("n", "<leader>fc", "<cmd>Telescope grep_string<cr>", { desc = "Find string under cursor in cwd" })
|
keymap.set("n", "<leader>fc", "<cmd>Telescope grep_string<cr>", { desc = "Find string under cursor in cwd" })
|
||||||
keymap.set("n", "<leader>ft", "<cmd>TodoTelescope<cr>", { desc = "Find todos" })
|
keymap.set("n", "<leader>ft", "<cmd>TodoTelescope<cr>", { desc = "Find todos" })
|
||||||
|
|
||||||
|
-- LSP navigation (these work when LSP is attached)
|
||||||
|
keymap.set("n", "<leader>fd", "<cmd>Telescope lsp_definitions<cr>", { desc = "Go to definition" })
|
||||||
|
keymap.set("n", "<leader>fi", "<cmd>Telescope lsp_implementations<cr>", { desc = "Go to implementation" })
|
||||||
|
keymap.set("n", "<leader>fr", "<cmd>Telescope lsp_references<cr>", { desc = "Show references" })
|
||||||
|
keymap.set("n", "<leader>ft", "<cmd>Telescope lsp_type_definitions<cr>", { desc = "Go to type definition" })
|
||||||
|
keymap.set("n", "<leader>fs", "<cmd>Telescope lsp_document_symbols<cr>", { desc = "Document symbols" })
|
||||||
|
keymap.set("n", "<leader>fw", "<cmd>Telescope lsp_workspace_symbols<cr>", { desc = "Workspace symbols" })
|
||||||
|
keymap.set("n", "<leader>fd", "<cmd>Telescope diagnostics<cr>", { desc = "Show diagnostics" })
|
||||||
|
|
||||||
|
-- Buffer and session management
|
||||||
|
keymap.set("n", "<leader>fb", "<cmd>Telescope buffers<cr>", { desc = "Find buffers" })
|
||||||
|
keymap.set("n", "<leader>fh", "<cmd>Telescope help_tags<cr>", { desc = "Help tags" })
|
||||||
|
keymap.set("n", "<leader>fm", "<cmd>Telescope marks<cr>", { desc = "Find marks" })
|
||||||
|
keymap.set("n", "<leader>fk", "<cmd>Telescope keymaps<cr>", { desc = "Find keymaps" })
|
||||||
|
keymap.set("n", "<leader>fc", "<cmd>Telescope commands<cr>", { desc = "Find commands" })
|
||||||
|
|
||||||
|
-- Git
|
||||||
|
keymap.set("n", "<leader>fg", "<cmd>Telescope git_commits<cr>", { desc = "Git commits" })
|
||||||
|
keymap.set("n", "<leader>fG", "<cmd>Telescope git_bcommits<cr>", { desc = "Git buffer commits" })
|
||||||
|
keymap.set("n", "<leader>fb", "<cmd>Telescope git_branches<cr>", { desc = "Git branches" })
|
||||||
|
keymap.set("n", "<leader>fs", "<cmd>Telescope git_status<cr>", { desc = "Git status" })
|
||||||
end,
|
end,
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user