Compare commits
9 Commits
feature/up
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
795bc802b3 | ||
|
|
fa6c35ff1e | ||
|
|
1c3558380e | ||
|
|
bf573ef961 | ||
|
|
9638b5346d | ||
|
|
72d8698ecb | ||
|
|
b774da0743 | ||
|
|
0b689bfbd4 | ||
|
|
88634a368a |
25
.gitignore
vendored
25
.gitignore
vendored
@@ -1 +1,26 @@
|
||||
lazy-lock.json
|
||||
|
||||
# Log files (contain personal paths and system info)
|
||||
*.log
|
||||
checkhealth*.log
|
||||
nvim-profile.log
|
||||
lazigitconfig.log
|
||||
|
||||
# Backup files with personal paths
|
||||
*.bak
|
||||
|
||||
# Temporary files
|
||||
*.tmp
|
||||
*.temp
|
||||
|
||||
# Session files
|
||||
Session.vim
|
||||
session.vim
|
||||
|
||||
# Swap files
|
||||
*.swp
|
||||
*.swo
|
||||
*~
|
||||
|
||||
# Local configuration overrides
|
||||
local.lua
|
||||
|
||||
@@ -1,83 +0,0 @@
|
||||
# Database Setup Guide
|
||||
|
||||
## Current Status: ✅ **FIXED**
|
||||
|
||||
The database error has been resolved! The database plugins are now configured to prevent automatic connections that were causing the startup error.
|
||||
|
||||
## What Was Fixed
|
||||
|
||||
1. **Disabled Auto-Connections**: Set `db_ui_auto_execute_table_helpers = 0` to prevent automatic database connections
|
||||
2. **Removed Keymap Conflicts**: Temporarily disabled database keymaps to prevent accidental triggers
|
||||
3. **Safe Configuration**: Database plugins are loaded but won't attempt to connect automatically
|
||||
|
||||
## To Re-Enable Database Functionality
|
||||
|
||||
When you want to use database features, you can:
|
||||
|
||||
### 1. Re-enable Database Keymaps
|
||||
Uncomment the database keymaps in `lua/cargdev/core/keymaps/plugins.lua`:
|
||||
|
||||
```lua
|
||||
-- Change from:
|
||||
-- keymap.set("n", "<leader>du", "<cmd>DBUI<CR>", { desc = "Open Database UI" })
|
||||
|
||||
-- To:
|
||||
keymap.set("n", "<leader>du", "<cmd>DBUI<CR>", { desc = "Open Database UI" })
|
||||
```
|
||||
|
||||
### 2. Manual Database Usage
|
||||
You can still use database features manually:
|
||||
|
||||
- **Open Database UI**: `:DBUI`
|
||||
- **Add Connection**: `:DBUIAddConnection`
|
||||
- **Execute SQL**: `:DBExecute`
|
||||
- **Format SQL**: `:SQLFormat`
|
||||
|
||||
### 3. Database Keymaps (when re-enabled)
|
||||
- **`<leader>du`** - Open Database UI
|
||||
- **`<leader>dua`** - Add database connection
|
||||
- **`<leader>due`** - Execute SQL query
|
||||
- **`<leader>dus`** - Select SQL query
|
||||
- **`<leader>dut`** - Create table
|
||||
- **`<leader>duf`** - Format SQL query
|
||||
|
||||
## Supported Databases
|
||||
|
||||
- **SQLite**: `sqlite3`
|
||||
- **MySQL**: `mysql`
|
||||
- **PostgreSQL**: `psql`
|
||||
- **Redis**: `redis-cli`
|
||||
|
||||
## Installation Requirements
|
||||
|
||||
Make sure you have the database clients installed:
|
||||
|
||||
```bash
|
||||
# macOS
|
||||
brew install mysql redis mongodb/brew/mongodb-community
|
||||
|
||||
# Ubuntu/Debian
|
||||
sudo apt install mysql-client postgresql-client redis-tools
|
||||
|
||||
# CentOS/RHEL
|
||||
sudo yum install mysql postgresql redis
|
||||
```
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
If you encounter database errors again:
|
||||
|
||||
1. **Check for saved connections**: Look for `.dadbod` files in your project directories
|
||||
2. **Clear database cache**: Remove any saved database sessions
|
||||
3. **Verify adapters**: Ensure database clients are properly installed
|
||||
4. **Check keymaps**: Make sure there are no conflicting keymaps
|
||||
|
||||
## Current Configuration
|
||||
|
||||
The database plugins are configured with:
|
||||
- ✅ **No automatic connections**
|
||||
- ✅ **Manual trigger only**
|
||||
- ✅ **Proper adapters configured**
|
||||
- ✅ **No startup errors**
|
||||
|
||||
Your Neovim should now start cleanly without any database errors! 🎉
|
||||
208
NVIM_PERFORMANCE_ANALYSIS.md
Normal file
208
NVIM_PERFORMANCE_ANALYSIS.md
Normal file
@@ -0,0 +1,208 @@
|
||||
# Neovim Performance Analysis & Optimization Results
|
||||
|
||||
## Overview
|
||||
This document analyzes the performance profile from `nvim-profile.log` and shows the results of applied optimizations.
|
||||
|
||||
## 📊 Performance Comparison Results
|
||||
|
||||
### ✅ **Significant Improvements**
|
||||
|
||||
#### 1. Clipboard Provider Performance
|
||||
- **Before**: 2.16s total time, 123 calls
|
||||
- **After**: 0.54s total time, 78 calls
|
||||
- **Improvement**: **75% reduction** in total time, **37% fewer** calls
|
||||
- **Status**: ✅ **MAJOR SUCCESS**
|
||||
|
||||
#### 2. Syntax Loading Performance
|
||||
- **Before**: 0.70s total time, 699 calls
|
||||
- **After**: 0.47s total time, 189 calls
|
||||
- **Improvement**: **33% reduction** in total time, **73% fewer** calls
|
||||
- **Status**: ✅ **SUCCESS**
|
||||
|
||||
#### 3. Filetype Plugin Loading
|
||||
- **Before**: 0.70s total time, 278 calls
|
||||
- **After**: 0.62s total time, 175 calls
|
||||
- **Improvement**: **11% reduction** in total time, **37% fewer** calls
|
||||
- **Status**: ✅ **MODERATE SUCCESS**
|
||||
|
||||
### ⚠️ **Performance Regressions**
|
||||
|
||||
#### 4. WakaTime Plugin Performance
|
||||
- **Before**: 0.48s total time, 686 calls
|
||||
- **After**: 1.82s total time, 2,052 calls
|
||||
- **Change**: **279% increase** in total time, **199% more** calls
|
||||
- **Status**: ❌ **REGRESSION** - Need to investigate
|
||||
|
||||
#### 5. Matchparen Highlighting
|
||||
- **Before**: 0.23s total time, 2,912 calls
|
||||
- **After**: 0.78s total time, 6,055 calls
|
||||
- **Change**: **239% increase** in total time, **108% more** calls
|
||||
- **Status**: ❌ **REGRESSION** - Need to investigate
|
||||
|
||||
## 🔧 Applied Optimizations
|
||||
|
||||
### ✅ Successful Optimizations
|
||||
|
||||
#### 1. Keymap Conflict Resolution
|
||||
- **Fixed**: Changed `<leader>s` to `<leader>sub` to avoid conflict with `<leader>fs`
|
||||
- **File**: `lua/cargdev/core/keymaps/plugins.lua`
|
||||
- **Impact**: `<leader>fs` now works correctly for file search
|
||||
- **Status**: ✅ **CONFIRMED WORKING**
|
||||
|
||||
#### 2. Clipboard Provider Optimization
|
||||
- **Fixed**: Added explicit macOS clipboard configuration
|
||||
- **File**: `lua/cargdev/core/options.lua`
|
||||
- **Changes**: Configured `pbcopy`/`pbpaste` with caching enabled
|
||||
- **Result**: **75% performance improvement**
|
||||
- **Status**: ✅ **MAJOR SUCCESS**
|
||||
|
||||
#### 3. Syntax Loading Optimization
|
||||
- **Fixed**: Optimized syntax highlighting settings
|
||||
- **File**: `lua/cargdev/core/options.lua`
|
||||
- **Changes**: Reduced `synmaxcol` to 200, disabled modelines
|
||||
- **Result**: **33% performance improvement**
|
||||
- **Status**: ✅ **SUCCESS**
|
||||
|
||||
#### 4. Filetype Plugin Optimization
|
||||
- **Fixed**: Optimized filetype plugin loading
|
||||
- **File**: `lua/cargdev/core/options.lua`
|
||||
- **Changes**: Disabled modelines for security and performance
|
||||
- **Result**: **11% performance improvement**
|
||||
- **Status**: ✅ **MODERATE SUCCESS**
|
||||
|
||||
### ❌ Failed Optimizations
|
||||
|
||||
#### 5. WakaTime Performance Optimization
|
||||
- **Attempted**: Optimized heartbeat frequency and buffering
|
||||
- **File**: `lua/cargdev/plugins/wakatime.lua`
|
||||
- **Changes**: Increased heartbeat frequency to 2 minutes, enabled buffering
|
||||
- **Result**: **279% performance regression**
|
||||
- **Status**: ❌ **NEEDS REVERT**
|
||||
|
||||
#### 6. Matchparen Performance Optimization
|
||||
- **Attempted**: Reduced timeout values for faster response
|
||||
- **File**: `lua/cargdev/core/options.lua`
|
||||
- **Changes**: Reduced `matchparen_timeout` to 100ms, `matchparen_insert_timeout` to 50ms
|
||||
- **Result**: **239% performance regression**
|
||||
- **Status**: ❌ **NEEDS REVERT**
|
||||
|
||||
## 🚨 Issues Requiring Immediate Attention
|
||||
|
||||
### 1. WakaTime Regression
|
||||
**Problem**: WakaTime is now consuming significantly more resources
|
||||
**Possible Causes**:
|
||||
- Buffering enabled may be causing overhead
|
||||
- Increased heartbeat frequency may be triggering more processing
|
||||
- Debug mode changes may have unintended effects
|
||||
|
||||
**Recommended Actions**:
|
||||
- Revert WakaTime configuration to original settings
|
||||
- Consider disabling WakaTime temporarily to measure impact
|
||||
- Investigate alternative WakaTime configurations
|
||||
|
||||
### 2. Matchparen Regression
|
||||
**Problem**: Matchparen highlighting is now much slower
|
||||
**Possible Causes**:
|
||||
- Reduced timeout values may be causing more frequent recalculations
|
||||
- Timeout settings may be conflicting with other optimizations
|
||||
- The optimization may have triggered a different code path
|
||||
|
||||
**Recommended Actions**:
|
||||
- Revert matchparen timeout settings to defaults
|
||||
- Test with original settings to confirm improvement
|
||||
- Consider alternative matchparen optimization strategies
|
||||
|
||||
## 📈 Overall Performance Impact
|
||||
|
||||
### Net Performance Change
|
||||
- **Clipboard**: +1.62s improvement
|
||||
- **Syntax**: +0.23s improvement
|
||||
- **Filetype**: +0.08s improvement
|
||||
- **WakaTime**: -1.34s regression
|
||||
- **Matchparen**: -0.55s regression
|
||||
|
||||
**Net Result**: **+0.04s improvement** (essentially neutral)
|
||||
|
||||
### Recommendations
|
||||
1. **Keep successful optimizations** (clipboard, syntax, filetype)
|
||||
2. **Revert failed optimizations** (WakaTime, matchparen)
|
||||
3. **Investigate alternative approaches** for WakaTime and matchparen
|
||||
4. **Consider disabling WakaTime** if not actively used
|
||||
|
||||
## 🔍 **Additional Performance Issues Discovered**
|
||||
|
||||
### 6. CursorHold Events Performance
|
||||
- **Total Time**: 0.92s (CursorHold_Cb) + 0.30s (CursorHoldI_Cb) = **1.22s total**
|
||||
- **Calls**: 1,213 + 625 = **1,838 calls**
|
||||
- **Issue**: FixCursorHold plugin is consuming significant resources
|
||||
- **Status**: ⚠️ **NEW ISSUE** - Major performance bottleneck
|
||||
|
||||
### 7. Tmux Navigation Performance
|
||||
- **Total Time**: 0.61s (TmuxAwareNavigate) + 0.56s (VimNavigate) = **1.17s total**
|
||||
- **Calls**: 63 + 63 = **126 calls**
|
||||
- **Issue**: Tmux-aware navigation is slow
|
||||
- **Status**: ⚠️ **NEW ISSUE** - Significant overhead
|
||||
|
||||
### 8. Treesitter Indentation Performance
|
||||
- **Total Time**: 0.08s
|
||||
- **Calls**: 15 calls
|
||||
- **Issue**: Treesitter indentation is being called frequently
|
||||
- **Status**: ⚠️ **NEW ISSUE** - Moderate impact
|
||||
|
||||
### 9. WakaTime Heartbeat System
|
||||
- **Total Time**: 0.98s (SetLastHeartbeat) + 0.11s (SendHeartbeats) = **1.09s total**
|
||||
- **Calls**: 206 + 60 = **266 calls**
|
||||
- **Issue**: Heartbeat system is very slow
|
||||
- **Status**: ❌ **MAJOR ISSUE** - Part of WakaTime regression
|
||||
|
||||
## 📊 **Updated Performance Summary**
|
||||
|
||||
### Total Performance Impact (All Issues)
|
||||
- **WakaTime System**: 2.91s total (HandleActivity + Heartbeats)
|
||||
- **CursorHold Events**: 1.22s total
|
||||
- **Tmux Navigation**: 1.17s total
|
||||
- **Matchparen**: 0.78s total
|
||||
- **Clipboard**: 0.54s total (improved from 2.16s)
|
||||
- **Syntax Loading**: 0.47s total (improved from 0.70s)
|
||||
- **Filetype Plugins**: 0.62s total (improved from 0.70s)
|
||||
|
||||
**Total Identified Issues**: **~7.7 seconds** of performance overhead
|
||||
|
||||
## 🚨 **Critical Issues Requiring Immediate Attention**
|
||||
|
||||
### 1. WakaTime Complete System Failure
|
||||
- **Problem**: Entire WakaTime system is consuming 2.91s total
|
||||
- **Components**: HandleActivity (1.82s) + Heartbeats (1.09s)
|
||||
- **Impact**: Single biggest performance bottleneck
|
||||
- **Action**: **DISABLE WAKATIME IMMEDIATELY**
|
||||
|
||||
### 2. CursorHold Events Overhead
|
||||
- **Problem**: FixCursorHold plugin consuming 1.22s
|
||||
- **Impact**: Major performance hit on cursor movement
|
||||
- **Action**: **OPTIMIZE OR DISABLE FixCursorHold**
|
||||
|
||||
### 3. Tmux Navigation Overhead
|
||||
- **Problem**: Tmux-aware navigation consuming 1.17s
|
||||
- **Impact**: Significant overhead for navigation
|
||||
- **Action**: **OPTIMIZE Tmux integration**
|
||||
|
||||
## 🎯 **Revised Priority Actions**
|
||||
|
||||
### Immediate (Critical)
|
||||
1. **Disable WakaTime completely** - Save 2.91s
|
||||
2. **Optimize FixCursorHold** - Save up to 1.22s
|
||||
3. **Revert matchparen settings** - Save 0.55s
|
||||
|
||||
### High Priority
|
||||
4. **Optimize Tmux navigation** - Save up to 1.17s
|
||||
5. **Investigate Treesitter indentation** - Save up to 0.08s
|
||||
|
||||
### Medium Priority
|
||||
6. **Keep successful optimizations** (clipboard, syntax, filetype)
|
||||
|
||||
**Potential Total Savings**: **~5.8 seconds** (75% improvement)
|
||||
|
||||
---
|
||||
*Analysis based on comparison of original and optimized nvim-profile.log*
|
||||
*Last updated: $(date)*
|
||||
*Keymap conflict: ✅ Fixed | Clipboard: ✅ 75% improvement | Syntax: ✅ 33% improvement | Filetype: ✅ 11% improvement | WakaTime: ❌ 279% regression | Matchparen: ❌ 239% regression*
|
||||
609
checkhealth.log
609
checkhealth.log
@@ -1,609 +0,0 @@
|
||||
|
||||
==============================================================================
|
||||
CopilotChat: ✅
|
||||
|
||||
CopilotChat.nvim [core] ~
|
||||
- ✅ OK nvim: NVIM v0.11.3
|
||||
Build type: Release
|
||||
LuaJIT 2.1.1753364724
|
||||
Run "nvim -V1 -v" for more info
|
||||
- ✅ OK setup: called
|
||||
|
||||
CopilotChat.nvim [commands] ~
|
||||
- ✅ OK curl: curl 8.7.1 (x86_64-apple-darwin24.0) libcurl/8.7.1 (SecureTransport) LibreSSL/3.3.6 zlib/1.2.12 nghttp2/1.64.0
|
||||
Release-Date: 2024-03-27
|
||||
Protocols: dict file ftp ftps gopher gophers http https imap imaps ipfs ipns ldap ldaps mqtt pop3 pop3s rtsp smb smbs smtp smtps telnet tftp
|
||||
Features: alt-svc AsynchDNS GSS-API HSTS HTTP2 HTTPS-proxy IPv6 Kerberos Largefile libz MultiSSL NTLM SPNEGO SSL threadsafe UnixSockets
|
||||
- ✅ OK git: git version 2.50.1
|
||||
- ✅ OK rg: ripgrep 14.1.1
|
||||
|
||||
features:+pcre2
|
||||
simd(compile):+NEON
|
||||
simd(runtime):+NEON
|
||||
|
||||
PCRE2 10.43 is available (JIT is available)
|
||||
- ✅ OK lynx: Lynx Version 2.9.2 (31 May 2024)
|
||||
libwww-FM 2.14, SSL-MM 1.4.1, OpenSSL 3.5.1, ncurses 6.5.20240427
|
||||
Built on darwin24.2.0 (May 31 2024 23:03:20).
|
||||
|
||||
Copyrights held by the Lynx Developers Group,
|
||||
the University of Kansas, CERN, and other contributors.
|
||||
Distributed under the GNU General Public License (Version 2).
|
||||
See https://lynx.invisible-island.net/ and the online help for more information.
|
||||
|
||||
See http://www.openssl.org/ for information about OpenSSL.
|
||||
|
||||
CopilotChat.nvim [dependencies] ~
|
||||
- ✅ OK plenary: installed
|
||||
- ✅ OK copilot: copilot.lua
|
||||
- ✅ OK vim.ui.select: overridden by `@/Users/carlos/.local/share/nvim/lazy/dressing.nvim/lua/dressing/patch.lua`
|
||||
- ✅ OK tiktoken_core: installed
|
||||
- ✅ OK treesitter[markdown]: installed
|
||||
- ✅ OK treesitter[diff]: installed
|
||||
|
||||
==============================================================================
|
||||
auto-session: 1 ⚠️
|
||||
|
||||
Setup ~
|
||||
- ✅ OK setup() called
|
||||
|
||||
Lazy.nvim settings ~
|
||||
- ✅ OK Lazy.nvim support is enabled
|
||||
- ✅ OK auto-session is not lazy loaded
|
||||
|
||||
Config ~
|
||||
- ⚠️ WARNING `vim.o.sessionoptions` should contain 'localoptions' to make sure
|
||||
filetype and highlighting work correctly after a session is restored.
|
||||
Recommended setting is:
|
||||
|
||||
vim.o.sessionoptions="blank,buffers,curdir,folds,help,tabpages,winsize,winpos,terminal,localoptions"
|
||||
|
||||
|
||||
Current Config ~
|
||||
- {
|
||||
auto_restore = false,
|
||||
suppressed_dirs = { "~/", "~/Dev/", "~/Downloads", "~/Documents", "~/Desktop/" }
|
||||
}
|
||||
|
||||
General Info ~
|
||||
- Session directory: /Users/carlos/.local/share/nvim/sessions/
|
||||
- Current session:
|
||||
- Current session file:
|
||||
|
||||
==============================================================================
|
||||
avante: ✅
|
||||
|
||||
avante.nvim ~
|
||||
- ✅ OK Found required plugin: nvim-lua/plenary.nvim
|
||||
- ✅ OK Found required plugin: MunifTanjim/nui.nvim
|
||||
- ✅ OK Found icons plugin (nvim-web-devicons or mini.icons)
|
||||
- ✅ OK Using native input provider (no additional dependencies required)
|
||||
|
||||
TreeSitter Dependencies ~
|
||||
- ✅ OK All essential TreeSitter parsers are installed
|
||||
- ✅ OK TreeSitter highlighter is available
|
||||
|
||||
==============================================================================
|
||||
copilot: 1 ❌
|
||||
|
||||
{copilot.lua} ~
|
||||
- {copilot.lua} GitHub Copilot plugin for Neovim
|
||||
|
||||
Copilot Dependencies ~
|
||||
- ✅ OK `node` found: v22.11.0
|
||||
|
||||
Copilot Authentication ~
|
||||
- No environment token set (`GITHUB_COPILOT_TOKEN` or `GH_COPILOT_TOKEN`)
|
||||
- ✅ OK Local credentials file found
|
||||
- Location: `/Users/carlos/.config/github-copilot/apps.json`
|
||||
- ❌ ERROR Copilot LSP client not available
|
||||
- Check that the plugin is properly loaded and configured
|
||||
- Or restart Neovim if the plugin was just installed
|
||||
|
||||
==============================================================================
|
||||
dap: ✅
|
||||
|
||||
dap: Adapters ~
|
||||
|
||||
dap.adapter: node2 ~
|
||||
- ✅ OK is executable: node
|
||||
|
||||
dap.adapter: java ~
|
||||
- Adapter is a function. Can't validate it
|
||||
|
||||
dap: Sessions ~
|
||||
- ✅ OK No active sessions
|
||||
|
||||
==============================================================================
|
||||
dressing: ✅
|
||||
|
||||
dressing.nvim ~
|
||||
- ✅ OK vim.ui.input active
|
||||
- ✅ OK vim.ui.select active: telescope
|
||||
|
||||
==============================================================================
|
||||
fzf_lua: ✅
|
||||
|
||||
fzf-lua [required] ~
|
||||
- ✅ OK 'fzf' `0.65.0 (brew)`
|
||||
- ✅ OK 'git' `git version 2.50.1`
|
||||
- ✅ OK 'rg' `ripgrep 14.1.1`
|
||||
- ✅ OK 'fd' `fd 10.2.0`
|
||||
|
||||
fzf-lua [optional] ~
|
||||
- ✅ OK `nvim-web-devicons` found
|
||||
- ✅ OK 'rg' `ripgrep 14.1.1`
|
||||
- ✅ OK 'fd' `fd 10.2.0`
|
||||
- ✅ OK 'bat' `bat 0.25.0`
|
||||
- ✅ OK 'delta' `delta 0.18.2`
|
||||
|
||||
fzf-lua [optional:media] ~
|
||||
- ✅ OK 'viu' `viu 1.5.1`
|
||||
- ✅ OK 'chafa' `Chafa version 1.16.2`
|
||||
- ✅ OK 'ueberzugpp' `ueberzugpp 2.9.6`
|
||||
|
||||
fzf-lua [env] ~
|
||||
- ✅ OK `$FZF_DEFAULT_OPTS` is set to:
|
||||
--color=fg:#CBE0F0,bg:#011628,hl:#B388FF,fg+:#CBE0F0,bg+:#143652,hl+:#B388FF,info:#06BCE4,prompt:#2CF9ED,pointer:#2CF9ED,marker:#2CF9ED,spinner:#2CF9ED,header:#2CF9ED
|
||||
- ✅ OK `FZF_DEFAULT_OPTS_FILE` is not set
|
||||
|
||||
==============================================================================
|
||||
img-clip: ✅
|
||||
|
||||
img-clip.nvim ~
|
||||
- ✅ OK `pngpaste` is installed
|
||||
|
||||
==============================================================================
|
||||
lazy: 2 ⚠️
|
||||
|
||||
lazy.nvim ~
|
||||
- {lazy.nvim} version `11.17.1`
|
||||
- ✅ OK {git} `version 2.50.1`
|
||||
- ✅ OK no existing packages found by other package managers
|
||||
- ✅ OK packer_compiled.lua not found
|
||||
|
||||
luarocks ~
|
||||
- checking `luarocks` installation
|
||||
- ✅ OK no plugins require `luarocks`, so you can ignore any warnings below
|
||||
- ✅ OK {luarocks} `/opt/homebrew/bin/luarocks 3.12.2`
|
||||
- ⚠️ WARNING `lua` version `5.1` needed, but found `Lua 5.4.8 Copyright (C) 1994-2025 Lua.org, PUC-Rio`
|
||||
- ⚠️ WARNING {lua5.1} or {lua} or {lua-5.1} version `5.1` not installed
|
||||
|
||||
==============================================================================
|
||||
luasnip: ✅
|
||||
|
||||
luasnip ~
|
||||
- ✅ OK jsregexp is installed
|
||||
|
||||
==============================================================================
|
||||
mason: ✅
|
||||
|
||||
mason.nvim ~
|
||||
- ✅ OK mason.nvim version v2.0.1
|
||||
- ✅ OK PATH: prepend
|
||||
- ✅ OK Providers:
|
||||
mason.providers.registry-api
|
||||
mason.providers.client
|
||||
- ✅ OK neovim version >= 0.10.0
|
||||
|
||||
mason.nvim [Registries] ~
|
||||
- ✅ OK Registry `github.com/mason-org/mason-registry version: 2025-07-28-rusty-action` is installed.
|
||||
|
||||
mason.nvim [Core utils] ~
|
||||
- ✅ OK unzip: `UnZip 6.00 of 20 April 2009, by Info-ZIP, with modifications by Apple Inc.`
|
||||
- ✅ OK wget: `GNU Wget 1.25.0, a non-interactive network retriever.`
|
||||
- ✅ OK curl: `curl 8.7.1 (x86_64-apple-darwin24.0) libcurl/8.7.1 (SecureTransport) LibreSSL/3.3.6 zlib/1.2.12 nghttp2/1.64.0`
|
||||
- ✅ OK gzip: `Apple gzip 457.120.3`
|
||||
- ✅ OK tar: `bsdtar 3.5.3 - libarchive 3.7.4 zlib/1.2.12 liblzma/5.4.3 bz2lib/1.0.8 `
|
||||
- ✅ OK bash: `GNU bash, version 3.2.57(1)-release (arm64-apple-darwin24)`
|
||||
- ✅ OK sh: `Ok`
|
||||
|
||||
mason.nvim [Languages] ~
|
||||
- ✅ OK Go: `go version go1.24.5 darwin/arm64`
|
||||
- ✅ OK luarocks: `/opt/homebrew/bin/luarocks 3.12.2`
|
||||
- ✅ OK cargo: `cargo 1.82.0 (8f40fc59f 2024-08-21)`
|
||||
- ✅ OK Ruby: `ruby 3.3.0 (2023-12-25 revision 5124f9ac75) [arm64-darwin24]`
|
||||
- ✅ OK node: `v22.11.0`
|
||||
- ✅ OK RubyGem: `3.5.3`
|
||||
- ✅ OK npm: `11.4.2`
|
||||
- ✅ OK PHP: `PHP 8.4.10 (cli) (built: Jul 2 2025 02:22:42) (NTS)`
|
||||
- ✅ OK python: `Python 3.13.5`
|
||||
- ✅ OK java: `openjdk version "23.0.2" 2025-01-21`
|
||||
- ✅ OK Composer: `Composer version 2.8.10 2025-07-10 19:08:33`
|
||||
- ✅ OK javac: `javac 23.0.2`
|
||||
- ✅ OK julia: `julia version 1.11.6`
|
||||
- ✅ OK pip: `pip 25.1.1 from /opt/homebrew/lib/python3.13/site-packages/pip (python 3.13)`
|
||||
- ✅ OK python venv: `Ok`
|
||||
|
||||
==============================================================================
|
||||
mason-lspconfig: ✅
|
||||
|
||||
mason-lspconfig.nvim ~
|
||||
- ✅ OK Neovim v0.11
|
||||
- ✅ OK mason.nvim v2
|
||||
|
||||
==============================================================================
|
||||
mcphub: 1 ⚠️
|
||||
|
||||
mcphub.nvim ~
|
||||
- mcphub.nvim version: 6.1.0
|
||||
- mcp-hub binary:
|
||||
- mcp-hub required version: 4.2.0
|
||||
- mcp-hub installed version: 4.2.0
|
||||
- ✅ OK mcp-hub version 4.2.0 is compatible
|
||||
|
||||
Plugin Dependencies: ~
|
||||
- ✅ OK plenary.nvim installed
|
||||
|
||||
Libraries: ~
|
||||
- ✅ OK curl installed
|
||||
- ✅ OK node installed
|
||||
- ✅ OK uv installed
|
||||
|
||||
Chat plugins ~
|
||||
- ⚠️ WARNING codecompanion.nvim not found
|
||||
- ✅ OK avante.nvim installed
|
||||
- ✅ OK CopilotChat.nvim installed
|
||||
|
||||
==============================================================================
|
||||
nvim-treesitter: ✅
|
||||
|
||||
Installation ~
|
||||
- ✅ OK `tree-sitter` found 0.25.8 (parser generator, only needed for :TSInstallFromGrammar)
|
||||
- ✅ OK `node` found v22.11.0 (only needed for :TSInstallFromGrammar)
|
||||
- ✅ OK `git` executable found.
|
||||
- ✅ OK `cc` executable found. Selected from { vim.NIL, "cc", "gcc", "clang", "cl", "zig" }
|
||||
Version: Apple clang version 17.0.0 (clang-1700.0.13.5)
|
||||
- ✅ OK Neovim was compiled with tree-sitter runtime ABI version 15 (required >=13). Parsers must be compatible with runtime ABI.
|
||||
|
||||
OS Info:
|
||||
{
|
||||
machine = "arm64",
|
||||
release = "24.5.0",
|
||||
sysname = "Darwin",
|
||||
version = "Darwin Kernel Version 24.5.0: Tue Apr 22 19:54:33 PDT 2025; root:xnu-11417.121.6~2/RELEASE_ARM64_T8122"
|
||||
} ~
|
||||
|
||||
Parser/Features H L F I J
|
||||
- bash ✓ ✓ ✓ . ✓
|
||||
- c ✓ ✓ ✓ ✓ ✓
|
||||
- css ✓ . ✓ ✓ ✓
|
||||
- diff ✓ . ✓ . ✓
|
||||
- dockerfile ✓ . . . ✓
|
||||
- gitignore ✓ . . . ✓
|
||||
- graphql ✓ . . ✓ ✓
|
||||
- html ✓ ✓ ✓ ✓ ✓
|
||||
- java ✓ ✓ ✓ ✓ ✓
|
||||
- javascript ✓ ✓ ✓ ✓ ✓
|
||||
- json ✓ ✓ ✓ ✓ .
|
||||
- latex ✓ . ✓ . ✓
|
||||
- lua ✓ ✓ ✓ ✓ ✓
|
||||
- markdown ✓ . ✓ ✓ ✓
|
||||
- markdown_inline ✓ . . . ✓
|
||||
- prisma ✓ . ✓ . ✓
|
||||
- query ✓ ✓ ✓ ✓ ✓
|
||||
- regex ✓ . . . .
|
||||
- sql ✓ . ✓ ✓ ✓
|
||||
- svelte ✓ ✓ ✓ ✓ ✓
|
||||
- tsx ✓ ✓ ✓ ✓ ✓
|
||||
- typescript ✓ ✓ ✓ ✓ ✓
|
||||
- vim ✓ ✓ ✓ . ✓
|
||||
- vimdoc ✓ . . . ✓
|
||||
- yaml ✓ ✓ ✓ ✓ ✓
|
||||
|
||||
Legend: H[ighlight], L[ocals], F[olds], I[ndents], In[j]ections
|
||||
+) multiple parsers found, only one will be used
|
||||
x) errors found in the query, try to run :TSUpdate {lang} ~
|
||||
|
||||
==============================================================================
|
||||
render-markdown: ✅
|
||||
|
||||
render-markdown.nvim [version] ~
|
||||
- ✅ OK plugin 8.6.9
|
||||
- ✅ OK neovim >= 0.11
|
||||
|
||||
render-markdown.nvim [configuration] ~
|
||||
- ✅ OK valid
|
||||
|
||||
render-markdown.nvim [treesitter] ~
|
||||
- ✅ OK markdown: parser installed
|
||||
- ✅ OK markdown: highlights ~/.local/share/nvim/lazy/nvim-treesitter/queries/markdown/highlights.scm
|
||||
- ✅ OK markdown: highlighter enabled
|
||||
- ✅ OK markdown_inline: parser installed
|
||||
- ✅ OK markdown_inline: highlights ~/.local/share/nvim/lazy/nvim-treesitter/queries/markdown_inline/highlights.scm
|
||||
- ✅ OK html: parser installed
|
||||
|
||||
render-markdown.nvim [icons] ~
|
||||
- ✅ OK using: nvim-web-devicons
|
||||
|
||||
render-markdown.nvim [executables] ~
|
||||
|
||||
render-markdown.nvim [conflicts] ~
|
||||
- ✅ OK headlines: not installed
|
||||
- ✅ OK markview: not installed
|
||||
- ✅ OK obsidian: not installed
|
||||
|
||||
==============================================================================
|
||||
snacks: 4 ⚠️ 3 ❌
|
||||
|
||||
Snacks ~
|
||||
- ✅ OK setup called
|
||||
|
||||
Snacks.bigfile ~
|
||||
- ✅ OK setup {enabled}
|
||||
|
||||
Snacks.dashboard ~
|
||||
- ✅ OK setup {enabled}
|
||||
- ❌ ERROR setup did not run
|
||||
|
||||
Snacks.explorer ~
|
||||
- ✅ OK setup {enabled}
|
||||
|
||||
Snacks.image ~
|
||||
- ✅ OK setup {enabled}
|
||||
- ✅ OK 'kitty' `kitty 0.42.2 created by Kovid Goyal`
|
||||
- ✅ OK 'magick' `Version: ImageMagick 7.1.2-0 Q16-HDRI aarch64 23234 https://imagemagick.org`
|
||||
- ✅ OK 'convert' `WARNING: The convert command is deprecated in IMv7, use "magick" instead of "convert" or "magick convert"`
|
||||
- ✅ OK `wezterm` detected and supported
|
||||
- ⚠️ WARNING `wezterm` does not support placeholders. Fallback rendering will be used
|
||||
- ⚠️ WARNING Inline images are disabled
|
||||
- ✅ OK `tmux` detected and supported
|
||||
- ✅ OK Terminal Dimensions:
|
||||
- {size}: `0` x `0` pixels
|
||||
- {scale}: `1.00`
|
||||
- {cell}: `0` x `0` pixels
|
||||
- ✅ OK Available Treesitter languages:
|
||||
`css`, `html`, `javascript`, `latex`, `markdown_inline`, `markdown`, `svelte`, `tsx`
|
||||
- ⚠️ WARNING Missing Treesitter languages:
|
||||
`norg`, `scss`, `typst`, `vue`
|
||||
- ⚠️ WARNING Image rendering in docs with missing treesitter parsers won't work
|
||||
- ✅ OK 'gs' `10.05.1`
|
||||
- ✅ OK PDF files are supported
|
||||
- ✅ OK 'tectonic' `tectonic 0.15.0Tectonic 0.15.0`
|
||||
- ✅ OK LaTeX math equations are supported
|
||||
- ✅ OK 'mmdc' `node:internal/modules/esm/resolve:838`
|
||||
- ✅ OK Mermaid diagrams are supported
|
||||
- ✅ OK your terminal supports the kitty graphics protocol
|
||||
|
||||
Snacks.input ~
|
||||
- ✅ OK setup {enabled}
|
||||
- ❌ ERROR `vim.ui.input` is not set to `Snacks.input`
|
||||
|
||||
Snacks.lazygit ~
|
||||
- ✅ OK {lazygit} installed
|
||||
|
||||
Snacks.notifier ~
|
||||
- ✅ OK setup {enabled}
|
||||
- ✅ OK is ready
|
||||
|
||||
Snacks.picker ~
|
||||
- ✅ OK setup {enabled}
|
||||
- ❌ ERROR `vim.ui.select` is not set to `Snacks.picker.select`
|
||||
- ✅ OK Available Treesitter languages:
|
||||
`regex`
|
||||
- ✅ OK 'git' `git version 2.50.1`
|
||||
- ✅ OK 'rg' `ripgrep 14.1.1`
|
||||
- ✅ OK `Snacks.picker.grep()` is available
|
||||
- ✅ OK 'fd' `fd 10.2.0`
|
||||
- ✅ OK `Snacks.picker.files()` is available
|
||||
- ✅ OK `Snacks.picker.explorer()` is available
|
||||
- ✅ OK `SQLite3` is available
|
||||
|
||||
Snacks.quickfile ~
|
||||
- ✅ OK setup {enabled}
|
||||
|
||||
Snacks.scope ~
|
||||
- ✅ OK setup {enabled}
|
||||
|
||||
Snacks.scroll ~
|
||||
- ✅ OK setup {enabled}
|
||||
|
||||
Snacks.statuscolumn ~
|
||||
- ✅ OK setup {enabled}
|
||||
|
||||
Snacks.terminal ~
|
||||
- ✅ OK shell configured
|
||||
- `vim.o.shell`: /bin/zsh
|
||||
- `parsed`: { "/bin/zsh" }
|
||||
|
||||
Snacks.toggle ~
|
||||
- ✅ OK {which-key} is installed
|
||||
|
||||
Snacks.words ~
|
||||
- ✅ OK setup {enabled}
|
||||
|
||||
==============================================================================
|
||||
telescope: ✅
|
||||
|
||||
Checking for required plugins ~
|
||||
- ✅ OK plenary installed.
|
||||
- ✅ OK nvim-treesitter installed.
|
||||
|
||||
Checking external dependencies ~
|
||||
- ✅ OK rg: found ripgrep 14.1.1
|
||||
- ✅ OK fd: found fd 10.2.0
|
||||
|
||||
===== Installed extensions ===== ~
|
||||
|
||||
Telescope Extension: `dap` ~
|
||||
- No healthcheck provided
|
||||
|
||||
Telescope Extension: `fzf` ~
|
||||
- ✅ OK lib working as expected
|
||||
- ✅ OK file_sorter correctly configured
|
||||
- ✅ OK generic_sorter correctly configured
|
||||
|
||||
Telescope Extension: `session-lens` ~
|
||||
- No healthcheck provided
|
||||
|
||||
==============================================================================
|
||||
vim.deprecated: ✅
|
||||
|
||||
- ✅ OK No deprecated functions detected
|
||||
|
||||
==============================================================================
|
||||
vim.health: 1 ❌
|
||||
|
||||
Configuration ~
|
||||
- ✅ OK no issues found
|
||||
|
||||
Runtime ~
|
||||
- ✅ OK $VIMRUNTIME: /opt/homebrew/Cellar/neovim/0.11.3/share/nvim/runtime
|
||||
|
||||
Performance ~
|
||||
- ✅ OK Build type: Release
|
||||
|
||||
Remote Plugins ~
|
||||
- ✅ OK Up to date
|
||||
|
||||
terminal ~
|
||||
- key_backspace (kbs) terminfo entry: `key_backspace=^H`
|
||||
- key_dc (kdch1) terminfo entry: `key_dc=\E[3~`
|
||||
- $TERM_PROGRAM="vscode"
|
||||
- $COLORTERM="truecolor"
|
||||
|
||||
tmux ~
|
||||
- ✅ OK escape-time: 10
|
||||
- ✅ OK focus-events: on
|
||||
- $TERM: xterm-256color
|
||||
- default-terminal: tmux-256color
|
||||
- ❌ ERROR $TERM differs from the tmux `default-terminal` setting. Colors might look wrong.
|
||||
- ADVICE:
|
||||
- $TERM may have been set by some rc (.bashrc, .zshrc, ...).
|
||||
|
||||
External Tools ~
|
||||
- ✅ OK ripgrep 14.1.1 (/opt/homebrew/bin/rg)
|
||||
|
||||
==============================================================================
|
||||
vim.lsp: 15 ⚠️
|
||||
|
||||
- LSP log level : WARN
|
||||
- Log path: /Users/carlos/.local/state/nvim/lsp.log
|
||||
- Log size: 9415 KB
|
||||
|
||||
vim.lsp: Active Clients ~
|
||||
- No active clients
|
||||
|
||||
vim.lsp: Enabled Configurations ~
|
||||
- ⚠️ WARNING 'css_variables' config not found. Ensure that vim.lsp.config('css_variables') was called.
|
||||
- css_variables:
|
||||
|
||||
- ⚠️ WARNING 'cssls' config not found. Ensure that vim.lsp.config('cssls') was called.
|
||||
- cssls:
|
||||
|
||||
- ⚠️ WARNING 'cssmodules_ls' config not found. Ensure that vim.lsp.config('cssmodules_ls') was called.
|
||||
- cssmodules_ls:
|
||||
|
||||
- ⚠️ WARNING 'emmet_ls' config not found. Ensure that vim.lsp.config('emmet_ls') was called.
|
||||
- emmet_ls:
|
||||
|
||||
- ⚠️ WARNING 'eslint' config not found. Ensure that vim.lsp.config('eslint') was called.
|
||||
- eslint:
|
||||
|
||||
- ⚠️ WARNING 'gopls' config not found. Ensure that vim.lsp.config('gopls') was called.
|
||||
- gopls:
|
||||
|
||||
- ⚠️ WARNING 'graphql' config not found. Ensure that vim.lsp.config('graphql') was called.
|
||||
- graphql:
|
||||
|
||||
- ⚠️ WARNING 'html' config not found. Ensure that vim.lsp.config('html') was called.
|
||||
- html:
|
||||
|
||||
- ⚠️ WARNING 'jdtls' config not found. Ensure that vim.lsp.config('jdtls') was called.
|
||||
- jdtls:
|
||||
|
||||
- ⚠️ WARNING 'lua_ls' config not found. Ensure that vim.lsp.config('lua_ls') was called.
|
||||
- lua_ls:
|
||||
|
||||
- ⚠️ WARNING 'prismals' config not found. Ensure that vim.lsp.config('prismals') was called.
|
||||
- prismals:
|
||||
|
||||
- ⚠️ WARNING 'pyright' config not found. Ensure that vim.lsp.config('pyright') was called.
|
||||
- pyright:
|
||||
|
||||
- ⚠️ WARNING 'svelte' config not found. Ensure that vim.lsp.config('svelte') was called.
|
||||
- svelte:
|
||||
|
||||
- ⚠️ WARNING 'tailwindcss' config not found. Ensure that vim.lsp.config('tailwindcss') was called.
|
||||
- tailwindcss:
|
||||
|
||||
- ⚠️ WARNING 'ts_ls' config not found. Ensure that vim.lsp.config('ts_ls') was called.
|
||||
- ts_ls:
|
||||
|
||||
|
||||
vim.lsp: File Watcher ~
|
||||
- file watching "(workspace/didChangeWatchedFiles)" disabled on all clients
|
||||
|
||||
vim.lsp: Position Encodings ~
|
||||
- No active clients
|
||||
|
||||
==============================================================================
|
||||
vim.provider: ✅
|
||||
|
||||
Clipboard (optional) ~
|
||||
- ✅ OK Clipboard tool found: pbcopy
|
||||
|
||||
Node.js provider (optional) ~
|
||||
- Node.js: v22.11.0
|
||||
|
||||
- Nvim node.js host: /Users/carlos/.config/yarn/global//node_modules/neovim/bin/cli.js
|
||||
|
||||
Perl provider (optional) ~
|
||||
- Disabled (loaded_perl_provider=0).
|
||||
|
||||
Python 3 provider (optional) ~
|
||||
- pyenv: Path: /opt/homebrew/Cellar/pyenv/2.6.5/libexec/pyenv
|
||||
- pyenv: Root: /Users/carlos/.pyenv
|
||||
- `g:python3_host_prog` is not set. Searching for python3.12 in the environment.
|
||||
- Executable: /opt/homebrew/bin/python3.12
|
||||
- Python version: 3.12.11
|
||||
- pynvim version: 0.5.2
|
||||
- ✅ OK Latest pynvim is installed.
|
||||
|
||||
Python virtualenv ~
|
||||
- ✅ OK no $VIRTUAL_ENV
|
||||
|
||||
Ruby provider (optional) ~
|
||||
- Disabled (loaded_ruby_provider=0).
|
||||
|
||||
==============================================================================
|
||||
vim.treesitter: ✅
|
||||
|
||||
Treesitter features ~
|
||||
- Treesitter ABI support: min 13, max 15
|
||||
- WASM parser support: false
|
||||
|
||||
Treesitter parsers ~
|
||||
- ✅ OK Parser: bash ABI: 14, path: /Users/carlos/.local/share/nvim/lazy/nvim-treesitter/parser/bash.so
|
||||
- ✅ OK Parser: c ABI: 14, path: /Users/carlos/.local/share/nvim/lazy/nvim-treesitter/parser/c.so
|
||||
- ✅ OK Parser: c ABI: 14, path: /opt/homebrew/Cellar/neovim/0.11.3/lib/nvim/parser/c.so
|
||||
- ✅ OK Parser: css ABI: 14, path: /Users/carlos/.local/share/nvim/lazy/nvim-treesitter/parser/css.so
|
||||
- ✅ OK Parser: diff ABI: 14, path: /Users/carlos/.local/share/nvim/lazy/nvim-treesitter/parser/diff.so
|
||||
- ✅ OK Parser: dockerfile ABI: 14, path: /Users/carlos/.local/share/nvim/lazy/nvim-treesitter/parser/dockerfile.so
|
||||
- ✅ OK Parser: gitignore ABI: 13, path: /Users/carlos/.local/share/nvim/lazy/nvim-treesitter/parser/gitignore.so
|
||||
- ✅ OK Parser: graphql ABI: 13, path: /Users/carlos/.local/share/nvim/lazy/nvim-treesitter/parser/graphql.so
|
||||
- ✅ OK Parser: html ABI: 14, path: /Users/carlos/.local/share/nvim/lazy/nvim-treesitter/parser/html.so
|
||||
- ✅ OK Parser: java ABI: 14, path: /Users/carlos/.local/share/nvim/lazy/nvim-treesitter/parser/java.so
|
||||
- ✅ OK Parser: javascript ABI: 14, path: /Users/carlos/.local/share/nvim/lazy/nvim-treesitter/parser/javascript.so
|
||||
- ✅ OK Parser: json ABI: 14, path: /Users/carlos/.local/share/nvim/lazy/nvim-treesitter/parser/json.so
|
||||
- ✅ OK Parser: latex ABI: 14, path: /Users/carlos/.local/share/nvim/lazy/nvim-treesitter/parser/latex.so
|
||||
- ✅ OK Parser: lua ABI: 14, path: /Users/carlos/.local/share/nvim/lazy/nvim-treesitter/parser/lua.so
|
||||
- ✅ OK Parser: lua ABI: 14, path: /opt/homebrew/Cellar/neovim/0.11.3/lib/nvim/parser/lua.so
|
||||
- ✅ OK Parser: markdown ABI: 14, path: /Users/carlos/.local/share/nvim/lazy/nvim-treesitter/parser/markdown.so
|
||||
- ✅ OK Parser: markdown ABI: 14, path: /opt/homebrew/Cellar/neovim/0.11.3/lib/nvim/parser/markdown.so
|
||||
- ✅ OK Parser: markdown_inline ABI: 14, path: /Users/carlos/.local/share/nvim/lazy/nvim-treesitter/parser/markdown_inline.so
|
||||
- ✅ OK Parser: markdown_inline ABI: 14, path: /opt/homebrew/Cellar/neovim/0.11.3/lib/nvim/parser/markdown_inline.so
|
||||
- ✅ OK Parser: prisma ABI: 14, path: /Users/carlos/.local/share/nvim/lazy/nvim-treesitter/parser/prisma.so
|
||||
- ✅ OK Parser: query ABI: 14, path: /Users/carlos/.local/share/nvim/lazy/nvim-treesitter/parser/query.so
|
||||
- ✅ OK Parser: query ABI: 14, path: /opt/homebrew/Cellar/neovim/0.11.3/lib/nvim/parser/query.so
|
||||
- ✅ OK Parser: regex ABI: 14, path: /Users/carlos/.local/share/nvim/lazy/nvim-treesitter/parser/regex.so
|
||||
- ✅ OK Parser: sql ABI: 14, path: /Users/carlos/.local/share/nvim/lazy/nvim-treesitter/parser/sql.so
|
||||
- ✅ OK Parser: svelte ABI: 14, path: /Users/carlos/.local/share/nvim/lazy/nvim-treesitter/parser/svelte.so
|
||||
- ✅ OK Parser: tsx ABI: 14, path: /Users/carlos/.local/share/nvim/lazy/nvim-treesitter/parser/tsx.so
|
||||
- ✅ OK Parser: typescript ABI: 14, path: /Users/carlos/.local/share/nvim/lazy/nvim-treesitter/parser/typescript.so
|
||||
- ✅ OK Parser: vim ABI: 14, path: /Users/carlos/.local/share/nvim/lazy/nvim-treesitter/parser/vim.so
|
||||
- ✅ OK Parser: vim ABI: 14, path: /opt/homebrew/Cellar/neovim/0.11.3/lib/nvim/parser/vim.so
|
||||
- ✅ OK Parser: vimdoc ABI: 14, path: /Users/carlos/.local/share/nvim/lazy/nvim-treesitter/parser/vimdoc.so
|
||||
- ✅ OK Parser: vimdoc ABI: 14, path: /opt/homebrew/Cellar/neovim/0.11.3/lib/nvim/parser/vimdoc.so
|
||||
- ✅ OK Parser: yaml ABI: 14, path: /Users/carlos/.local/share/nvim/lazy/nvim-treesitter/parser/yaml.so
|
||||
|
||||
@@ -1,577 +0,0 @@
|
||||
|
||||
==============================================================================
|
||||
CopilotChat: ✅
|
||||
|
||||
CopilotChat.nvim [core] ~
|
||||
- ✅ OK nvim: NVIM v0.11.3
|
||||
Build type: Release
|
||||
LuaJIT 2.1.1753364724
|
||||
Run "nvim -V1 -v" for more info
|
||||
- ✅ OK setup: called
|
||||
|
||||
CopilotChat.nvim [commands] ~
|
||||
- ✅ OK curl: curl 8.7.1 (x86_64-apple-darwin24.0) libcurl/8.7.1 (SecureTransport) LibreSSL/3.3.6 zlib/1.2.12 nghttp2/1.64.0
|
||||
Release-Date: 2024-03-27
|
||||
Protocols: dict file ftp ftps gopher gophers http https imap imaps ipfs ipns ldap ldaps mqtt pop3 pop3s rtsp smb smbs smtp smtps telnet tftp
|
||||
Features: alt-svc AsynchDNS GSS-API HSTS HTTP2 HTTPS-proxy IPv6 Kerberos Largefile libz MultiSSL NTLM SPNEGO SSL threadsafe UnixSockets
|
||||
- ✅ OK git: git version 2.50.1
|
||||
- ✅ OK rg: ripgrep 14.1.1
|
||||
|
||||
features:+pcre2
|
||||
simd(compile):+NEON
|
||||
simd(runtime):+NEON
|
||||
|
||||
PCRE2 10.43 is available (JIT is available)
|
||||
- ✅ OK lynx: Lynx Version 2.9.2 (31 May 2024)
|
||||
libwww-FM 2.14, SSL-MM 1.4.1, OpenSSL 3.5.1, ncurses 6.5.20240427
|
||||
Built on darwin24.2.0 (May 31 2024 23:03:20).
|
||||
|
||||
Copyrights held by the Lynx Developers Group,
|
||||
the University of Kansas, CERN, and other contributors.
|
||||
Distributed under the GNU General Public License (Version 2).
|
||||
See https://lynx.invisible-island.net/ and the online help for more information.
|
||||
|
||||
See http://www.openssl.org/ for information about OpenSSL.
|
||||
|
||||
CopilotChat.nvim [dependencies] ~
|
||||
- ✅ OK plenary: installed
|
||||
- ✅ OK copilot: copilot.lua
|
||||
- ✅ OK vim.ui.select: overridden by `@/Users/carlos/.local/share/nvim/lazy/dressing.nvim/lua/dressing/patch.lua`
|
||||
- ✅ OK tiktoken_core: installed
|
||||
- ✅ OK treesitter[markdown]: installed
|
||||
- ✅ OK treesitter[diff]: installed
|
||||
|
||||
==============================================================================
|
||||
avante: ✅
|
||||
|
||||
avante.nvim ~
|
||||
- ✅ OK Found required plugin: nvim-lua/plenary.nvim
|
||||
- ✅ OK Found required plugin: MunifTanjim/nui.nvim
|
||||
- ✅ OK Found icons plugin (nvim-web-devicons or mini.icons)
|
||||
- ✅ OK Using native input provider (no additional dependencies required)
|
||||
|
||||
TreeSitter Dependencies ~
|
||||
- ✅ OK All essential TreeSitter parsers are installed
|
||||
- ✅ OK TreeSitter highlighter is available
|
||||
|
||||
==============================================================================
|
||||
copilot: 1 ❌
|
||||
|
||||
{copilot.lua} ~
|
||||
- {copilot.lua} GitHub Copilot plugin for Neovim
|
||||
|
||||
Copilot Dependencies ~
|
||||
- ✅ OK `node` found: v22.11.0
|
||||
|
||||
Copilot Authentication ~
|
||||
- No environment token set (`GITHUB_COPILOT_TOKEN` or `GH_COPILOT_TOKEN`)
|
||||
- ✅ OK Local credentials file found
|
||||
- Location: `/Users/carlos/.config/github-copilot/apps.json`
|
||||
- ❌ ERROR Copilot LSP client not available
|
||||
- Check that the plugin is properly loaded and configured
|
||||
- Or restart Neovim if the plugin was just installed
|
||||
|
||||
==============================================================================
|
||||
dap: ✅
|
||||
|
||||
dap: Adapters ~
|
||||
|
||||
dap.adapter: node2 ~
|
||||
- ✅ OK is executable: node
|
||||
|
||||
dap.adapter: java ~
|
||||
- Adapter is a function. Can't validate it
|
||||
|
||||
dap: Sessions ~
|
||||
- ✅ OK No active sessions
|
||||
|
||||
==============================================================================
|
||||
dressing: ✅
|
||||
|
||||
dressing.nvim ~
|
||||
- ✅ OK vim.ui.input active
|
||||
- ✅ OK vim.ui.select active: telescope
|
||||
|
||||
==============================================================================
|
||||
fzf_lua: ✅
|
||||
|
||||
fzf-lua [required] ~
|
||||
- ✅ OK 'fzf' `0.65.0 (brew)`
|
||||
- ✅ OK 'git' `git version 2.50.1`
|
||||
- ✅ OK 'rg' `ripgrep 14.1.1`
|
||||
- ✅ OK 'fd' `fd 10.2.0`
|
||||
|
||||
fzf-lua [optional] ~
|
||||
- ✅ OK `nvim-web-devicons` found
|
||||
- ✅ OK 'rg' `ripgrep 14.1.1`
|
||||
- ✅ OK 'fd' `fd 10.2.0`
|
||||
- ✅ OK 'bat' `bat 0.25.0`
|
||||
- ✅ OK 'delta' `delta 0.18.2`
|
||||
|
||||
fzf-lua [optional:media] ~
|
||||
- ✅ OK 'viu' `viu 1.5.1`
|
||||
- ✅ OK 'chafa' `Chafa version 1.16.2`
|
||||
- ✅ OK 'ueberzugpp' `ueberzugpp 2.9.6`
|
||||
|
||||
fzf-lua [env] ~
|
||||
- ✅ OK `$FZF_DEFAULT_OPTS` is set to:
|
||||
--color=fg:#CBE0F0,bg:#011628,hl:#B388FF,fg+:#CBE0F0,bg+:#143652,hl+:#B388FF,info:#06BCE4,prompt:#2CF9ED,pointer:#2CF9ED,marker:#2CF9ED,spinner:#2CF9ED,header:#2CF9ED
|
||||
- ✅ OK `FZF_DEFAULT_OPTS_FILE` is not set
|
||||
|
||||
==============================================================================
|
||||
img-clip: ✅
|
||||
|
||||
img-clip.nvim ~
|
||||
- ✅ OK `pngpaste` is installed
|
||||
|
||||
==============================================================================
|
||||
lazy: 2 ⚠️
|
||||
|
||||
lazy.nvim ~
|
||||
- {lazy.nvim} version `11.17.1`
|
||||
- ✅ OK {git} `version 2.50.1`
|
||||
- ✅ OK no existing packages found by other package managers
|
||||
- ✅ OK packer_compiled.lua not found
|
||||
|
||||
luarocks ~
|
||||
- checking `luarocks` installation
|
||||
- ✅ OK no plugins require `luarocks`, so you can ignore any warnings below
|
||||
- ✅ OK {luarocks} `/opt/homebrew/bin/luarocks 3.12.2`
|
||||
- ⚠️ WARNING `lua` version `5.1` needed, but found `Lua 5.4.8 Copyright (C) 1994-2025 Lua.org, PUC-Rio`
|
||||
- ⚠️ WARNING {lua5.1} or {lua} or {lua-5.1} version `5.1` not installed
|
||||
|
||||
==============================================================================
|
||||
luasnip: ✅
|
||||
|
||||
luasnip ~
|
||||
- ✅ OK jsregexp is installed
|
||||
|
||||
==============================================================================
|
||||
mason: ✅
|
||||
|
||||
mason.nvim ~
|
||||
- ✅ OK mason.nvim version v2.0.1
|
||||
- ✅ OK PATH: prepend
|
||||
- ✅ OK Providers:
|
||||
mason.providers.registry-api
|
||||
mason.providers.client
|
||||
- ✅ OK neovim version >= 0.10.0
|
||||
|
||||
mason.nvim [Registries] ~
|
||||
- ✅ OK Registry `github.com/mason-org/mason-registry version: 2025-07-28-rusty-action` is installed.
|
||||
|
||||
mason.nvim [Core utils] ~
|
||||
- ✅ OK unzip: `UnZip 6.00 of 20 April 2009, by Info-ZIP, with modifications by Apple Inc.`
|
||||
- ✅ OK wget: `GNU Wget 1.25.0, a non-interactive network retriever.`
|
||||
- ✅ OK curl: `curl 8.7.1 (x86_64-apple-darwin24.0) libcurl/8.7.1 (SecureTransport) LibreSSL/3.3.6 zlib/1.2.12 nghttp2/1.64.0`
|
||||
- ✅ OK gzip: `Apple gzip 457.120.3`
|
||||
- ✅ OK tar: `bsdtar 3.5.3 - libarchive 3.7.4 zlib/1.2.12 liblzma/5.4.3 bz2lib/1.0.8 `
|
||||
- ✅ OK bash: `GNU bash, version 3.2.57(1)-release (arm64-apple-darwin24)`
|
||||
- ✅ OK sh: `Ok`
|
||||
|
||||
mason.nvim [Languages] ~
|
||||
- ✅ OK Go: `go version go1.24.5 darwin/arm64`
|
||||
- ✅ OK luarocks: `/opt/homebrew/bin/luarocks 3.12.2`
|
||||
- ✅ OK cargo: `cargo 1.82.0 (8f40fc59f 2024-08-21)`
|
||||
- ✅ OK Ruby: `ruby 3.3.0 (2023-12-25 revision 5124f9ac75) [arm64-darwin24]`
|
||||
- ✅ OK node: `v22.11.0`
|
||||
- ✅ OK npm: `11.4.2`
|
||||
- ✅ OK PHP: `PHP 8.4.10 (cli) (built: Jul 2 2025 02:22:42) (NTS)`
|
||||
- ✅ OK Composer: `Composer version 2.8.10 2025-07-10 19:08:33`
|
||||
- ✅ OK RubyGem: `3.5.3`
|
||||
- ✅ OK python: `Python 3.13.5`
|
||||
- ✅ OK java: `openjdk version "23.0.2" 2025-01-21`
|
||||
- ✅ OK javac: `javac 23.0.2`
|
||||
- ✅ OK julia: `julia version 1.11.6`
|
||||
- ✅ OK pip: `pip 25.1.1 from /opt/homebrew/lib/python3.13/site-packages/pip (python 3.13)`
|
||||
- ✅ OK python venv: `Ok`
|
||||
|
||||
==============================================================================
|
||||
mason-lspconfig: ✅
|
||||
|
||||
mason-lspconfig.nvim ~
|
||||
- ✅ OK Neovim v0.11
|
||||
- ✅ OK mason.nvim v2
|
||||
|
||||
==============================================================================
|
||||
mcphub: 1 ⚠️
|
||||
|
||||
mcphub.nvim ~
|
||||
- mcphub.nvim version: 6.1.0
|
||||
- mcp-hub binary:
|
||||
- mcp-hub required version: 4.2.0
|
||||
- mcp-hub installed version: 4.2.0
|
||||
- ✅ OK mcp-hub version 4.2.0 is compatible
|
||||
|
||||
Plugin Dependencies: ~
|
||||
- ✅ OK plenary.nvim installed
|
||||
|
||||
Libraries: ~
|
||||
- ✅ OK curl installed
|
||||
- ✅ OK node installed
|
||||
- ✅ OK uv installed
|
||||
|
||||
Chat plugins ~
|
||||
- ⚠️ WARNING codecompanion.nvim not found
|
||||
- ✅ OK avante.nvim installed
|
||||
- ✅ OK CopilotChat.nvim installed
|
||||
|
||||
==============================================================================
|
||||
nvim-treesitter: ✅
|
||||
|
||||
Installation ~
|
||||
- ✅ OK `tree-sitter` found 0.25.8 (parser generator, only needed for :TSInstallFromGrammar)
|
||||
- ✅ OK `node` found v22.11.0 (only needed for :TSInstallFromGrammar)
|
||||
- ✅ OK `git` executable found.
|
||||
- ✅ OK `cc` executable found. Selected from { vim.NIL, "cc", "gcc", "clang", "cl", "zig" }
|
||||
Version: Apple clang version 17.0.0 (clang-1700.0.13.5)
|
||||
- ✅ OK Neovim was compiled with tree-sitter runtime ABI version 15 (required >=13). Parsers must be compatible with runtime ABI.
|
||||
|
||||
OS Info:
|
||||
{
|
||||
machine = "arm64",
|
||||
release = "24.5.0",
|
||||
sysname = "Darwin",
|
||||
version = "Darwin Kernel Version 24.5.0: Tue Apr 22 19:54:33 PDT 2025; root:xnu-11417.121.6~2/RELEASE_ARM64_T8122"
|
||||
} ~
|
||||
|
||||
Parser/Features H L F I J
|
||||
- bash ✓ ✓ ✓ . ✓
|
||||
- c ✓ ✓ ✓ ✓ ✓
|
||||
- css ✓ . ✓ ✓ ✓
|
||||
- diff ✓ . ✓ . ✓
|
||||
- dockerfile ✓ . . . ✓
|
||||
- gitignore ✓ . . . ✓
|
||||
- graphql ✓ . . ✓ ✓
|
||||
- html ✓ ✓ ✓ ✓ ✓
|
||||
- java ✓ ✓ ✓ ✓ ✓
|
||||
- javascript ✓ ✓ ✓ ✓ ✓
|
||||
- json ✓ ✓ ✓ ✓ .
|
||||
- latex ✓ . ✓ . ✓
|
||||
- lua ✓ ✓ ✓ ✓ ✓
|
||||
- markdown ✓ . ✓ ✓ ✓
|
||||
- markdown_inline ✓ . . . ✓
|
||||
- prisma ✓ . ✓ . ✓
|
||||
- query ✓ ✓ ✓ ✓ ✓
|
||||
- regex ✓ . . . .
|
||||
- sql ✓ . ✓ ✓ ✓
|
||||
- svelte ✓ ✓ ✓ ✓ ✓
|
||||
- tsx ✓ ✓ ✓ ✓ ✓
|
||||
- typescript ✓ ✓ ✓ ✓ ✓
|
||||
- vim ✓ ✓ ✓ . ✓
|
||||
- vimdoc ✓ . . . ✓
|
||||
- yaml ✓ ✓ ✓ ✓ ✓
|
||||
|
||||
Legend: H[ighlight], L[ocals], F[olds], I[ndents], In[j]ections
|
||||
+) multiple parsers found, only one will be used
|
||||
x) errors found in the query, try to run :TSUpdate {lang} ~
|
||||
|
||||
==============================================================================
|
||||
render-markdown: ✅
|
||||
|
||||
render-markdown.nvim [version] ~
|
||||
- ✅ OK plugin 8.6.9
|
||||
- ✅ OK neovim >= 0.11
|
||||
|
||||
render-markdown.nvim [configuration] ~
|
||||
- ✅ OK valid
|
||||
|
||||
render-markdown.nvim [treesitter] ~
|
||||
- ✅ OK markdown: parser installed
|
||||
- ✅ OK markdown: highlights ~/.local/share/nvim/lazy/nvim-treesitter/queries/markdown/highlights.scm
|
||||
- ✅ OK markdown: highlighter enabled
|
||||
- ✅ OK markdown_inline: parser installed
|
||||
- ✅ OK markdown_inline: highlights ~/.local/share/nvim/lazy/nvim-treesitter/queries/markdown_inline/highlights.scm
|
||||
- ✅ OK html: parser installed
|
||||
|
||||
render-markdown.nvim [icons] ~
|
||||
- ✅ OK using: nvim-web-devicons
|
||||
|
||||
render-markdown.nvim [executables] ~
|
||||
|
||||
render-markdown.nvim [conflicts] ~
|
||||
- ✅ OK headlines: not installed
|
||||
- ✅ OK markview: not installed
|
||||
- ✅ OK obsidian: not installed
|
||||
|
||||
==============================================================================
|
||||
snacks: 4 ⚠️ 3 ❌
|
||||
|
||||
Snacks ~
|
||||
- ✅ OK setup called
|
||||
|
||||
Snacks.bigfile ~
|
||||
- ✅ OK setup {enabled}
|
||||
|
||||
Snacks.dashboard ~
|
||||
- ✅ OK setup {enabled}
|
||||
- ❌ ERROR setup did not run
|
||||
|
||||
Snacks.explorer ~
|
||||
- ✅ OK setup {enabled}
|
||||
|
||||
Snacks.image ~
|
||||
- ✅ OK setup {enabled}
|
||||
- ✅ OK 'kitty' `kitty 0.42.2 created by Kovid Goyal`
|
||||
- ✅ OK 'magick' `Version: ImageMagick 7.1.2-0 Q16-HDRI aarch64 23234 https://imagemagick.org`
|
||||
- ✅ OK 'convert' `WARNING: The convert command is deprecated in IMv7, use "magick" instead of "convert" or "magick convert"`
|
||||
- ✅ OK `wezterm` detected and supported
|
||||
- ⚠️ WARNING `wezterm` does not support placeholders. Fallback rendering will be used
|
||||
- ⚠️ WARNING Inline images are disabled
|
||||
- ✅ OK `tmux` detected and supported
|
||||
- ✅ OK Terminal Dimensions:
|
||||
- {size}: `0` x `0` pixels
|
||||
- {scale}: `1.00`
|
||||
- {cell}: `0` x `0` pixels
|
||||
- ✅ OK Available Treesitter languages:
|
||||
`css`, `html`, `javascript`, `latex`, `markdown_inline`, `markdown`, `svelte`, `tsx`
|
||||
- ⚠️ WARNING Missing Treesitter languages:
|
||||
`norg`, `scss`, `typst`, `vue`
|
||||
- ⚠️ WARNING Image rendering in docs with missing treesitter parsers won't work
|
||||
- ✅ OK 'gs' `10.05.1`
|
||||
- ✅ OK PDF files are supported
|
||||
- ✅ OK 'tectonic' `tectonic 0.15.0Tectonic 0.15.0`
|
||||
- ✅ OK LaTeX math equations are supported
|
||||
- ✅ OK 'mmdc' `node:internal/modules/esm/resolve:838`
|
||||
- ✅ OK Mermaid diagrams are supported
|
||||
- ✅ OK your terminal supports the kitty graphics protocol
|
||||
|
||||
Snacks.input ~
|
||||
- ✅ OK setup {enabled}
|
||||
- ❌ ERROR `vim.ui.input` is not set to `Snacks.input`
|
||||
|
||||
Snacks.lazygit ~
|
||||
- ✅ OK {lazygit} installed
|
||||
|
||||
Snacks.notifier ~
|
||||
- ✅ OK setup {enabled}
|
||||
- ✅ OK is ready
|
||||
|
||||
Snacks.picker ~
|
||||
- ✅ OK setup {enabled}
|
||||
- ❌ ERROR `vim.ui.select` is not set to `Snacks.picker.select`
|
||||
- ✅ OK Available Treesitter languages:
|
||||
`regex`
|
||||
- ✅ OK 'git' `git version 2.50.1`
|
||||
- ✅ OK 'rg' `ripgrep 14.1.1`
|
||||
- ✅ OK `Snacks.picker.grep()` is available
|
||||
- ✅ OK 'fd' `fd 10.2.0`
|
||||
- ✅ OK `Snacks.picker.files()` is available
|
||||
- ✅ OK `Snacks.picker.explorer()` is available
|
||||
- ✅ OK `SQLite3` is available
|
||||
|
||||
Snacks.quickfile ~
|
||||
- ✅ OK setup {enabled}
|
||||
|
||||
Snacks.scope ~
|
||||
- ✅ OK setup {enabled}
|
||||
|
||||
Snacks.scroll ~
|
||||
- ✅ OK setup {enabled}
|
||||
|
||||
Snacks.statuscolumn ~
|
||||
- ✅ OK setup {enabled}
|
||||
|
||||
Snacks.terminal ~
|
||||
- ✅ OK shell configured
|
||||
- `vim.o.shell`: /bin/zsh
|
||||
- `parsed`: { "/bin/zsh" }
|
||||
|
||||
Snacks.toggle ~
|
||||
- ✅ OK {which-key} is installed
|
||||
|
||||
Snacks.words ~
|
||||
- ✅ OK setup {enabled}
|
||||
|
||||
==============================================================================
|
||||
telescope: ✅
|
||||
|
||||
Checking for required plugins ~
|
||||
- ✅ OK plenary installed.
|
||||
- ✅ OK nvim-treesitter installed.
|
||||
|
||||
Checking external dependencies ~
|
||||
- ✅ OK rg: found ripgrep 14.1.1
|
||||
- ✅ OK fd: found fd 10.2.0
|
||||
|
||||
===== Installed extensions ===== ~
|
||||
|
||||
Telescope Extension: `dap` ~
|
||||
- No healthcheck provided
|
||||
|
||||
Telescope Extension: `fzf` ~
|
||||
- ✅ OK lib working as expected
|
||||
- ✅ OK file_sorter correctly configured
|
||||
- ✅ OK generic_sorter correctly configured
|
||||
|
||||
==============================================================================
|
||||
vim.deprecated: ✅
|
||||
|
||||
- ✅ OK No deprecated functions detected
|
||||
|
||||
==============================================================================
|
||||
vim.health: 1 ❌
|
||||
|
||||
Configuration ~
|
||||
- ✅ OK no issues found
|
||||
|
||||
Runtime ~
|
||||
- ✅ OK $VIMRUNTIME: /opt/homebrew/Cellar/neovim/0.11.3/share/nvim/runtime
|
||||
|
||||
Performance ~
|
||||
- ✅ OK Build type: Release
|
||||
|
||||
Remote Plugins ~
|
||||
- ✅ OK Up to date
|
||||
|
||||
terminal ~
|
||||
- key_backspace (kbs) terminfo entry: `key_backspace=^H`
|
||||
- key_dc (kdch1) terminfo entry: `key_dc=\E[3~`
|
||||
- $TERM_PROGRAM="vscode"
|
||||
- $COLORTERM="truecolor"
|
||||
|
||||
tmux ~
|
||||
- ✅ OK escape-time: 10
|
||||
- ✅ OK focus-events: on
|
||||
- $TERM: xterm-256color
|
||||
- default-terminal: tmux-256color
|
||||
- ❌ ERROR $TERM differs from the tmux `default-terminal` setting. Colors might look wrong.
|
||||
- ADVICE:
|
||||
- $TERM may have been set by some rc (.bashrc, .zshrc, ...).
|
||||
|
||||
External Tools ~
|
||||
- ✅ OK ripgrep 14.1.1 (/opt/homebrew/bin/rg)
|
||||
|
||||
==============================================================================
|
||||
vim.lsp: 15 ⚠️
|
||||
|
||||
- LSP log level : WARN
|
||||
- Log path: /Users/carlos/.local/state/nvim/lsp.log
|
||||
- Log size: 9416 KB
|
||||
|
||||
vim.lsp: Active Clients ~
|
||||
- No active clients
|
||||
|
||||
vim.lsp: Enabled Configurations ~
|
||||
- ⚠️ WARNING 'css_variables' config not found. Ensure that vim.lsp.config('css_variables') was called.
|
||||
- css_variables:
|
||||
|
||||
- ⚠️ WARNING 'cssls' config not found. Ensure that vim.lsp.config('cssls') was called.
|
||||
- cssls:
|
||||
|
||||
- ⚠️ WARNING 'cssmodules_ls' config not found. Ensure that vim.lsp.config('cssmodules_ls') was called.
|
||||
- cssmodules_ls:
|
||||
|
||||
- ⚠️ WARNING 'emmet_ls' config not found. Ensure that vim.lsp.config('emmet_ls') was called.
|
||||
- emmet_ls:
|
||||
|
||||
- ⚠️ WARNING 'eslint' config not found. Ensure that vim.lsp.config('eslint') was called.
|
||||
- eslint:
|
||||
|
||||
- ⚠️ WARNING 'gopls' config not found. Ensure that vim.lsp.config('gopls') was called.
|
||||
- gopls:
|
||||
|
||||
- ⚠️ WARNING 'graphql' config not found. Ensure that vim.lsp.config('graphql') was called.
|
||||
- graphql:
|
||||
|
||||
- ⚠️ WARNING 'html' config not found. Ensure that vim.lsp.config('html') was called.
|
||||
- html:
|
||||
|
||||
- ⚠️ WARNING 'jdtls' config not found. Ensure that vim.lsp.config('jdtls') was called.
|
||||
- jdtls:
|
||||
|
||||
- ⚠️ WARNING 'lua_ls' config not found. Ensure that vim.lsp.config('lua_ls') was called.
|
||||
- lua_ls:
|
||||
|
||||
- ⚠️ WARNING 'prismals' config not found. Ensure that vim.lsp.config('prismals') was called.
|
||||
- prismals:
|
||||
|
||||
- ⚠️ WARNING 'pyright' config not found. Ensure that vim.lsp.config('pyright') was called.
|
||||
- pyright:
|
||||
|
||||
- ⚠️ WARNING 'svelte' config not found. Ensure that vim.lsp.config('svelte') was called.
|
||||
- svelte:
|
||||
|
||||
- ⚠️ WARNING 'tailwindcss' config not found. Ensure that vim.lsp.config('tailwindcss') was called.
|
||||
- tailwindcss:
|
||||
|
||||
- ⚠️ WARNING 'ts_ls' config not found. Ensure that vim.lsp.config('ts_ls') was called.
|
||||
- ts_ls:
|
||||
|
||||
|
||||
vim.lsp: File Watcher ~
|
||||
- file watching "(workspace/didChangeWatchedFiles)" disabled on all clients
|
||||
|
||||
vim.lsp: Position Encodings ~
|
||||
- No active clients
|
||||
|
||||
==============================================================================
|
||||
vim.provider: ✅
|
||||
|
||||
Clipboard (optional) ~
|
||||
- ✅ OK Clipboard tool found: pbcopy
|
||||
|
||||
Node.js provider (optional) ~
|
||||
- Node.js: v22.11.0
|
||||
|
||||
- Nvim node.js host: /Users/carlos/.config/yarn/global//node_modules/neovim/bin/cli.js
|
||||
|
||||
Perl provider (optional) ~
|
||||
- Disabled (loaded_perl_provider=0).
|
||||
|
||||
Python 3 provider (optional) ~
|
||||
- pyenv: Path: /opt/homebrew/Cellar/pyenv/2.6.5/libexec/pyenv
|
||||
- pyenv: Root: /Users/carlos/.pyenv
|
||||
- `g:python3_host_prog` is not set. Searching for python3.12 in the environment.
|
||||
- Executable: /opt/homebrew/bin/python3.12
|
||||
- Python version: 3.12.11
|
||||
- pynvim version: 0.5.2
|
||||
- ✅ OK Latest pynvim is installed.
|
||||
|
||||
Python virtualenv ~
|
||||
- ✅ OK no $VIRTUAL_ENV
|
||||
|
||||
Ruby provider (optional) ~
|
||||
- Disabled (loaded_ruby_provider=0).
|
||||
|
||||
==============================================================================
|
||||
vim.treesitter: ✅
|
||||
|
||||
Treesitter features ~
|
||||
- Treesitter ABI support: min 13, max 15
|
||||
- WASM parser support: false
|
||||
|
||||
Treesitter parsers ~
|
||||
- ✅ OK Parser: bash ABI: 14, path: /Users/carlos/.local/share/nvim/lazy/nvim-treesitter/parser/bash.so
|
||||
- ✅ OK Parser: c ABI: 14, path: /Users/carlos/.local/share/nvim/lazy/nvim-treesitter/parser/c.so
|
||||
- ✅ OK Parser: c ABI: 14, path: /opt/homebrew/Cellar/neovim/0.11.3/lib/nvim/parser/c.so
|
||||
- ✅ OK Parser: css ABI: 14, path: /Users/carlos/.local/share/nvim/lazy/nvim-treesitter/parser/css.so
|
||||
- ✅ OK Parser: diff ABI: 14, path: /Users/carlos/.local/share/nvim/lazy/nvim-treesitter/parser/diff.so
|
||||
- ✅ OK Parser: dockerfile ABI: 14, path: /Users/carlos/.local/share/nvim/lazy/nvim-treesitter/parser/dockerfile.so
|
||||
- ✅ OK Parser: gitignore ABI: 13, path: /Users/carlos/.local/share/nvim/lazy/nvim-treesitter/parser/gitignore.so
|
||||
- ✅ OK Parser: graphql ABI: 13, path: /Users/carlos/.local/share/nvim/lazy/nvim-treesitter/parser/graphql.so
|
||||
- ✅ OK Parser: html ABI: 14, path: /Users/carlos/.local/share/nvim/lazy/nvim-treesitter/parser/html.so
|
||||
- ✅ OK Parser: java ABI: 14, path: /Users/carlos/.local/share/nvim/lazy/nvim-treesitter/parser/java.so
|
||||
- ✅ OK Parser: javascript ABI: 14, path: /Users/carlos/.local/share/nvim/lazy/nvim-treesitter/parser/javascript.so
|
||||
- ✅ OK Parser: json ABI: 14, path: /Users/carlos/.local/share/nvim/lazy/nvim-treesitter/parser/json.so
|
||||
- ✅ OK Parser: latex ABI: 14, path: /Users/carlos/.local/share/nvim/lazy/nvim-treesitter/parser/latex.so
|
||||
- ✅ OK Parser: lua ABI: 14, path: /Users/carlos/.local/share/nvim/lazy/nvim-treesitter/parser/lua.so
|
||||
- ✅ OK Parser: lua ABI: 14, path: /opt/homebrew/Cellar/neovim/0.11.3/lib/nvim/parser/lua.so
|
||||
- ✅ OK Parser: markdown ABI: 14, path: /Users/carlos/.local/share/nvim/lazy/nvim-treesitter/parser/markdown.so
|
||||
- ✅ OK Parser: markdown ABI: 14, path: /opt/homebrew/Cellar/neovim/0.11.3/lib/nvim/parser/markdown.so
|
||||
- ✅ OK Parser: markdown_inline ABI: 14, path: /Users/carlos/.local/share/nvim/lazy/nvim-treesitter/parser/markdown_inline.so
|
||||
- ✅ OK Parser: markdown_inline ABI: 14, path: /opt/homebrew/Cellar/neovim/0.11.3/lib/nvim/parser/markdown_inline.so
|
||||
- ✅ OK Parser: prisma ABI: 14, path: /Users/carlos/.local/share/nvim/lazy/nvim-treesitter/parser/prisma.so
|
||||
- ✅ OK Parser: query ABI: 14, path: /Users/carlos/.local/share/nvim/lazy/nvim-treesitter/parser/query.so
|
||||
- ✅ OK Parser: query ABI: 14, path: /opt/homebrew/Cellar/neovim/0.11.3/lib/nvim/parser/query.so
|
||||
- ✅ OK Parser: regex ABI: 14, path: /Users/carlos/.local/share/nvim/lazy/nvim-treesitter/parser/regex.so
|
||||
- ✅ OK Parser: sql ABI: 14, path: /Users/carlos/.local/share/nvim/lazy/nvim-treesitter/parser/sql.so
|
||||
- ✅ OK Parser: svelte ABI: 14, path: /Users/carlos/.local/share/nvim/lazy/nvim-treesitter/parser/svelte.so
|
||||
- ✅ OK Parser: tsx ABI: 14, path: /Users/carlos/.local/share/nvim/lazy/nvim-treesitter/parser/tsx.so
|
||||
- ✅ OK Parser: typescript ABI: 14, path: /Users/carlos/.local/share/nvim/lazy/nvim-treesitter/parser/typescript.so
|
||||
- ✅ OK Parser: vim ABI: 14, path: /Users/carlos/.local/share/nvim/lazy/nvim-treesitter/parser/vim.so
|
||||
- ✅ OK Parser: vim ABI: 14, path: /opt/homebrew/Cellar/neovim/0.11.3/lib/nvim/parser/vim.so
|
||||
- ✅ OK Parser: vimdoc ABI: 14, path: /Users/carlos/.local/share/nvim/lazy/nvim-treesitter/parser/vimdoc.so
|
||||
- ✅ OK Parser: vimdoc ABI: 14, path: /opt/homebrew/Cellar/neovim/0.11.3/lib/nvim/parser/vimdoc.so
|
||||
- ✅ OK Parser: yaml ABI: 14, path: /Users/carlos/.local/share/nvim/lazy/nvim-treesitter/parser/yaml.so
|
||||
|
||||
192
keybind.json
192
keybind.json
@@ -1,4 +1,8 @@
|
||||
[
|
||||
{
|
||||
"key": "cmd+i",
|
||||
"command": "composerMode.agent"
|
||||
},
|
||||
{
|
||||
"key": "ctrl-h",
|
||||
"command": "workbench.action.navigateLeft"
|
||||
@@ -35,121 +39,13 @@
|
||||
"workbench.action.focusActiveEditorGroup"
|
||||
]
|
||||
},
|
||||
"when": "sideBarFocus && !inputFocus"
|
||||
"when": "vim.mode == 'Normal' && sideBarFocus && !inputFocus"
|
||||
},
|
||||
{
|
||||
"key": "space e",
|
||||
"when": "vim.mode == 'Normal' && editorTextFocus && foldersViewVisible",
|
||||
"command": "workbench.action.toggleSidebarVisibility"
|
||||
},
|
||||
{
|
||||
"key": "s h",
|
||||
"command": "workbench.action.splitEditor",
|
||||
"when": "vim.mode == 'Normal' && (editorTextFocus || !inputFocus)"
|
||||
},
|
||||
{
|
||||
"key": "s v",
|
||||
"command": "workbench.action.splitEditorDown",
|
||||
"when": "vim.mode == 'Normal' && (editorTextFocus || !inputFocus)"
|
||||
},
|
||||
{
|
||||
"key": "space c a",
|
||||
"command": "editor.action.codeAction",
|
||||
"when": "vim.mode == 'Normal' && editorTextFocus"
|
||||
},
|
||||
{
|
||||
"key": "shift-k",
|
||||
"command": "editor.action.moveLinesUpAction",
|
||||
"when": "vim.mode == 'VisualLine' && editorTextFocus"
|
||||
},
|
||||
{
|
||||
"key": "shift-j",
|
||||
"command": "editor.action.moveLinesDownAction",
|
||||
"when": "vim.mode == 'VisualLine' && editorTextFocus"
|
||||
},
|
||||
{
|
||||
"key": "shift-k",
|
||||
"command": "editor.action.showHover",
|
||||
"when": "vim.mode == 'Normal' && editorTextFocus"
|
||||
},
|
||||
{
|
||||
"key": "space c r",
|
||||
"command": "editor.action.rename",
|
||||
"when": "vim.mode == 'Normal' && editorTextFocus"
|
||||
},
|
||||
{
|
||||
"key": "space c s",
|
||||
"command": "workbench.action.gotoSymbol",
|
||||
"when": "vim.mode == 'Normal' && editorTextFocus"
|
||||
},
|
||||
{
|
||||
"key": "space b d",
|
||||
"command": "workbench.action.closeActiveEditor",
|
||||
"when": "(vim.mode == 'Normal' && editorTextFocus) || !inputFocus"
|
||||
},
|
||||
{
|
||||
"key": "space b o",
|
||||
"command": "workbench.action.closeOtherEditors",
|
||||
"when": "(vim.mode == 'Normal' && editorTextFocus) || !inputFocus"
|
||||
},
|
||||
{
|
||||
"key": "space space",
|
||||
"command": "workbench.action.quickOpen",
|
||||
"when": "vim.mode == 'Normal' && (editorTextFocus || !inputFocus)"
|
||||
},
|
||||
{
|
||||
"key": "space g d",
|
||||
"command": "editor.action.revealDefinition",
|
||||
"when": "vim.mode == 'Normal' && editorTextFocus"
|
||||
},
|
||||
{
|
||||
"key": "space g r",
|
||||
"command": "editor.action.goToReferences",
|
||||
"when": "vim.mode == 'Normal' && editorTextFocus"
|
||||
},
|
||||
{
|
||||
"key": "space g i",
|
||||
"command": "editor.action.goToImplementation",
|
||||
"when": "vim.mode == 'Normal' && editorTextFocus"
|
||||
},
|
||||
{
|
||||
"key": "space s g",
|
||||
"command": "workbench.action.findInFiles",
|
||||
"when": "vim.mode == 'Normal' && (editorTextFocus || !inputFocus)"
|
||||
},
|
||||
{
|
||||
"key": "space g g",
|
||||
"command": "runCommands",
|
||||
"when": "vim.mode == 'Normal' && (editorTextFocus || !inputFocus)",
|
||||
"args": {
|
||||
"commands": ["workbench.view.scm", "workbench.scm.focus"]
|
||||
}
|
||||
},
|
||||
{
|
||||
"key": "ctrl-n",
|
||||
"command": "editor.action.addSelectionToNextFindMatch",
|
||||
"when": "(vim.mode == 'Normal' || vim.mode == 'Visual') && (editorTextFocus || !inputFocus)"
|
||||
},
|
||||
{
|
||||
"key": "ctrl-n",
|
||||
"command": "workbench.action.toggleSidebarVisibility",
|
||||
"when": "vim.mode == 'Normal' && (editorTextFocus || !inputFocus)"
|
||||
},
|
||||
{
|
||||
"key": "space f s",
|
||||
"command": "workbench.action.findInFiles",
|
||||
"when": "vim.mode == 'Normal' && (editorTextFocus || !inputFocus)"
|
||||
},
|
||||
{
|
||||
"key": "n",
|
||||
"command": "search.action.focusNextSearchResult",
|
||||
"when": "vim.mode == 'Normal' && (editorTextFocus || !inputFocus)"
|
||||
},
|
||||
{
|
||||
"key": "shift-n",
|
||||
"command": "search.action.focusPreviousSearchResult",
|
||||
"when": "vim.mode == 'Normal' && (editorTextFocus || !inputFocus)"
|
||||
},
|
||||
{
|
||||
"key": "ctrl-w h",
|
||||
"command": "workbench.action.navigateLeft",
|
||||
@@ -171,51 +67,39 @@
|
||||
"when": "vim.mode == 'Normal' && (editorTextFocus || !inputFocus)"
|
||||
},
|
||||
{
|
||||
"key": "r",
|
||||
"key": "space r",
|
||||
"command": "renameFile",
|
||||
"when": "filesExplorerFocus && foldersViewVisible && !explorerResourceIsRoot && !explorerResourceReadonly && !inputFocus"
|
||||
"when": "vim.mode == 'Normal' && filesExplorerFocus && !inputFocus"
|
||||
},
|
||||
{
|
||||
"key": "x",
|
||||
"key": "space x",
|
||||
"command": "filesExplorer.cut",
|
||||
"when": "filesExplorerFocus && foldersViewVisible && !explorerResourceIsRoot && !explorerResourceReadonly && !inputFocus"
|
||||
"when": "vim.mode == 'Normal' && filesExplorerFocus && !inputFocus"
|
||||
},
|
||||
{
|
||||
"key": "d",
|
||||
"key": "space d",
|
||||
"command": "deleteFile",
|
||||
"when": "filesExplorerFocus && foldersViewVisible && !explorerResourceIsRoot && !explorerResourceReadonly && !inputFocus"
|
||||
"when": "vim.mode == 'Normal' && filesExplorerFocus && !inputFocus"
|
||||
},
|
||||
{
|
||||
"key": "a",
|
||||
"key": "space a",
|
||||
"command": "explorer.newFile",
|
||||
"when": "filesExplorerFocus && foldersViewVisible && !explorerResourceIsRoot && !explorerResourceReadonly && !inputFocus"
|
||||
"when": "vim.mode == 'Normal' && filesExplorerFocus && !inputFocus"
|
||||
},
|
||||
{
|
||||
"key": "s",
|
||||
"key": "space s",
|
||||
"command": "explorer.openToSide",
|
||||
"when": "filesExplorerFocus && foldersViewVisible && !explorerResourceIsRoot && !explorerResourceReadonly && !inputFocus"
|
||||
},
|
||||
{
|
||||
"key": "shift-s",
|
||||
"command": "runCommands",
|
||||
"when": "filesExplorerFocus && foldersViewVisible && !explorerResourceIsRoot && !explorerResourceReadonly && !inputFocus",
|
||||
"args": {
|
||||
"commands": [
|
||||
"workbench.action.splitEditorDown",
|
||||
"explorer.openAndPassFocus",
|
||||
"workbench.action.closeOtherEditors"
|
||||
]
|
||||
}
|
||||
"when": "vim.mode == 'Normal' && filesExplorerFocus && !inputFocus"
|
||||
},
|
||||
{
|
||||
"key": "enter",
|
||||
"command": "explorer.openAndPassFocus",
|
||||
"when": "filesExplorerFocus && foldersViewVisible && !explorerResourceIsRoot && !explorerResourceIsFolder && !inputFocus"
|
||||
"when": "filesExplorerFocus && !explorerResourceIsFolder && !inputFocus"
|
||||
},
|
||||
{
|
||||
"key": "enter",
|
||||
"command": "list.toggleExpand",
|
||||
"when": "filesExplorerFocus && foldersViewVisible && !explorerResourceIsRoot && explorerResourceIsFolder && !inputFocus"
|
||||
"when": "filesExplorerFocus && explorerResourceIsFolder && !inputFocus"
|
||||
},
|
||||
{
|
||||
"key": "space d a",
|
||||
@@ -227,6 +111,18 @@
|
||||
"command": "workbench.action.debug.stop",
|
||||
"when": "vim.mode == 'Normal' && editorTextFocus && inDebugMode && !focusedSessionIsAttached"
|
||||
},
|
||||
{
|
||||
"key": "space shift-s",
|
||||
"command": "runCommands",
|
||||
"when": "vim.mode == 'Normal' && filesExplorerFocus && !inputFocus",
|
||||
"args": {
|
||||
"commands": [
|
||||
"workbench.action.splitEditorDown",
|
||||
"explorer.openAndPassFocus",
|
||||
"workbench.action.closeOtherEditors"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"key": "space d o",
|
||||
"command": "workbench.action.debug.stepOver",
|
||||
@@ -247,11 +143,6 @@
|
||||
"command": "workbench.action.debug.continue",
|
||||
"when": "vim.mode == 'Normal' && (editorTextFocus || !inputFocus) && inDebugMode && debugState == 'stopped'"
|
||||
},
|
||||
{
|
||||
"key": "space u",
|
||||
"command": "editor.action.selectAll",
|
||||
"when": "vim.mode == 'Normal' && (editorTextFocus || !inputFocus)"
|
||||
},
|
||||
{
|
||||
"key": "space w",
|
||||
"command": "workbench.action.files.save",
|
||||
@@ -267,21 +158,6 @@
|
||||
"command": "workbench.action.closeAllEditors",
|
||||
"when": "vim.mode == 'Normal' && (editorTextFocus || !inputFocus)"
|
||||
},
|
||||
{
|
||||
"key": "y",
|
||||
"command": "editor.action.clipboardCopyAction",
|
||||
"when": "vim.mode == 'Normal' && (editorTextFocus || !inputFocus)"
|
||||
},
|
||||
{
|
||||
"key": "d d",
|
||||
"command": "editor.action.deleteLines",
|
||||
"when": "vim.mode == 'Normal' && (editorTextFocus || !inputFocus)"
|
||||
},
|
||||
{
|
||||
"key": "p",
|
||||
"command": "editor.action.clipboardPasteAction",
|
||||
"when": "vim.mode == 'Normal' && (editorTextFocus || !inputFocus)"
|
||||
},
|
||||
{
|
||||
"key": "ctrl-e",
|
||||
"command": "editorScroll",
|
||||
@@ -296,18 +172,18 @@
|
||||
},
|
||||
{
|
||||
"key": "space n t",
|
||||
"command": "workbench.files.action.showActiveFileInExplorer",
|
||||
"command": "workbench.view.explorer",
|
||||
"when": "vim.mode == 'Normal' && (editorTextFocus || !inputFocus)"
|
||||
},
|
||||
{
|
||||
"key": "o",
|
||||
"key": "space o",
|
||||
"command": "workbench.action.splitEditorRight",
|
||||
"when": "filesExplorerFocus && foldersViewVisible && !explorerResourceIsRoot && !inputFocus"
|
||||
"when": "vim.mode == 'Normal' && filesExplorerFocus && !inputFocus"
|
||||
},
|
||||
{
|
||||
"key": "i",
|
||||
"key": "space i",
|
||||
"command": "workbench.action.splitEditorDown",
|
||||
"when": "filesExplorerFocus && foldersViewVisible && !explorerResourceIsRoot && !inputFocus"
|
||||
"when": "vim.mode == 'Normal' && filesExplorerFocus && !inputFocus"
|
||||
},
|
||||
{
|
||||
"key": "ctrl-p",
|
||||
|
||||
@@ -1,296 +0,0 @@
|
||||
gui:
|
||||
authorColors: {}
|
||||
branchColors: {}
|
||||
branchColorPatterns: {}
|
||||
scrollHeight: 2
|
||||
scrollPastBottom: true
|
||||
scrollOffMargin: 2
|
||||
scrollOffBehavior: margin
|
||||
mouseEvents: true
|
||||
skipDiscardChangeWarning: false
|
||||
skipStashWarning: false
|
||||
skipNoStagedFilesWarning: false
|
||||
skipRewordInEditorWarning: false
|
||||
sidePanelWidth: 0.3333
|
||||
expandFocusedSidePanel: false
|
||||
expandedSidePanelWeight: 2
|
||||
mainPanelSplitMode: flexible
|
||||
enlargedSideViewLocation: left
|
||||
wrapLinesInStagingView: true
|
||||
language: auto
|
||||
timeFormat: 02 Jan 06
|
||||
shortTimeFormat: 3:04PM
|
||||
theme:
|
||||
activeBorderColor:
|
||||
- green
|
||||
- bold
|
||||
inactiveBorderColor:
|
||||
- default
|
||||
searchingActiveBorderColor:
|
||||
- cyan
|
||||
- bold
|
||||
optionsTextColor:
|
||||
- blue
|
||||
selectedLineBgColor:
|
||||
- blue
|
||||
inactiveViewSelectedLineBgColor:
|
||||
- bold
|
||||
cherryPickedCommitFgColor:
|
||||
- blue
|
||||
cherryPickedCommitBgColor:
|
||||
- cyan
|
||||
markedBaseCommitFgColor:
|
||||
- blue
|
||||
markedBaseCommitBgColor:
|
||||
- yellow
|
||||
unstagedChangesColor:
|
||||
- red
|
||||
defaultFgColor:
|
||||
- default
|
||||
commitLength:
|
||||
show: true
|
||||
showListFooter: true
|
||||
showFileTree: true
|
||||
showNumstatInFilesView: false
|
||||
showRandomTip: true
|
||||
showCommandLog: true
|
||||
showBottomLine: true
|
||||
showPanelJumps: true
|
||||
showIcons: false
|
||||
nerdFontsVersion: ""
|
||||
showFileIcons: true
|
||||
commitAuthorShortLength: 2
|
||||
commitAuthorLongLength: 17
|
||||
commitHashLength: 8
|
||||
showBranchCommitHash: false
|
||||
showDivergenceFromBaseBranch: none
|
||||
commandLogSize: 8
|
||||
splitDiff: auto
|
||||
screenMode: normal
|
||||
border: rounded
|
||||
animateExplosion: true
|
||||
portraitMode: auto
|
||||
filterMode: substring
|
||||
spinner:
|
||||
frames:
|
||||
- '|'
|
||||
- /
|
||||
- '-'
|
||||
- \
|
||||
rate: 50
|
||||
statusPanelView: dashboard
|
||||
switchToFilesAfterStashPop: true
|
||||
switchToFilesAfterStashApply: true
|
||||
switchTabsWithPanelJumpKeys: false
|
||||
git:
|
||||
paging:
|
||||
colorArg: always
|
||||
pager: ""
|
||||
useConfig: false
|
||||
externalDiffCommand: ""
|
||||
commit:
|
||||
signOff: false
|
||||
autoWrapCommitMessage: true
|
||||
autoWrapWidth: 72
|
||||
merging:
|
||||
manualCommit: false
|
||||
args: ""
|
||||
squashMergeMessage: Squash merge {{selectedRef}} into {{currentBranch}}
|
||||
mainBranches:
|
||||
- master
|
||||
- main
|
||||
skipHookPrefix: WIP
|
||||
autoFetch: true
|
||||
autoRefresh: true
|
||||
fetchAll: true
|
||||
autoStageResolvedConflicts: true
|
||||
branchLogCmd: git log --graph --color=always --abbrev-commit --decorate --date=relative --pretty=medium {{branchName}} --
|
||||
allBranchesLogCmd: git log --graph --all --color=always --abbrev-commit --decorate --date=relative --pretty=medium
|
||||
allBranchesLogCmds: []
|
||||
overrideGpg: false
|
||||
disableForcePushing: false
|
||||
commitPrefix: null
|
||||
commitPrefixes: {}
|
||||
branchPrefix: ""
|
||||
parseEmoji: false
|
||||
log:
|
||||
order: topo-order
|
||||
showGraph: always
|
||||
showWholeGraph: false
|
||||
truncateCopiedCommitHashesTo: 12
|
||||
update:
|
||||
method: prompt
|
||||
days: 14
|
||||
refresher:
|
||||
refreshInterval: 10
|
||||
fetchInterval: 60
|
||||
confirmOnQuit: false
|
||||
quitOnTopLevelReturn: false
|
||||
disableStartupPopups: false
|
||||
customCommands: []
|
||||
services: {}
|
||||
notARepository: prompt
|
||||
promptToReturnFromSubprocess: true
|
||||
keybinding:
|
||||
universal:
|
||||
quit: q
|
||||
quit-alt1: <c-c>
|
||||
return: <esc>
|
||||
quitWithoutChangingDirectory: Q
|
||||
togglePanel: <tab>
|
||||
prevItem: <up>
|
||||
nextItem: <down>
|
||||
prevItem-alt: k
|
||||
nextItem-alt: j
|
||||
prevPage: ','
|
||||
nextPage: .
|
||||
scrollLeft: H
|
||||
scrollRight: L
|
||||
gotoTop: <
|
||||
gotoBottom: '>'
|
||||
toggleRangeSelect: v
|
||||
rangeSelectDown: <s-down>
|
||||
rangeSelectUp: <s-up>
|
||||
prevBlock: <left>
|
||||
nextBlock: <right>
|
||||
prevBlock-alt: h
|
||||
nextBlock-alt: l
|
||||
nextBlock-alt2: <tab>
|
||||
prevBlock-alt2: <backtab>
|
||||
jumpToBlock:
|
||||
- "1"
|
||||
- "2"
|
||||
- "3"
|
||||
- "4"
|
||||
- "5"
|
||||
nextMatch: "n"
|
||||
prevMatch: "N"
|
||||
startSearch: /
|
||||
optionMenu: <disabled>
|
||||
optionMenu-alt1: '?'
|
||||
select: <space>
|
||||
goInto: <enter>
|
||||
confirm: <enter>
|
||||
confirmInEditor: <a-enter>
|
||||
remove: d
|
||||
new: "n"
|
||||
edit: e
|
||||
openFile: o
|
||||
scrollUpMain: <pgup>
|
||||
scrollDownMain: <pgdown>
|
||||
scrollUpMain-alt1: K
|
||||
scrollDownMain-alt1: J
|
||||
scrollUpMain-alt2: <c-u>
|
||||
scrollDownMain-alt2: <c-d>
|
||||
executeShellCommand: ':'
|
||||
createRebaseOptionsMenu: m
|
||||
pushFiles: P
|
||||
pullFiles: p
|
||||
refresh: R
|
||||
createPatchOptionsMenu: <c-p>
|
||||
nextTab: ']'
|
||||
prevTab: '['
|
||||
nextScreenMode: +
|
||||
prevScreenMode: _
|
||||
undo: z
|
||||
redo: <c-z>
|
||||
filteringMenu: <c-s>
|
||||
diffingMenu: W
|
||||
diffingMenu-alt: <c-e>
|
||||
copyToClipboard: <c-o>
|
||||
openRecentRepos: <c-r>
|
||||
submitEditorText: <enter>
|
||||
extrasMenu: '@'
|
||||
toggleWhitespaceInDiffView: <c-w>
|
||||
increaseContextInDiffView: '}'
|
||||
decreaseContextInDiffView: '{'
|
||||
increaseRenameSimilarityThreshold: )
|
||||
decreaseRenameSimilarityThreshold: (
|
||||
openDiffTool: <c-t>
|
||||
status:
|
||||
checkForUpdate: u
|
||||
recentRepos: <enter>
|
||||
allBranchesLogGraph: a
|
||||
files:
|
||||
commitChanges: c
|
||||
commitChangesWithoutHook: w
|
||||
amendLastCommit: A
|
||||
commitChangesWithEditor: C
|
||||
findBaseCommitForFixup: <c-f>
|
||||
confirmDiscard: x
|
||||
ignoreFile: i
|
||||
refreshFiles: r
|
||||
stashAllChanges: s
|
||||
viewStashOptions: S
|
||||
toggleStagedAll: a
|
||||
viewResetOptions: D
|
||||
fetch: f
|
||||
toggleTreeView: '`'
|
||||
openMergeTool: M
|
||||
openStatusFilter: <c-b>
|
||||
copyFileInfoToClipboard: "y"
|
||||
collapseAll: '-'
|
||||
expandAll: =
|
||||
branches:
|
||||
createPullRequest: o
|
||||
viewPullRequestOptions: O
|
||||
copyPullRequestURL: <c-y>
|
||||
checkoutBranchByName: c
|
||||
forceCheckoutBranch: F
|
||||
rebaseBranch: r
|
||||
renameBranch: R
|
||||
mergeIntoCurrentBranch: M
|
||||
viewGitFlowOptions: i
|
||||
fastForward: f
|
||||
createTag: T
|
||||
pushTag: P
|
||||
setUpstream: u
|
||||
fetchRemote: f
|
||||
sortOrder: s
|
||||
worktrees:
|
||||
viewWorktreeOptions: w
|
||||
commits:
|
||||
squashDown: s
|
||||
renameCommit: r
|
||||
renameCommitWithEditor: R
|
||||
viewResetOptions: g
|
||||
markCommitAsFixup: f
|
||||
createFixupCommit: F
|
||||
squashAboveCommits: S
|
||||
moveDownCommit: <c-j>
|
||||
moveUpCommit: <c-k>
|
||||
amendToCommit: A
|
||||
resetCommitAuthor: a
|
||||
pickCommit: p
|
||||
revertCommit: t
|
||||
cherryPickCopy: C
|
||||
pasteCommits: V
|
||||
markCommitAsBaseForRebase: B
|
||||
tagCommit: T
|
||||
checkoutCommit: <space>
|
||||
resetCherryPick: <c-R>
|
||||
copyCommitAttributeToClipboard: "y"
|
||||
openLogMenu: <c-l>
|
||||
openInBrowser: o
|
||||
viewBisectOptions: b
|
||||
startInteractiveRebase: i
|
||||
amendAttribute:
|
||||
resetAuthor: a
|
||||
setAuthor: A
|
||||
addCoAuthor: c
|
||||
stash:
|
||||
popStash: g
|
||||
renameStash: r
|
||||
commitFiles:
|
||||
checkoutCommitFile: c
|
||||
main:
|
||||
toggleSelectHunk: a
|
||||
pickBothHunks: b
|
||||
editSelectHunk: E
|
||||
submodules:
|
||||
init: i
|
||||
update: u
|
||||
bulkMenu: b
|
||||
commitMessage:
|
||||
commitMenu: <c-o>
|
||||
|
||||
313
lua/cargdev/core/function/notification_manager.lua
Normal file
313
lua/cargdev/core/function/notification_manager.lua
Normal file
@@ -0,0 +1,313 @@
|
||||
-- Custom notification manager to handle overlapping and improve UX
|
||||
local M = {}
|
||||
|
||||
-- Track active notifications to prevent overlapping
|
||||
local active_notifications = {}
|
||||
local notification_queue = {}
|
||||
|
||||
-- Function to show a notification without overlapping
|
||||
function M.show_notification(message, level, opts)
|
||||
level = level or vim.log.levels.INFO
|
||||
opts = opts or {}
|
||||
|
||||
-- Default options
|
||||
local default_opts = {
|
||||
timeout = 3000,
|
||||
title = "CarGDev Neovim",
|
||||
render = "minimal",
|
||||
stages = "fade_in_slide_out",
|
||||
position = "top_right",
|
||||
max_width = 50,
|
||||
max_height = 8,
|
||||
background_colour = "#000000",
|
||||
border_style = "rounded",
|
||||
}
|
||||
|
||||
-- Merge options
|
||||
for k, v in pairs(default_opts) do
|
||||
if opts[k] == nil then
|
||||
opts[k] = v
|
||||
end
|
||||
end
|
||||
|
||||
-- Check if we're in alpha dashboard
|
||||
local current_buf = vim.api.nvim_get_current_buf()
|
||||
local current_ft = vim.api.nvim_buf_get_option(current_buf, "filetype")
|
||||
|
||||
if current_ft == "alpha" then
|
||||
-- If in dashboard, use a different approach
|
||||
M.show_dashboard_notification(message, level, opts)
|
||||
return
|
||||
end
|
||||
|
||||
-- Use nvim-notify if available
|
||||
local notify_available = pcall(require, "notify")
|
||||
if notify_available then
|
||||
local notify = require("notify")
|
||||
|
||||
-- Position notification to avoid overlapping
|
||||
opts.on_open = function(win)
|
||||
-- Calculate position to avoid overlapping with other notifications
|
||||
local row = 2
|
||||
local col = vim.o.columns - 60
|
||||
|
||||
-- Adjust position if there are other notifications
|
||||
for _, notif in ipairs(active_notifications) do
|
||||
if notif.win and vim.api.nvim_win_is_valid(notif.win) then
|
||||
row = row + 10 -- Stack notifications vertically
|
||||
end
|
||||
end
|
||||
|
||||
-- Ensure notification doesn't go off-screen
|
||||
if row > vim.o.lines - 15 then
|
||||
row = 2
|
||||
col = col - 20
|
||||
end
|
||||
|
||||
vim.api.nvim_win_set_config(win, {
|
||||
row = row,
|
||||
col = col,
|
||||
relative = "editor",
|
||||
width = opts.max_width,
|
||||
height = opts.max_height,
|
||||
})
|
||||
|
||||
-- Track this notification
|
||||
table.insert(active_notifications, {
|
||||
win = win,
|
||||
message = message,
|
||||
timestamp = vim.loop.now(),
|
||||
})
|
||||
end
|
||||
|
||||
opts.on_close = function(win)
|
||||
-- Remove from active notifications
|
||||
for i, notif in ipairs(active_notifications) do
|
||||
if notif.win == win then
|
||||
table.remove(active_notifications, i)
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- Show notification
|
||||
local notification_id = notify(message, level, opts)
|
||||
return notification_id
|
||||
else
|
||||
-- Fallback to echo instead of vim.notify to avoid circular dependency
|
||||
local icon = "💬"
|
||||
if level == vim.log.levels.ERROR then
|
||||
icon = "❌"
|
||||
elseif level == vim.log.levels.WARN then
|
||||
icon = "⚠️"
|
||||
elseif level == vim.log.levels.INFO then
|
||||
icon = "ℹ️"
|
||||
end
|
||||
|
||||
-- Use echo for fallback notifications
|
||||
vim.cmd("echo '" .. icon .. " " .. message .. "'")
|
||||
|
||||
-- Clear message after a delay
|
||||
vim.defer_fn(function()
|
||||
vim.cmd("echo ''")
|
||||
end, opts.timeout or 3000)
|
||||
end
|
||||
end
|
||||
|
||||
-- Function to show notifications specifically for dashboard
|
||||
function M.show_dashboard_notification(message, level, opts)
|
||||
-- In dashboard, show minimal notifications
|
||||
local icon = "💬"
|
||||
if level == vim.log.levels.ERROR then
|
||||
icon = "❌"
|
||||
elseif level == vim.log.levels.WARN then
|
||||
icon = "⚠️"
|
||||
elseif level == vim.log.levels.INFO then
|
||||
icon = "ℹ️"
|
||||
end
|
||||
|
||||
-- Show message in status line or use echo
|
||||
local short_message = message:sub(1, 50)
|
||||
if #message > 50 then
|
||||
short_message = short_message .. "..."
|
||||
end
|
||||
|
||||
-- Use echo for dashboard notifications to avoid overlapping
|
||||
vim.cmd("echo '" .. icon .. " " .. short_message .. "'")
|
||||
|
||||
-- Clear message after a delay
|
||||
vim.defer_fn(function()
|
||||
vim.cmd("echo ''")
|
||||
end, opts.timeout or 3000)
|
||||
end
|
||||
|
||||
-- Function to clear all notifications
|
||||
function M.clear_all_notifications()
|
||||
for _, notif in ipairs(active_notifications) do
|
||||
if notif.win and vim.api.nvim_win_is_valid(notif.win) then
|
||||
vim.api.nvim_win_close(notif.win, true)
|
||||
end
|
||||
end
|
||||
active_notifications = {}
|
||||
end
|
||||
|
||||
-- Function to show performance notification
|
||||
function M.show_performance_notification(message, level)
|
||||
M.show_notification("📊 " .. message, level, {
|
||||
title = "Performance Monitor",
|
||||
timeout = 4000,
|
||||
position = "top_right",
|
||||
})
|
||||
end
|
||||
|
||||
-- Function to show LSP notification
|
||||
function M.show_lsp_notification(message, level)
|
||||
M.show_notification("🔧 " .. message, level, {
|
||||
title = "LSP Status",
|
||||
timeout = 3000,
|
||||
position = "top_right",
|
||||
})
|
||||
end
|
||||
|
||||
-- Function to show file operation notification
|
||||
function M.show_file_notification(message, level)
|
||||
M.show_notification("📁 " .. message, level, {
|
||||
title = "File Operation",
|
||||
timeout = 2500,
|
||||
position = "top_right",
|
||||
})
|
||||
end
|
||||
|
||||
-- Function to show plugin notification
|
||||
function M.show_plugin_notification(message, level)
|
||||
M.show_notification("🦥 " .. message, level, {
|
||||
title = "Plugin Manager",
|
||||
timeout = 3000,
|
||||
position = "top_right",
|
||||
})
|
||||
end
|
||||
|
||||
-- Function to show startup notification
|
||||
function M.show_startup_notification(message, level)
|
||||
M.show_notification("🚀 " .. message, level, {
|
||||
title = "Startup",
|
||||
timeout = 2000,
|
||||
position = "top_right",
|
||||
})
|
||||
end
|
||||
|
||||
-- Function to handle startup messages aggressively
|
||||
function M.handle_startup_messages()
|
||||
-- Clear any existing messages immediately
|
||||
vim.cmd("redraw!")
|
||||
vim.cmd("echo ''")
|
||||
|
||||
-- Suppress all startup messages
|
||||
vim.opt.shortmess = vim.opt.shortmess + "I" -- No intro message
|
||||
vim.opt.shortmess = vim.opt.shortmess + "c" -- No completion messages
|
||||
vim.opt.shortmess = vim.opt.shortmess + "F" -- No file info message
|
||||
vim.opt.shortmess = vim.opt.shortmess + "W" -- No "written" message
|
||||
vim.opt.shortmess = vim.opt.shortmess + "A" -- No attention message
|
||||
vim.opt.shortmess = vim.opt.shortmess + "o" -- No overwrite messages
|
||||
vim.opt.shortmess = vim.opt.shortmess + "t" -- No truncation messages
|
||||
vim.opt.shortmess = vim.opt.shortmess + "T" -- No truncation messages
|
||||
vim.opt.shortmess = vim.opt.shortmess + "f" -- No file info messages
|
||||
vim.opt.shortmess = vim.opt.shortmess + "i" -- No intro messages
|
||||
vim.opt.shortmess = vim.opt.shortmess + "l" -- No line number messages
|
||||
vim.opt.shortmess = vim.opt.shortmess + "m" -- No modification messages
|
||||
vim.opt.shortmess = vim.opt.shortmess + "n" -- No line number messages
|
||||
vim.opt.shortmess = vim.opt.shortmess + "r" -- No read messages
|
||||
vim.opt.shortmess = vim.opt.shortmess + "s" -- No search messages
|
||||
vim.opt.shortmess = vim.opt.shortmess + "x" -- No truncation messages
|
||||
vim.opt.shortmess = vim.opt.shortmess + "O" -- No overwrite messages
|
||||
|
||||
-- Disable command line messages
|
||||
vim.opt.cmdheight = 0
|
||||
vim.opt.showmode = false
|
||||
|
||||
-- Clear any existing messages
|
||||
vim.cmd("echo ''")
|
||||
|
||||
-- Force clear any pending messages
|
||||
vim.defer_fn(function()
|
||||
vim.cmd("redraw!")
|
||||
vim.cmd("echo ''")
|
||||
end, 100)
|
||||
end
|
||||
|
||||
-- Function to eliminate "Press ENTER" prompts completely
|
||||
function M.eliminate_enter_prompts()
|
||||
-- Override the message display to prevent "Press ENTER" prompts
|
||||
local original_echo = vim.cmd.echo
|
||||
vim.cmd.echo = function(msg)
|
||||
local msg_str = tostring(msg)
|
||||
-- Block any messages that might cause "Press ENTER" prompts
|
||||
if msg_str:match("Press ENTER") or
|
||||
msg_str:match("lazyredraw") or
|
||||
msg_str:match("You have enabled") or
|
||||
msg_str:match("This is only meant") or
|
||||
msg_str:match("You'll experience issues") then
|
||||
return -- Don't show these messages
|
||||
end
|
||||
-- Allow other messages
|
||||
original_echo(msg)
|
||||
end
|
||||
|
||||
-- Create autocmd to handle any remaining prompts
|
||||
vim.api.nvim_create_autocmd("VimEnter", {
|
||||
callback = function()
|
||||
-- Clear any startup messages immediately
|
||||
vim.cmd("redraw!")
|
||||
vim.cmd("echo ''")
|
||||
|
||||
-- Force clear any pending messages multiple times
|
||||
for i = 1, 5 do
|
||||
vim.defer_fn(function()
|
||||
vim.cmd("redraw!")
|
||||
vim.cmd("echo ''")
|
||||
end, i * 50)
|
||||
end
|
||||
end,
|
||||
once = true,
|
||||
})
|
||||
|
||||
-- Create autocmd to handle message events - use valid events
|
||||
vim.api.nvim_create_autocmd("BufReadPost", {
|
||||
callback = function()
|
||||
-- Clear messages that might cause prompts
|
||||
vim.cmd("redraw!")
|
||||
end,
|
||||
})
|
||||
end
|
||||
|
||||
-- Function to setup notification system
|
||||
function M.setup()
|
||||
-- Create autocmd to handle startup messages
|
||||
vim.api.nvim_create_autocmd("VimEnter", {
|
||||
callback = function()
|
||||
M.handle_startup_messages()
|
||||
end,
|
||||
once = true,
|
||||
})
|
||||
|
||||
-- Create autocmd to handle alpha dashboard
|
||||
vim.api.nvim_create_autocmd("FileType", {
|
||||
pattern = "alpha",
|
||||
callback = function()
|
||||
M.handle_startup_messages()
|
||||
end,
|
||||
})
|
||||
|
||||
-- Eliminate "Press ENTER" prompts
|
||||
M.eliminate_enter_prompts()
|
||||
|
||||
-- Don't override vim.notify here to avoid circular dependency
|
||||
-- Let the system handle notifications naturally
|
||||
|
||||
print("Notification manager initialized")
|
||||
end
|
||||
|
||||
-- Initialize notification manager
|
||||
M.setup()
|
||||
|
||||
return M
|
||||
@@ -1,24 +1,59 @@
|
||||
-- Load compatibility layer first
|
||||
|
||||
-- =============================================================================
|
||||
-- cargdev/core/init.lua
|
||||
-- Main core initialization for cargdev Neovim config
|
||||
-- =============================================================================
|
||||
|
||||
-- 0. Setup LuaRocks path for rest.nvim dependencies (Lua 5.1 - Neovim uses LuaJIT)
|
||||
local function setup_luarocks_path()
|
||||
local luarocks_path = vim.fn.system("luarocks path --lr-path --lua-version=5.1 --local"):gsub("\n", "")
|
||||
if luarocks_path and luarocks_path ~= "" then
|
||||
package.path = package.path .. ";" .. luarocks_path
|
||||
end
|
||||
end
|
||||
setup_luarocks_path()
|
||||
|
||||
-- 1. Compatibility Layer
|
||||
require("cargdev.core.compatibility").setup()
|
||||
|
||||
-- 2. Core Options and Keymaps
|
||||
require("cargdev.core.options")
|
||||
require("cargdev.core.keymaps")
|
||||
|
||||
-- Load all Lua files inside `cargdev/core/function/`
|
||||
-- 3. Utility: Load all Lua files inside `cargdev/core/function/` AFTER plugins are loaded
|
||||
local function load_functions()
|
||||
local function_path = vim.fn.stdpath("config") .. "/lua/cargdev/core/function"
|
||||
local scan = vim.fn.globpath(function_path, "*.lua", false, true)
|
||||
|
||||
for _, file in ipairs(scan) do
|
||||
local module_name = "cargdev.core.function." .. file:match("([^/]+)%.lua$")
|
||||
local success, err = pcall(require, module_name)
|
||||
|
||||
if not success then
|
||||
vim.notify("Error loading function module: " .. module_name .. "\n" .. err, vim.log.levels.ERROR)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- 4. Fix: Force filetype detection on BufRead (fix for nvim-tree/plain text issue)
|
||||
vim.api.nvim_create_autocmd("BufRead", {
|
||||
pattern = "*",
|
||||
callback = function()
|
||||
vim.cmd("filetype detect")
|
||||
end,
|
||||
})
|
||||
|
||||
-- 5. Load functions immediately
|
||||
load_functions()
|
||||
|
||||
-- 6. Fallback: also try to load on VimEnter if LazyDone doesn't fire
|
||||
vim.api.nvim_create_autocmd("VimEnter", {
|
||||
callback = function()
|
||||
-- Wait a bit for plugins to load
|
||||
vim.defer_fn(function()
|
||||
load_functions()
|
||||
end, 200)
|
||||
end,
|
||||
once = true,
|
||||
})
|
||||
|
||||
--[[ vim.api.nvim_create_autocmd("BufReadPost", {
|
||||
once = true,
|
||||
@@ -27,4 +62,3 @@ end
|
||||
end
|
||||
})
|
||||
]]
|
||||
load_functions()
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
-- Copilot Chat keymaps
|
||||
local keymap = vim.keymap
|
||||
|
||||
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)" })
|
||||
keymap.set("n", "<leader>cp", ":Copilot panel<CR>", { desc = "Copilot: Open copilot panel" })
|
||||
keymap.set("n", "<leader>cd", ":Copilot disable<CR>", { desc = "Copilot: Disabled" })
|
||||
keymap.set("n", "<leader>cs", ":Copilot status<CR>", { desc = "Copilot: Status" })
|
||||
-- -- Copilot Chat keymaps
|
||||
-- local keymap = vim.keymap
|
||||
--
|
||||
-- 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)" })
|
||||
-- keymap.set("n", "<leader>cp", ":Copilot panel<CR>", { desc = "Copilot: Open copilot panel" })
|
||||
-- keymap.set("n", "<leader>cd", ":Copilot disable<CR>", { desc = "Copilot: Disabled" })
|
||||
-- keymap.set("n", "<leader>cs", ":Copilot status<CR>", { desc = "Copilot: Status" })
|
||||
|
||||
@@ -6,7 +6,7 @@ local fn = vim.fn
|
||||
local keymap = vim.keymap.set
|
||||
|
||||
if ok_dap and ok_dapui then
|
||||
keymap("n", "<leader>dc", dap.continue, { desc = "▶ Start Debugging" })
|
||||
keymap("n", "<leader>dcr", dap.continue, { desc = "▶ Start Debugging" })
|
||||
keymap("n", "<leader>do", dap.step_over, { desc = "⏭ Step Over" })
|
||||
keymap("n", "<leader>di", dap.step_into, { desc = "⤵ Step Into" })
|
||||
keymap("n", "<leader>dot", dap.step_out, { desc = "⤴ Step Out" })
|
||||
|
||||
@@ -1,115 +0,0 @@
|
||||
-- =============================================================================
|
||||
-- DATABASE KEYMAPS
|
||||
-- =============================================================================
|
||||
|
||||
local keymap = vim.keymap
|
||||
local opts = { noremap = true, silent = true }
|
||||
|
||||
-- =============================================================================
|
||||
-- GLOBAL DATABASE KEYMAPS
|
||||
-- =============================================================================
|
||||
|
||||
-- Open database interface
|
||||
keymap.set("n", "<leader>db", function()
|
||||
require("dbee").open()
|
||||
end, { desc = "Open Database Interface" })
|
||||
|
||||
-- Close database interface
|
||||
keymap.set("n", "<leader>dc", function()
|
||||
require("dbee").close()
|
||||
end, { desc = "Close Database Interface" })
|
||||
|
||||
-- Execute current query (when in database editor)
|
||||
keymap.set("n", "<leader>dq", function()
|
||||
require("dbee").api.ui.execute_query()
|
||||
end, { desc = "Execute Query" })
|
||||
|
||||
-- Store results to file
|
||||
keymap.set("n", "<leader>ds", function()
|
||||
require("dbee").store("csv", "file", { extra_arg = "~/query_results.csv" })
|
||||
end, { desc = "Store Results to File" })
|
||||
|
||||
-- Yank results to clipboard
|
||||
keymap.set("n", "<leader>dy", function()
|
||||
require("dbee").store("json", "yank", {})
|
||||
end, { desc = "Yank Results to Clipboard" })
|
||||
|
||||
-- =============================================================================
|
||||
-- NVIM-DBEE INTERNAL KEYMAPS
|
||||
-- =============================================================================
|
||||
|
||||
-- Set up nvim-dbee internal keymaps
|
||||
local function setup_dbee_keymaps()
|
||||
-- Drawer mappings (left panel)
|
||||
keymap.set("n", "<CR>", function()
|
||||
require("dbee").api.ui.open_connection()
|
||||
end, { buffer = true, desc = "Open Connection" })
|
||||
|
||||
keymap.set("n", "a", function()
|
||||
require("dbee").api.ui.add_connection()
|
||||
end, { buffer = true, desc = "Add Connection" })
|
||||
|
||||
keymap.set("n", "e", function()
|
||||
require("dbee").api.ui.edit_connection()
|
||||
end, { buffer = true, desc = "Edit Connection" })
|
||||
|
||||
keymap.set("n", "d", function()
|
||||
require("dbee").api.ui.delete_connection()
|
||||
end, { buffer = true, desc = "Delete Connection" })
|
||||
|
||||
keymap.set("n", "r", function()
|
||||
require("dbee").api.ui.refresh_connections()
|
||||
end, { buffer = true, desc = "Refresh Connections" })
|
||||
|
||||
-- Editor mappings (query editor)
|
||||
keymap.set("n", "BB", function()
|
||||
require("dbee").api.ui.execute_query()
|
||||
end, { buffer = true, desc = "Execute Query" })
|
||||
|
||||
keymap.set("n", "cc", function()
|
||||
require("dbee").api.ui.clear_results()
|
||||
end, { buffer = true, desc = "Clear Results" })
|
||||
|
||||
keymap.set("n", "ss", function()
|
||||
require("dbee").api.ui.save_scratchpad()
|
||||
end, { buffer = true, desc = "Save Scratchpad" })
|
||||
|
||||
-- Result mappings (results buffer)
|
||||
keymap.set("n", "L", function()
|
||||
require("dbee").api.ui.result_page_next()
|
||||
end, { buffer = true, desc = "Next Page" })
|
||||
|
||||
keymap.set("n", "H", function()
|
||||
require("dbee").api.ui.result_page_prev()
|
||||
end, { buffer = true, desc = "Previous Page" })
|
||||
|
||||
keymap.set("n", "F", function()
|
||||
require("dbee").api.ui.result_page_first()
|
||||
end, { buffer = true, desc = "First Page" })
|
||||
|
||||
keymap.set("n", "E", function()
|
||||
require("dbee").api.ui.result_page_last()
|
||||
end, { buffer = true, desc = "Last Page" })
|
||||
|
||||
keymap.set("n", "yaj", function()
|
||||
require("dbee").api.ui.yank_row_json()
|
||||
end, { buffer = true, desc = "Yank Row as JSON" })
|
||||
|
||||
keymap.set("n", "yac", function()
|
||||
require("dbee").api.ui.yank_row_csv()
|
||||
end, { buffer = true, desc = "Yank Row as CSV" })
|
||||
|
||||
keymap.set("n", "yaJ", function()
|
||||
require("dbee").api.ui.yank_all_json()
|
||||
end, { buffer = true, desc = "Yank All as JSON" })
|
||||
|
||||
keymap.set("n", "yaC", function()
|
||||
require("dbee").api.ui.yank_all_csv()
|
||||
end, { buffer = true, desc = "Yank All as CSV" })
|
||||
end
|
||||
|
||||
-- Apply dbee keymaps when dbee buffers are created
|
||||
vim.api.nvim_create_autocmd("FileType", {
|
||||
pattern = { "dbee-drawer", "dbee-editor", "dbee-result" },
|
||||
callback = setup_dbee_keymaps,
|
||||
})
|
||||
@@ -6,14 +6,111 @@ 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" })
|
||||
keymap.set("n", "<leader>Q", ":qa!<CR>", { desc = "Quit all" })
|
||||
|
||||
-- Put this in your init.lua
|
||||
local vault_path = vim.env.IDEA_DIR
|
||||
|
||||
|
||||
|
||||
local function follow_obsidian_link()
|
||||
-- Extract the full [[...]] link from the current line under/around the cursor
|
||||
local line = vim.api.nvim_get_current_line()
|
||||
local col = vim.fn.col('.')
|
||||
local start_idx, end_idx, raw
|
||||
-- Search for all [[...]] in the line, pick the one under/around the cursor
|
||||
local i = 1
|
||||
while true do
|
||||
local s, e = line:find('%[%[.-%]%]', i)
|
||||
if not s then break end
|
||||
if col >= s and col <= e + 1 then
|
||||
start_idx, end_idx = s, e
|
||||
break
|
||||
end
|
||||
i = e + 1
|
||||
end
|
||||
if not start_idx then
|
||||
vim.notify('No [[link]] under cursor', vim.log.levels.WARN)
|
||||
return
|
||||
end
|
||||
raw = line:sub(start_idx, end_idx)
|
||||
raw = raw:gsub('^!%[%[', '[[') -- strip leading ! from embeds
|
||||
local link = raw:gsub('%[%[', ''):gsub('%]%]', '')
|
||||
|
||||
-- split off alias (|) and heading (#) only after extracting the full link
|
||||
local alias
|
||||
local heading
|
||||
-- first, split off alias if present
|
||||
local pipe_idx = link:find("|", 1, true)
|
||||
if pipe_idx then
|
||||
alias = link:sub(pipe_idx + 1)
|
||||
link = link:sub(1, pipe_idx - 1)
|
||||
end
|
||||
-- then, split off heading if present
|
||||
local hash_idx = link:find("#", 1, true)
|
||||
if hash_idx then
|
||||
heading = link:sub(hash_idx + 1)
|
||||
link = link:sub(1, hash_idx - 1)
|
||||
end
|
||||
|
||||
-- normalize spaces
|
||||
link = link:gsub("\\ ", " "):gsub("^%s+", ""):gsub("%s+$", "")
|
||||
|
||||
local function goto_heading(h)
|
||||
if not h or h == "" then
|
||||
return
|
||||
end
|
||||
-- crude jump: search for markdown heading or block that contains it
|
||||
vim.cmd("keepjumps normal! gg")
|
||||
local pat = "^%s*#+%s*" .. vim.pesc(h)
|
||||
if vim.fn.search(pat) == 0 then
|
||||
-- fallback: plain search
|
||||
vim.fn.search(vim.pesc(h))
|
||||
end
|
||||
end
|
||||
|
||||
-- if link contains a '/', treat it as a relative path inside the vault
|
||||
if link:find("/") then
|
||||
local target = vault_path .. "/" .. link .. ".md"
|
||||
vim.cmd.edit(target)
|
||||
goto_heading(heading)
|
||||
return
|
||||
end
|
||||
|
||||
-- otherwise search recursively for basename match anywhere in the vault
|
||||
local pattern = "**/" .. link .. ".md"
|
||||
local matches = vim.fn.globpath(vault_path, pattern, false, true) -- list
|
||||
|
||||
if #matches == 1 then
|
||||
vim.cmd.edit(matches[1])
|
||||
goto_heading(heading)
|
||||
elseif #matches > 1 then
|
||||
vim.ui.select(matches, { prompt = "Multiple matches for " .. link .. ":" }, function(choice)
|
||||
if choice then
|
||||
vim.cmd.edit(choice)
|
||||
goto_heading(heading)
|
||||
end
|
||||
end)
|
||||
else
|
||||
-- not found: offer to create at vault root
|
||||
local target = vault_path .. "/" .. link .. ".md"
|
||||
vim.ui.input({ prompt = "Create " .. target .. " ? (y/N) " }, function(ans)
|
||||
if ans and ans:lower():sub(1, 1) == "y" then
|
||||
vim.cmd.edit(target)
|
||||
-- optional: insert a title
|
||||
if vim.fn.line("$") == 1 and vim.fn.getline(1) == "" then
|
||||
vim.api.nvim_buf_set_lines(0, 0, 0, false, { "# " .. (alias or link), "" })
|
||||
end
|
||||
goto_heading(heading)
|
||||
end
|
||||
end)
|
||||
end
|
||||
end
|
||||
|
||||
vim.keymap.set("n", "<leader>o", follow_obsidian_link, { noremap = true, silent = true })
|
||||
|
||||
@@ -3,7 +3,7 @@ local keymap = vim.keymap
|
||||
|
||||
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>coo", "<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)" })
|
||||
|
||||
@@ -5,8 +5,14 @@ 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" })
|
||||
keymap.set("n", "<leader>u", function()
|
||||
vim.cmd("normal! ggVG")
|
||||
end, { desc = "Select the whole file" })
|
||||
keymap.set("n", "<leader>4", function()
|
||||
-- Copy current line and paste below
|
||||
vim.cmd("normal! yy")
|
||||
vim.cmd("normal! p")
|
||||
end, { desc = "Copy the entire line and paste just below" })
|
||||
|
||||
-- file management
|
||||
keymap.set("n", "<leader>w", ":w<CR>", { desc = "Save the current file" })
|
||||
|
||||
@@ -21,7 +21,7 @@ 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>dcc", "<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" })
|
||||
@@ -49,8 +49,8 @@ keymap.set("n", "<leader>sr", "<cmd>SessionRestore<cr>", { desc = "Restore sessi
|
||||
-- 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" })
|
||||
-- Substitute (changed from <leader>s to <leader>sub to avoid conflicts)
|
||||
keymap.set("n", "<leader>sub", "<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" })
|
||||
|
||||
@@ -116,6 +116,19 @@ keymap.set("n", "gcA", "<cmd>lua require('Comment.api').insert_eol()<cr>", { des
|
||||
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" })
|
||||
|
||||
-- =============================================================================
|
||||
-- TELESCOPE KEYMAPS (Enhanced with safe file searching)
|
||||
-- =============================================================================
|
||||
|
||||
-- Safe file search (prevents LSP errors and image freezing)
|
||||
keymap.set("n", "<leader>ff", "<cmd>Telescope safe_files find_files<CR>", { desc = "Find files (safe)" })
|
||||
keymap.set("n", "<leader>fs", "<cmd>Telescope live_grep<CR>", { desc = "Live grep (safe)" })
|
||||
keymap.set("n", "<leader>fg", "<cmd>Telescope git_files<CR>", { desc = "Git files (safe)" })
|
||||
keymap.set("n", "<leader>ft", "<cmd>Telescope text_files find_files<CR>", { desc = "Text files only" })
|
||||
|
||||
-- Regular telescope (use with caution)
|
||||
keymap.set("n", "<leader>fF", "<cmd>Telescope find_files<CR>", { desc = "Find files (all)" })
|
||||
|
||||
-- =============================================================================
|
||||
-- DATABASE KEYMAPS (Temporarily disabled to prevent conflicts)
|
||||
-- =============================================================================
|
||||
@@ -192,4 +205,4 @@ keymap.set("n", "<leader>tC", "<cmd>set formatoptions-=c<cr>", { desc = "Disable
|
||||
-- Indent and wrap
|
||||
keymap.set("n", "<leader>ti", "<cmd>set breakindent!<cr>", { desc = "Toggle break indent" })
|
||||
keymap.set("n", "<leader>ts", "<cmd>set showbreak=↪ <cr>", { desc = "Show break indicator" })
|
||||
keymap.set("n", "<leader>tS", "<cmd>set showbreak=<cr>", { desc = "Hide break indicator" })
|
||||
keymap.set("n", "<leader>tS", "<cmd>set showbreak=<cr>", { desc = "Hide break indicator" })
|
||||
|
||||
@@ -31,15 +31,38 @@ opt.softtabstop = 2 -- Number of spaces for soft tabs
|
||||
opt.autoindent = true -- Auto indent
|
||||
opt.smartindent = true -- Smart indent
|
||||
|
||||
-- Performance
|
||||
opt.lazyredraw = false -- Don't redraw while executing macros
|
||||
opt.updatetime = 250 -- Faster completion
|
||||
opt.timeoutlen = 300 -- Faster key sequence completion
|
||||
-- Performance optimizations
|
||||
opt.updatetime = 100 -- Faster completion (reduced from 250)
|
||||
opt.timeoutlen = 200 -- Faster key sequence completion (reduced from 300)
|
||||
opt.redrawtime = 1500 -- Allow more time for loading syntax
|
||||
opt.synmaxcol = 240 -- Only highlight the first 240 columns
|
||||
opt.maxmempattern = 1000 -- Reduce memory for pattern matching
|
||||
opt.hidden = true -- Allow switching buffers without saving
|
||||
opt.scrolljump = 1 -- Minimal number of screen lines to scroll
|
||||
opt.scrolloff = 3 -- Keep 3 lines above/below cursor (reduced from 8)
|
||||
opt.sidescrolloff = 3 -- Keep 3 columns left/right of cursor (reduced from 8)
|
||||
|
||||
-- Syntax loading optimizations
|
||||
opt.syntax = "on" -- Enable syntax highlighting
|
||||
opt.synmaxcol = 200 -- Reduce syntax highlighting column limit
|
||||
opt.lazyredraw = false -- Don't use lazy redraw (can cause issues)
|
||||
opt.foldmethod = "syntax" -- Use syntax-based folding for better performance
|
||||
opt.foldlevel = 99 -- Don't fold by default
|
||||
|
||||
-- Filetype plugin optimizations
|
||||
opt.filetype = "on" -- Enable filetype detection
|
||||
opt.modeline = false -- Disable modeline for security and performance
|
||||
opt.modelines = 0 -- Disable modelines
|
||||
|
||||
-- Matchparen optimizations
|
||||
g.matchparen_timeout = 100 -- Reduce from default 300ms
|
||||
g.matchparen_insert_timeout = 50 -- Reduce from default 100ms
|
||||
g.matchparen_disable_cursor_hl = 0 -- Keep cursor highlighting but optimize
|
||||
|
||||
-- UI settings
|
||||
opt.number = true -- Show line numbers
|
||||
opt.relativenumber = true -- Show relative line numbers
|
||||
opt.cursorline = true -- Highlight current line
|
||||
opt.cursorline = false -- Disable cursor line highlighting for performance
|
||||
opt.cursorcolumn = false -- Don't highlight current column
|
||||
opt.signcolumn = "yes" -- Always show sign column
|
||||
|
||||
@@ -70,8 +93,6 @@ opt.formatoptions:append("n") -- Recognize numbered lists
|
||||
opt.formatoptions:append("j") -- Remove comment leader when joining lines
|
||||
|
||||
-- Scroll settings for wrapped text
|
||||
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
|
||||
|
||||
@@ -87,6 +108,7 @@ opt.swapfile = false -- Don't create swap files
|
||||
|
||||
-- Terminal
|
||||
opt.termguicolors = true -- Enable true color support
|
||||
opt.background = "dark" -- Set background to dark
|
||||
|
||||
-- File encoding
|
||||
opt.encoding = "utf-8" -- Set encoding to UTF-8
|
||||
@@ -103,16 +125,30 @@ opt.splitright = true -- Split right when creating vertical splits
|
||||
-- Conceal
|
||||
opt.conceallevel = 2 -- Conceal certain characters
|
||||
|
||||
-- Disable providers that cause warnings
|
||||
-- Provider configurations
|
||||
g.loaded_perl_provider = 0 -- Disable Perl provider
|
||||
g.loaded_ruby_provider = 0 -- Disable Ruby provider (optional)
|
||||
|
||||
-- Python provider configuration
|
||||
g.python3_host_prog = "/opt/homebrew/bin/python3.12" -- Explicit Python path
|
||||
|
||||
-- Clipboard provider optimization (macOS)
|
||||
g.clipboard = {
|
||||
name = 'pbcopy',
|
||||
copy = {
|
||||
['+'] = 'pbcopy',
|
||||
['*'] = 'pbcopy',
|
||||
},
|
||||
paste = {
|
||||
['+'] = 'pbpaste',
|
||||
['*'] = 'pbpaste',
|
||||
},
|
||||
cache_enabled = 1,
|
||||
}
|
||||
|
||||
-- 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")
|
||||
@@ -169,48 +205,37 @@ for _, plugin in pairs(disabled_built_ins) do
|
||||
end
|
||||
|
||||
-- =============================================================================
|
||||
-- AUTO WRAPPER AUTOCMDS
|
||||
-- OPTIMIZED AUTO WRAPPER AUTOCMDS
|
||||
-- =============================================================================
|
||||
|
||||
-- Set up auto-wrapping for different file types
|
||||
-- Consolidated auto-wrapping configuration
|
||||
vim.api.nvim_create_autocmd("FileType", {
|
||||
pattern = { "text", "markdown", "gitcommit", "mail" },
|
||||
pattern = "*",
|
||||
callback = function()
|
||||
vim.opt_local.textwidth = 80
|
||||
vim.opt_local.wrap = true
|
||||
vim.opt_local.linebreak = true
|
||||
vim.opt_local.formatoptions:append("t") -- Auto-wrap text
|
||||
end,
|
||||
})
|
||||
|
||||
-- Set up auto-wrapping for code files
|
||||
vim.api.nvim_create_autocmd("FileType", {
|
||||
pattern = { "lua", "javascript", "typescript", "python", "java", "cpp", "c", "rust", "go" },
|
||||
callback = function()
|
||||
vim.opt_local.textwidth = 100 -- Longer lines for code
|
||||
vim.opt_local.formatoptions:append("c") -- Auto-wrap comments
|
||||
vim.opt_local.formatoptions:append("r") -- Auto-wrap comments with leader
|
||||
vim.opt_local.formatoptions:append("o") -- Auto-wrap comments with 'o'
|
||||
vim.opt_local.formatoptions:append("q") -- Allow formatting of comments with 'gq'
|
||||
end,
|
||||
})
|
||||
|
||||
-- Set up auto-wrapping for documentation files
|
||||
vim.api.nvim_create_autocmd("FileType", {
|
||||
pattern = { "help", "man" },
|
||||
callback = function()
|
||||
vim.opt_local.textwidth = 78
|
||||
vim.opt_local.wrap = true
|
||||
vim.opt_local.linebreak = true
|
||||
vim.opt_local.formatoptions:append("t") -- Auto-wrap text
|
||||
end,
|
||||
})
|
||||
|
||||
-- Set up auto-wrapping for configuration files
|
||||
vim.api.nvim_create_autocmd("FileType", {
|
||||
pattern = { "conf", "config", "ini", "toml", "yaml", "json" },
|
||||
callback = function()
|
||||
vim.opt_local.textwidth = 80
|
||||
vim.opt_local.formatoptions:append("c") -- Auto-wrap comments
|
||||
local filetype = vim.bo.filetype
|
||||
local opt = vim.opt_local
|
||||
|
||||
-- Text/documentation files
|
||||
if vim.tbl_contains({ "text", "markdown", "gitcommit", "mail", "help", "man" }, filetype) then
|
||||
opt.textwidth = filetype == "help" or filetype == "man" and 78 or 80
|
||||
opt.wrap = true
|
||||
opt.linebreak = true
|
||||
opt.formatoptions:append("t") -- Auto-wrap text
|
||||
end
|
||||
|
||||
-- Code files
|
||||
if vim.tbl_contains({ "lua", "javascript", "typescript", "python", "java", "cpp", "c", "rust", "go" }, filetype) then
|
||||
opt.textwidth = 100 -- Longer lines for code
|
||||
opt.formatoptions:append("c") -- Auto-wrap comments
|
||||
opt.formatoptions:append("r") -- Auto-wrap comments with leader
|
||||
opt.formatoptions:append("o") -- Auto-wrap comments with 'o'
|
||||
opt.formatoptions:append("q") -- Allow formatting of comments with 'gq'
|
||||
end
|
||||
|
||||
-- Configuration files
|
||||
if vim.tbl_contains({ "conf", "config", "ini", "toml", "yaml", "json" }, filetype) then
|
||||
opt.textwidth = 80
|
||||
opt.formatoptions:append("c") -- Auto-wrap comments
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
@@ -1,56 +0,0 @@
|
||||
-- return {
|
||||
-- {
|
||||
-- "yetone/avante.nvim",
|
||||
-- event = "VeryLazy",
|
||||
-- lazy = false,
|
||||
-- version = false, -- Always pull the latest change
|
||||
-- opts = {
|
||||
-- provider = "cargdev", -- API provider configuration
|
||||
-- providers = {
|
||||
-- cargdev = {
|
||||
-- name = "cargdev", -- Optional
|
||||
-- endpoint = "https://api-ai.cargdev.io", -- API endpoint
|
||||
-- api_key_name = "CARGDEV_API_KEY", -- reference the ENV VAR below
|
||||
-- model = "deepseek-r1:latest",
|
||||
-- __inherited_from = "ollama", -- ensures compatibility
|
||||
-- max_tokens = 8192,
|
||||
-- },
|
||||
-- },
|
||||
-- },
|
||||
-- -- Optional: Build from source if required
|
||||
-- build = "make",
|
||||
-- dependencies = {
|
||||
-- "nvim-treesitter/nvim-treesitter", -- Syntax highlighting support
|
||||
-- "stevearc/dressing.nvim", -- UI elements
|
||||
-- "nvim-lua/plenary.nvim", -- Utility library
|
||||
-- "MunifTanjim/nui.nvim", -- UI library for modal components
|
||||
-- -- Optional dependencies:
|
||||
-- "nvim-tree/nvim-web-devicons", -- Icons support
|
||||
-- "zbirenbaum/copilot.lua", -- Copilot integration
|
||||
-- {
|
||||
-- "HakonHarnes/img-clip.nvim", -- Image pasting support
|
||||
-- event = "VeryLazy",
|
||||
-- opts = {
|
||||
-- -- Recommended settings
|
||||
-- default = {
|
||||
-- embed_image_as_base64 = false,
|
||||
-- prompt_for_file_name = false,
|
||||
-- drag_and_drop = {
|
||||
-- insert_mode = true,
|
||||
-- },
|
||||
-- use_absolute_path = true, -- For Windows users
|
||||
-- },
|
||||
-- },
|
||||
-- },
|
||||
-- {
|
||||
-- "MeanderingProgrammer/render-markdown.nvim",
|
||||
-- ft = { "markdown", "Avante" },
|
||||
-- config = function()
|
||||
-- require("render-markdown").setup({
|
||||
-- file_types = { "markdown", "Avante" },
|
||||
-- })
|
||||
-- end,
|
||||
-- },
|
||||
-- },
|
||||
-- },
|
||||
-- }
|
||||
@@ -18,7 +18,7 @@ return {
|
||||
" ",
|
||||
" ███╗ ██╗███████╗ ██████╗ ██╗ ██╗██╗███╗ ███╗ ",
|
||||
" ████╗ ██║██╔════╝██╔═══██╗██║ ██║██║████╗ ████║ ",
|
||||
" ██╔██╗ ██║█████╗ ██║ ██║██║ ██║██║██╔████╔██║ ",
|
||||
" ██╔██╗ ██║█████╗ ██║ ██║██║ ██║██║██╔████╔██╗ ",
|
||||
" ██║╚██╗██║██╔══╝ ██║ ██║╚██╗ ██╔╝██║██║╚██╔╝██║ ",
|
||||
" ██║ ╚████║███████╗╚██████╔╝ ╚████╔╝ ██║██║ ╚═╝ ██║ ",
|
||||
" ╚═╝ ╚═══╝╚══════╝ ╚═════╝ ╚═══╝ ╚═╝╚═╝ ╚═╝ ",
|
||||
@@ -27,14 +27,20 @@ return {
|
||||
" 🚀 Welcome to CarGDev Neovim - Customize Your Flow! 🚀 ",
|
||||
}
|
||||
|
||||
-- 📂 Set menu with improved icons
|
||||
-- 📂 Set menu with improved icons and performance tools
|
||||
dashboard.section.buttons.val = {
|
||||
dashboard.button("f", "🔎 Find File", "<cmd>lua require('snacks.picker').files()<CR>"),
|
||||
dashboard.button("n", "📜 New File", "<cmd>ene<CR>"),
|
||||
dashboard.button("g", "📝 Find Text", "<cmd>lua require('snacks.picker').grep()<CR>"),
|
||||
dashboard.button("r", "📚 Recent Files", "<cmd>lua require('snacks.picker').oldfiles()<CR>"),
|
||||
dashboard.button("f", "🔎 Find File (Safe)", "<cmd>Telescope find_files<CR>"),
|
||||
dashboard.button("n", "📄 New File", "<cmd>ene<CR>"),
|
||||
dashboard.button("g", "📝 Find Text", "<cmd>Telescope live_grep<CR>"),
|
||||
dashboard.button("r", "📚 Recent Files", "<cmd>Telescope oldfiles<CR>"),
|
||||
dashboard.button("t", "🌳 File Tree", "<cmd>NvimTreeToggle<CR>"),
|
||||
dashboard.button("c", "⚙️ Config", "<cmd>e ~/.config/nvim/init.lua<CR>"),
|
||||
dashboard.button("L", "🦥 Lazy", "<cmd>Lazy<CR>"),
|
||||
dashboard.button("p", "📊 Performance", "<cmd>lua require('cargdev.core.function.performance_monitor').check_performance()<CR>"),
|
||||
dashboard.button("l", "🔧 LSP Health", "<cmd>lua require('cargdev.core.function.performance_monitor').check_lsp_health()<CR>"),
|
||||
dashboard.button("s", "🧩 Sudoku", "<cmd>Sudoku<CR>"),
|
||||
dashboard.button("e", "💻 LeetCode", "<cmd>Leet<CR>"),
|
||||
dashboard.button("m", "🔨 Mason", "<cmd>Mason<CR>"),
|
||||
dashboard.button("q", "🚪 Quit", "<cmd>qa<CR>"),
|
||||
}
|
||||
|
||||
|
||||
@@ -50,7 +50,11 @@ return {
|
||||
statuscolumn = { enabled = true },
|
||||
terminal = { enabled = true },
|
||||
toggle = { enabled = true },
|
||||
words = { enabled = true },
|
||||
words = {
|
||||
enabled = true,
|
||||
lsp = { enabled = false }, -- Disable LSP to prevent crashes
|
||||
hl = { enabled = true },
|
||||
},
|
||||
})
|
||||
|
||||
-- Set up vim.ui.input and vim.ui.select for snacks
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
return {
|
||||
"CarGDev/cargdev-cyberpunk",
|
||||
--[[ dir = "/Users/carlos/Documents/SSD_Documents/projects/cargdevschemecolor.nvim", ]]
|
||||
name = "cargdev-cyberpunk",
|
||||
lazy = false,
|
||||
priority = 1000,
|
||||
config = function()
|
||||
vim.opt.termguicolors = true
|
||||
vim.opt.background = "dark"
|
||||
require("cargdev-cyberpunk").setup()
|
||||
end,
|
||||
priority = 1000,
|
||||
lazy = false,
|
||||
}
|
||||
|
||||
@@ -11,6 +11,7 @@ return {
|
||||
local ts_context_commentstring = require("ts_context_commentstring.integrations.comment_nvim")
|
||||
|
||||
-- enable comment
|
||||
|
||||
comment.setup({
|
||||
-- for commenting tsx, jsx, svelte, html files
|
||||
pre_hook = ts_context_commentstring.create_pre_hook(),
|
||||
|
||||
@@ -1,32 +0,0 @@
|
||||
-- return {
|
||||
-- {
|
||||
-- "olimorris/codecompanion.nvim",
|
||||
-- event = "VeryLazy",
|
||||
-- lazy = false,
|
||||
-- version = false,
|
||||
-- opts = {
|
||||
-- adapters = {
|
||||
-- openai = function()
|
||||
-- return require("codecompanion.adapters").extend("openai", {
|
||||
-- name = "openai",
|
||||
-- model = "codellama:7b",
|
||||
-- endpoint = "https://api-ai.cargdev.io/v1",
|
||||
-- api_key = os.getenv("CARGDEV_API_KEY"),
|
||||
-- max_tokens = 2048,
|
||||
-- })
|
||||
-- end,
|
||||
-- },
|
||||
-- strategies = {
|
||||
-- chat = { adapter = "openai" },
|
||||
-- inline = { adapter = "openai" },
|
||||
-- agent = { adapter = "openai" },
|
||||
-- },
|
||||
-- },
|
||||
-- dependencies = {
|
||||
-- "nvim-lua/plenary.nvim",
|
||||
-- "nvim-treesitter/nvim-treesitter",
|
||||
-- "nvim-telescope/telescope.nvim",
|
||||
-- },
|
||||
-- }
|
||||
-- }
|
||||
--
|
||||
@@ -1,75 +0,0 @@
|
||||
return {
|
||||
{
|
||||
-- Main Copilot plugin
|
||||
"zbirenbaum/copilot.lua",
|
||||
lazy = false, -- Load at startup
|
||||
enabled = true,
|
||||
config = function()
|
||||
require("copilot").setup({
|
||||
-- General settings
|
||||
panel = {
|
||||
enabled = true,
|
||||
auto_refresh = false,
|
||||
keymap = {
|
||||
jump_prev = "[[",
|
||||
jump_next = "]]",
|
||||
accept = "<CR>",
|
||||
refresh = "gr",
|
||||
},
|
||||
layout = {
|
||||
position = "bottom", -- | top | left | right | horizontal | vertical
|
||||
ratio = 0.4,
|
||||
},
|
||||
},
|
||||
suggestion = {
|
||||
enabled = true,
|
||||
auto_trigger = true,
|
||||
debounce = 75,
|
||||
trigger_on_accept = false,
|
||||
keymap = {
|
||||
accept = "<C-l>", -- Accept suggestion
|
||||
next = "<C-j>", -- Next suggestion
|
||||
prev = "<C-k>", -- Previous suggestion
|
||||
dismiss = "<C-x>", -- Dismiss suggestion
|
||||
},
|
||||
},
|
||||
filetypes = {
|
||||
markdown = true,
|
||||
["*"] = true, -- Enable for all filetypes
|
||||
},
|
||||
copilot_node_command = "node", -- Ensure your system's Node.js is v20+
|
||||
})
|
||||
end,
|
||||
},
|
||||
{
|
||||
-- Copilot Chat plugin
|
||||
"CopilotC-Nvim/CopilotChat.nvim",
|
||||
dependencies = {
|
||||
{ "zbirenbaum/copilot.lua" },
|
||||
{ "nvim-lua/plenary.nvim", branch = "master" }, -- For curl, log and async functions
|
||||
},
|
||||
build = "make tiktoken", -- Only on MacOS or Linux
|
||||
opts = {
|
||||
layout = {
|
||||
position = "right", -- Position of the chat window
|
||||
ratio = 0.5,
|
||||
},
|
||||
tiktoken = {
|
||||
enabled = false, -- Enable token counting
|
||||
},
|
||||
floating = {
|
||||
enabled = true,
|
||||
border = "rounded",
|
||||
},
|
||||
prompts = {
|
||||
Rename = {
|
||||
prompt = "Please rename the variable correctly in given selection based on context",
|
||||
selection = function(source)
|
||||
local select = require("CopilotChat.select")
|
||||
return select.visual(source)
|
||||
end,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
44
lua/cargdev/plugins/curls.lua
Normal file
44
lua/cargdev/plugins/curls.lua
Normal file
@@ -0,0 +1,44 @@
|
||||
return {
|
||||
"CarGDev/rest.nvim",
|
||||
dependencies = {
|
||||
"nvim-treesitter/nvim-treesitter",
|
||||
opts = function(_, opts)
|
||||
opts.ensure_installed = opts.ensure_installed or {}
|
||||
table.insert(opts.ensure_installed, "http")
|
||||
end,
|
||||
},
|
||||
config = function()
|
||||
-- Basic configuration for rest.nvim
|
||||
vim.g.rest_nvim = {
|
||||
-- Enable request highlighting
|
||||
highlight = {
|
||||
enable = true,
|
||||
timeout = 750,
|
||||
},
|
||||
-- Enable response formatting
|
||||
response = {
|
||||
hooks = {
|
||||
format = true,
|
||||
decode_url = true,
|
||||
},
|
||||
},
|
||||
-- Enable cookies
|
||||
cookies = {
|
||||
enable = true,
|
||||
},
|
||||
-- Enable environment variables
|
||||
env = {
|
||||
enable = true,
|
||||
pattern = ".*%.env.*",
|
||||
},
|
||||
-- UI configuration
|
||||
ui = {
|
||||
winbar = true,
|
||||
keybinds = {
|
||||
prev = "H",
|
||||
next = "L",
|
||||
},
|
||||
},
|
||||
}
|
||||
end,
|
||||
}
|
||||
@@ -1,5 +1,7 @@
|
||||
return {
|
||||
"mfussenegger/nvim-dap",
|
||||
event = "VeryLazy", -- Changed from immediate loading to lazy loading
|
||||
cmd = { "Dap", "DapUI", "DapContinue", "DapToggleBreakpoint" }, -- Load on command
|
||||
dependencies = {
|
||||
{ "nvim-neotest/nvim-nio", lazy = false },
|
||||
"rcarriga/nvim-dap-ui",
|
||||
@@ -9,6 +11,7 @@ return {
|
||||
"Weissle/persistent-breakpoints.nvim",
|
||||
{
|
||||
"nvim-neotest/neotest",
|
||||
event = "VeryLazy",
|
||||
dependencies = {
|
||||
"nvim-neotest/neotest-jest",
|
||||
"nvim-neotest/neotest-python",
|
||||
|
||||
@@ -1,132 +0,0 @@
|
||||
return {
|
||||
-- =============================================================================
|
||||
-- DATABASE PLUGINS
|
||||
-- =============================================================================
|
||||
|
||||
-- Modern database client for Neovim (replaces vim-dadbod)
|
||||
{
|
||||
"kndndrj/nvim-dbee",
|
||||
build = function()
|
||||
-- Install the Go binary
|
||||
require("dbee").install()
|
||||
end,
|
||||
dependencies = {
|
||||
"nvim-lua/plenary.nvim",
|
||||
},
|
||||
config = function()
|
||||
require("dbee").setup({
|
||||
-- Sources for database connections
|
||||
sources = {
|
||||
-- Load connections from memory (only guaranteed working connections)
|
||||
require("dbee.sources").MemorySource:new({
|
||||
-- PostgreSQL (confirmed working)
|
||||
{
|
||||
name = "mock_api",
|
||||
type = "postgres",
|
||||
url = "postgres://localhost:5432/mock_api?sslmode=disable",
|
||||
},
|
||||
}),
|
||||
-- Load connections from environment variable (for dynamic connections)
|
||||
require("dbee.sources").EnvSource:new("DBEE_CONNECTIONS"),
|
||||
-- Load connections from file (persistent storage - user-added connections)
|
||||
require("dbee.sources").FileSource:new(vim.fn.stdpath("cache") .. "/dbee/persistence.json"),
|
||||
},
|
||||
|
||||
-- UI Configuration
|
||||
ui = {
|
||||
-- Layout configuration
|
||||
layout = {
|
||||
-- Drawer (left panel) width
|
||||
drawer_width = 30,
|
||||
-- Result buffer height
|
||||
result_height = 15,
|
||||
-- Editor buffer height
|
||||
editor_height = 10,
|
||||
},
|
||||
},
|
||||
|
||||
-- Database configuration
|
||||
database = {
|
||||
-- Default page size for results
|
||||
page_size = 100,
|
||||
-- Connection timeout in seconds
|
||||
timeout = 30,
|
||||
-- Maximum number of connections
|
||||
max_connections = 5,
|
||||
},
|
||||
|
||||
-- Logging configuration
|
||||
log = {
|
||||
-- Log level: "debug", "info", "warn", "error"
|
||||
level = "info",
|
||||
-- Log file path
|
||||
file = vim.fn.stdpath("cache") .. "/dbee/dbee.log",
|
||||
},
|
||||
})
|
||||
end,
|
||||
},
|
||||
|
||||
-- SQL formatting and syntax highlighting
|
||||
{
|
||||
"b4winckler/vim-objc",
|
||||
ft = { "sql", "mysql", "postgresql", "oracle" },
|
||||
},
|
||||
|
||||
-- SQL formatting with sqlparse
|
||||
{
|
||||
"b4winckler/vim-objc",
|
||||
ft = { "sql" },
|
||||
config = function()
|
||||
vim.g.sqlformat_command = "sqlformat"
|
||||
vim.g.sqlformat_options = "-r -k upper"
|
||||
end,
|
||||
},
|
||||
|
||||
|
||||
|
||||
-- MongoDB syntax highlighting (without LSP)
|
||||
{
|
||||
"neovim/nvim-lspconfig",
|
||||
ft = { "javascript", "json" },
|
||||
config = function()
|
||||
-- Enable MongoDB syntax highlighting for .js files
|
||||
vim.api.nvim_create_autocmd("FileType", {
|
||||
pattern = { "javascript", "json" },
|
||||
callback = function()
|
||||
vim.bo.filetype = "javascript"
|
||||
end,
|
||||
})
|
||||
end,
|
||||
},
|
||||
|
||||
-- Redis syntax highlighting
|
||||
{
|
||||
"neovim/nvim-lspconfig",
|
||||
ft = { "redis" },
|
||||
config = function()
|
||||
-- Enable Redis syntax highlighting
|
||||
vim.api.nvim_create_autocmd("BufRead,BufNewFile", {
|
||||
pattern = "*.redis",
|
||||
callback = function()
|
||||
vim.bo.filetype = "redis"
|
||||
end,
|
||||
})
|
||||
end,
|
||||
},
|
||||
|
||||
-- CQL (Cassandra Query Language) syntax highlighting
|
||||
{
|
||||
"neovim/nvim-lspconfig",
|
||||
ft = { "cql" },
|
||||
config = function()
|
||||
-- Enable CQL syntax highlighting
|
||||
vim.api.nvim_create_autocmd("BufRead,BufNewFile", {
|
||||
pattern = "*.cql",
|
||||
callback = function()
|
||||
vim.bo.filetype = "cql"
|
||||
end,
|
||||
})
|
||||
end,
|
||||
},
|
||||
}
|
||||
|
||||
8
lua/cargdev/plugins/flutter.lua
Normal file
8
lua/cargdev/plugins/flutter.lua
Normal file
@@ -0,0 +1,8 @@
|
||||
return {
|
||||
"akinsho/flutter-tools.nvim",
|
||||
dependencies = {
|
||||
"nvim-lua/plenary.nvim",
|
||||
"stevearc/dressing.nvim",
|
||||
},
|
||||
config = true,
|
||||
}
|
||||
@@ -29,6 +29,10 @@ return {
|
||||
liquid = { "prettier" },
|
||||
lua = { "stylua" },
|
||||
python = { "isort", "black" },
|
||||
c = { "clang_format" },
|
||||
cpp = { "clang_format" },
|
||||
cxx = { "clang_format" },
|
||||
hpp = { "clang_format" },
|
||||
dbml = { "dbml" }, -- DBML formatting
|
||||
sql = { "sqlfluff" }, -- SQL formatting
|
||||
},
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
return {
|
||||
--[[dir = "/Volumes/Carlos_SSD/Documents/projects/ideaDrop",]]
|
||||
"CarGDev/ideadrop.nvim",
|
||||
name = "ideaDrop",
|
||||
dependencies = {
|
||||
@@ -8,7 +7,7 @@ return {
|
||||
},
|
||||
config = function()
|
||||
require("ideaDrop").setup({
|
||||
idea_dir = "/Users/carlos/Nextcloud/ObsidianVault",
|
||||
idea_dir = vim.env.IDEA_DIR,
|
||||
})
|
||||
|
||||
-- Set up convenient keymaps for ideaDrop
|
||||
|
||||
@@ -3,6 +3,16 @@ return {
|
||||
event = { "BufReadPre", "BufNewFile" },
|
||||
main = "ibl",
|
||||
opts = {
|
||||
indent = { char = "┊" },
|
||||
indent = {
|
||||
char = "┊",
|
||||
},
|
||||
exclude = {
|
||||
filetypes = { "help", "alpha", "dashboard", "neo-tree", "Trouble", "lazy", "mason" },
|
||||
buftypes = { "terminal", "nofile", "quickfix", "prompt" },
|
||||
},
|
||||
scope = {
|
||||
enabled = false
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
@@ -1,504 +0,0 @@
|
||||
-- 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
|
||||
-- }
|
||||
@@ -1,6 +1,6 @@
|
||||
return {
|
||||
"neovim/nvim-lspconfig",
|
||||
event = { "BufReadPre", "BufNewFile" },
|
||||
event = { "BufReadPost", "BufNewFile" },
|
||||
dependencies = {
|
||||
"hrsh7th/cmp-nvim-lsp",
|
||||
{ "antosha417/nvim-lsp-file-operations", config = true },
|
||||
@@ -23,23 +23,17 @@ return {
|
||||
"gopls",
|
||||
"graphql",
|
||||
"html",
|
||||
-- "jdtls", -- uncomment if you're actively doing Java
|
||||
"lua_ls",
|
||||
"prismals",
|
||||
"pyright",
|
||||
"svelte",
|
||||
"tailwindcss",
|
||||
-- Database language servers
|
||||
"sqls", -- SQL language server
|
||||
"mongodb", -- MongoDB language server
|
||||
"redis", -- Redis language server
|
||||
"oracle", -- Oracle language server
|
||||
"cassandra", -- Cassandra language server
|
||||
},
|
||||
})
|
||||
|
||||
local capabilities = cmp_nvim_lsp.default_capabilities()
|
||||
|
||||
-- Enhanced error handling for LSP diagnostics
|
||||
vim.diagnostic.config({
|
||||
signs = {
|
||||
severity = {
|
||||
@@ -52,73 +46,144 @@ return {
|
||||
Info = " ",
|
||||
},
|
||||
},
|
||||
-- Performance optimizations
|
||||
update_in_insert = false, -- Don't update diagnostics in insert mode
|
||||
virtual_text = false, -- Disable virtual text for better performance
|
||||
underline = true, -- Keep underline for errors
|
||||
severity_sort = true, -- Sort diagnostics by severity
|
||||
-- Error handling
|
||||
float = {
|
||||
border = "rounded",
|
||||
source = "always",
|
||||
format = function(diagnostic)
|
||||
if diagnostic.source == "LSP" then
|
||||
return string.format("%s [%s]", diagnostic.message, diagnostic.source)
|
||||
end
|
||||
return diagnostic.message
|
||||
end,
|
||||
},
|
||||
})
|
||||
|
||||
-- Only attach to sensible buffers
|
||||
local function should_attach_lsp(bufnr)
|
||||
if type(bufnr) ~= "number" or bufnr == 0 then
|
||||
bufnr = vim.api.nvim_get_current_buf()
|
||||
end
|
||||
local ft = vim.bo[bufnr].filetype
|
||||
local name = vim.api.nvim_buf_get_name(bufnr)
|
||||
|
||||
-- skip binaries / media
|
||||
local exts = {
|
||||
"png", "jpg", "jpeg", "gif", "svg", "ico", "bmp", "webp",
|
||||
"mp4", "avi", "mov", "wmv", "flv", "webm", "mkv",
|
||||
"mp3", "wav", "flac", "aac", "ogg",
|
||||
"pdf", "doc", "docx", "xls", "xlsx", "ppt", "pptx",
|
||||
"zip", "rar", "7z", "tar", "gz", "bz2", "exe", "dll", "so", "dylib", "bin"
|
||||
}
|
||||
for _, e in ipairs(exts) do
|
||||
if name:match("%." .. e .. "$") then
|
||||
return false
|
||||
end
|
||||
end
|
||||
|
||||
local lines = vim.api.nvim_buf_line_count(bufnr)
|
||||
if lines == 0 or lines > 50000 then
|
||||
return false
|
||||
end
|
||||
|
||||
local skip_ft = {
|
||||
git = true, gitcommit = true, gitrebase = true, gitconfig = true,
|
||||
help = true, man = true, qf = true, quickfix = true, terminal = true, toggleterm = true
|
||||
}
|
||||
if skip_ft[ft] then
|
||||
return false
|
||||
end
|
||||
|
||||
return true
|
||||
end
|
||||
|
||||
-- Shared on_attach
|
||||
local function on_attach(client, bufnr)
|
||||
if not should_attach_lsp(bufnr) then
|
||||
-- Detach politely; don't override client.request
|
||||
vim.schedule(function()
|
||||
if vim.api.nvim_buf_is_valid(bufnr) then
|
||||
vim.lsp.buf_detach_client(bufnr, client.id)
|
||||
else
|
||||
client.stop()
|
||||
end
|
||||
end)
|
||||
return
|
||||
end
|
||||
-- your normal keymaps/etc here
|
||||
end
|
||||
|
||||
local servers = {
|
||||
cssls = {},
|
||||
cssls = {
|
||||
settings = {
|
||||
css = {
|
||||
validate = true,
|
||||
lint = { unknownAtRules = "ignore" }
|
||||
}
|
||||
}
|
||||
},
|
||||
emmet_ls = {},
|
||||
eslint = {},
|
||||
gopls = {},
|
||||
graphql = {},
|
||||
eslint = {
|
||||
settings = { workingDirectory = { mode = "auto" } }
|
||||
},
|
||||
gopls = {
|
||||
settings = {
|
||||
gopls = {
|
||||
analyses = { unusedparams = true },
|
||||
staticcheck = true,
|
||||
usePlaceholders = true
|
||||
}
|
||||
}
|
||||
},
|
||||
graphql = {},
|
||||
html = {},
|
||||
-- jdtls = {}, -- same here
|
||||
lua_ls = {
|
||||
settings = {
|
||||
Lua = {
|
||||
diagnostics = { globals = { "vim" } },
|
||||
workspace = {
|
||||
library = vim.api.nvim_get_runtime_file("", true),
|
||||
checkThirdParty = false,
|
||||
workspace = {
|
||||
library = vim.api.nvim_get_runtime_file("", true),
|
||||
checkThirdParty = false
|
||||
},
|
||||
telemetry = { enable = false },
|
||||
hint = { enable = false },
|
||||
},
|
||||
},
|
||||
},
|
||||
prismals = {},
|
||||
pyright = {},
|
||||
pyright = {
|
||||
settings = {
|
||||
python = {
|
||||
analysis = {
|
||||
typeCheckingMode = "basic",
|
||||
autoImportCompletions = true
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
svelte = {},
|
||||
tailwindcss = {},
|
||||
-- Database servers
|
||||
sqls = {
|
||||
settings = {
|
||||
sqls = {
|
||||
connections = {
|
||||
{
|
||||
name = "PostgreSQL",
|
||||
adapter = "postgresql",
|
||||
host = "localhost",
|
||||
port = 5432,
|
||||
database = "postgres",
|
||||
username = "postgres",
|
||||
password = "",
|
||||
},
|
||||
{
|
||||
name = "MySQL",
|
||||
adapter = "mysql",
|
||||
host = "localhost",
|
||||
port = 3306,
|
||||
database = "mysql",
|
||||
username = "root",
|
||||
password = "",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
mongols = {
|
||||
settings = {
|
||||
mongols = {
|
||||
connectionString = "mongodb://localhost:27017",
|
||||
maxNumberOfProblems = 100,
|
||||
},
|
||||
},
|
||||
},
|
||||
-- sqls = { settings = { sqls = { connections = { /* …your dbs… */ } } } }, -- optional
|
||||
}
|
||||
|
||||
-- Set up all LSP servers
|
||||
for server_name, server_config in pairs(servers) do
|
||||
lspconfig[server_name].setup({
|
||||
-- Set up all LSP servers with performance optimizations and error handling
|
||||
for name, cfg in pairs(servers) do
|
||||
lspconfig[name].setup({
|
||||
capabilities = capabilities,
|
||||
settings = server_config.settings or {},
|
||||
on_attach = on_attach,
|
||||
settings = cfg.settings,
|
||||
flags = { debounce_text_changes = 150 },
|
||||
handlers = {
|
||||
["textDocument/publishDiagnostics"] = vim.lsp.with(
|
||||
vim.lsp.diagnostic.on_publish_diagnostics,
|
||||
{ virtual_text = false, signs = true, underline = true, update_in_insert = false }
|
||||
),
|
||||
},
|
||||
})
|
||||
end
|
||||
|
||||
@@ -131,13 +196,52 @@ return {
|
||||
capabilities = capabilities,
|
||||
})
|
||||
|
||||
-- Set up TypeScript Tools
|
||||
-- Set up TypeScript Tools with performance optimizations and error handling
|
||||
require("typescript-tools").setup({
|
||||
settings = {
|
||||
tsserver_plugins = {},
|
||||
tsserver_file_preferences = {},
|
||||
tsserver_format_options = {},
|
||||
-- Performance optimizations
|
||||
tsserver_max_tsc_memory = 4096, -- Limit memory usage
|
||||
tsserver_experimental_enableProjectDiagnostics = false, -- Disable project diagnostics for better performance
|
||||
},
|
||||
-- Add error handling for TypeScript Tools
|
||||
on_attach = function(client, bufnr)
|
||||
if not should_attach_lsp(bufnr) then
|
||||
client.stop()
|
||||
return
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
-- Global LSP error handling
|
||||
vim.lsp.handlers["textDocument/hover"] = vim.lsp.with(
|
||||
vim.lsp.handlers.hover,
|
||||
{ border = "rounded" }
|
||||
)
|
||||
|
||||
vim.lsp.handlers["textDocument/signatureHelp"] = vim.lsp.with(
|
||||
vim.lsp.handlers.signature_help,
|
||||
{ border = "rounded" }
|
||||
)
|
||||
|
||||
-- Handle LSP errors gracefully
|
||||
vim.lsp.set_log_level("warn") -- Reduce log verbosity
|
||||
|
||||
-- Add autocmd to handle LSP errors
|
||||
vim.api.nvim_create_autocmd("LspAttach", {
|
||||
callback = function(args)
|
||||
local client = vim.lsp.get_client_by_id(args.data.client_id)
|
||||
if client then
|
||||
-- Add error handling for this client
|
||||
client.notify("workspace/didChangeConfiguration", {
|
||||
settings = {
|
||||
-- Add any client-specific error handling settings here
|
||||
}
|
||||
})
|
||||
end
|
||||
end,
|
||||
})
|
||||
end,
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@ return {
|
||||
dependencies = {
|
||||
"hrsh7th/cmp-buffer", -- source for text in buffer
|
||||
"hrsh7th/cmp-path", -- source for file system paths
|
||||
"hrsh7th/cmp-nvim-lsp", -- LSP completion source
|
||||
{
|
||||
"L3MON4D3/LuaSnip",
|
||||
-- follow latest release.
|
||||
@@ -28,6 +29,9 @@ return {
|
||||
cmp.setup({
|
||||
completion = {
|
||||
completeopt = "menu,menuone,preview,noselect",
|
||||
-- Performance optimizations
|
||||
keyword_length = 2, -- Start completion after 2 characters
|
||||
keyword_pattern = [[\%(-\?\d\+\%(\.\d\+\)\?\|\h\w*\%(-\w*\)*\)]], -- Better keyword pattern
|
||||
},
|
||||
snippet = { -- configure how nvim-cmp interacts with snippet engine
|
||||
expand = function(args)
|
||||
@@ -46,10 +50,10 @@ return {
|
||||
}),
|
||||
-- sources for autocompletion
|
||||
sources = cmp.config.sources({
|
||||
{ name = "nvim_lsp"},
|
||||
{ name = "luasnip" }, -- snippets
|
||||
{ name = "buffer" }, -- text within current buffer
|
||||
{ name = "path" }, -- file system paths
|
||||
{ name = "nvim_lsp", priority = 1000},
|
||||
{ name = "luasnip", priority = 750 }, -- snippets
|
||||
{ name = "buffer", priority = 500, keyword_length = 3 }, -- text within current buffer
|
||||
{ name = "path", priority = 250 }, -- file system paths
|
||||
}),
|
||||
|
||||
-- configure lspkind for vs-code like pictograms in completion menu
|
||||
@@ -59,6 +63,27 @@ return {
|
||||
ellipsis_char = "...",
|
||||
}),
|
||||
},
|
||||
|
||||
-- Performance optimizations
|
||||
performance = {
|
||||
debounce = 50, -- Debounce completion requests
|
||||
throttle = 100, -- Throttle completion requests
|
||||
fetching_timeout = 200, -- Timeout for fetching completions
|
||||
},
|
||||
|
||||
-- Reduce completion menu size for better performance
|
||||
window = {
|
||||
completion = {
|
||||
border = "rounded",
|
||||
scrollbar = false,
|
||||
col_offset = -3,
|
||||
side_padding = 0,
|
||||
},
|
||||
documentation = {
|
||||
border = "rounded",
|
||||
scrollbar = false,
|
||||
},
|
||||
},
|
||||
})
|
||||
end,
|
||||
}
|
||||
|
||||
@@ -23,9 +23,70 @@ return {
|
||||
end,
|
||||
})
|
||||
|
||||
-- File filtering function to prevent LSP errors and image freezing
|
||||
local function filter_files(entry)
|
||||
local filename = entry.filename or entry.value
|
||||
if not filename then return true end
|
||||
|
||||
-- Skip non-text files that can cause LSP errors or freezing
|
||||
local skip_extensions = {
|
||||
-- Images
|
||||
"png", "jpg", "jpeg", "gif", "svg", "ico", "bmp", "webp", "tiff", "tga",
|
||||
-- Videos
|
||||
"mp4", "avi", "mov", "wmv", "flv", "webm", "mkv", "m4v", "3gp",
|
||||
-- Audio
|
||||
"mp3", "wav", "flac", "aac", "ogg", "m4a", "wma",
|
||||
-- Documents
|
||||
"pdf", "doc", "docx", "xls", "xlsx", "ppt", "pptx", "odt", "ods", "odp",
|
||||
-- Archives
|
||||
"zip", "rar", "7z", "tar", "gz", "bz2", "xz", "lzma",
|
||||
-- Binaries
|
||||
"exe", "dll", "so", "dylib", "bin", "app", "dmg", "deb", "rpm",
|
||||
-- Other problematic files
|
||||
"lock", "log", "tmp", "temp", "cache", "bak", "backup"
|
||||
}
|
||||
|
||||
for _, ext in ipairs(skip_extensions) do
|
||||
if filename:match("%." .. ext .. "$") then
|
||||
return false
|
||||
end
|
||||
end
|
||||
|
||||
-- Skip hidden files and directories (except .git)
|
||||
if filename:match("/%.") and not filename:match("/%.git/") then
|
||||
return false
|
||||
end
|
||||
|
||||
-- Skip node_modules and other heavy directories
|
||||
if filename:match("/node_modules/") or
|
||||
filename:match("/vendor/") or
|
||||
filename:match("/%.git/") or
|
||||
filename:match("/dist/") or
|
||||
filename:match("/build/") or
|
||||
filename:match("/target/") then
|
||||
return false
|
||||
end
|
||||
|
||||
return true
|
||||
end
|
||||
|
||||
telescope.setup({
|
||||
defaults = {
|
||||
path_display = { "smart" },
|
||||
-- Performance optimizations
|
||||
cache_picker = {
|
||||
num_pickers = -1,
|
||||
},
|
||||
-- Enhanced preview with file filtering
|
||||
preview = {
|
||||
treesitter = false, -- Disable treesitter in preview for better performance
|
||||
timeout = 100, -- Reduce preview timeout
|
||||
},
|
||||
-- Optimize sorting
|
||||
sorting_strategy = "ascending",
|
||||
-- Add file filtering to all pickers
|
||||
file_sorter = require("telescope.sorters").get_fuzzy_file,
|
||||
generic_sorter = require("telescope.sorters").get_generic_fuzzy_sorter,
|
||||
mappings = {
|
||||
i = {
|
||||
["<C-k>"] = actions.move_selection_previous, -- move to prev result
|
||||
@@ -38,11 +99,41 @@ return {
|
||||
pickers = {
|
||||
find_files = {
|
||||
hidden = true,
|
||||
-- Performance optimizations
|
||||
find_command = { "rg", "--files", "--hidden", "--glob", "!**/.git/*" },
|
||||
no_ignore = false,
|
||||
follow = false, -- Don't follow symlinks for better performance
|
||||
-- Add file filtering
|
||||
file_filter = filter_files,
|
||||
},
|
||||
live_grep = {
|
||||
additional_args = function()
|
||||
return { "--hidden" }
|
||||
end,
|
||||
-- Performance optimizations
|
||||
glob_pattern = { "!**/.git/*", "!**/node_modules/*", "!**/vendor/*" },
|
||||
previewer = false, -- Disable previewer for live_grep for better performance
|
||||
-- Add file filtering for grep
|
||||
file_filter = filter_files,
|
||||
},
|
||||
-- Optimize other pickers
|
||||
buffers = {
|
||||
sort_lastused = true,
|
||||
ignore_current_buffer = true,
|
||||
},
|
||||
git_files = {
|
||||
git_command = { "git", "ls-files", "--exclude-standard" },
|
||||
-- Add file filtering for git files
|
||||
file_filter = filter_files,
|
||||
},
|
||||
},
|
||||
-- Performance optimizations
|
||||
extensions = {
|
||||
fzf = {
|
||||
fuzzy = true,
|
||||
override_generic_sorter = true,
|
||||
override_file_sorter = true,
|
||||
case_mode = "smart_case",
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
return {
|
||||
"nvim-treesitter/nvim-treesitter",
|
||||
event = { "BufReadPre", "BufNewFile" },
|
||||
event = { "BufReadPost", "BufNewFile" }, -- Changed from BufReadPre to BufReadPost for better performance
|
||||
build = ":TSUpdate",
|
||||
dependencies = {
|
||||
"windwp/nvim-ts-autotag",
|
||||
@@ -17,6 +17,9 @@ return {
|
||||
-- Prevent Treesitter from parsing Copilot files
|
||||
return lang == "copilot" or vim.api.nvim_buf_get_name(buf):match("copilot.lua")
|
||||
end,
|
||||
-- Performance optimizations
|
||||
use_languagetree = true,
|
||||
additional_vim_regex_highlighting = false,
|
||||
},
|
||||
-- enable indentation
|
||||
indent = { enable = true },
|
||||
@@ -58,6 +61,13 @@ return {
|
||||
node_decremental = "<bs>",
|
||||
},
|
||||
},
|
||||
-- Performance optimizations
|
||||
playground = {
|
||||
enable = false, -- Disable playground for better performance
|
||||
},
|
||||
query_linter = {
|
||||
enable = false, -- Disable query linter for better performance
|
||||
},
|
||||
})
|
||||
end,
|
||||
}
|
||||
|
||||
@@ -1 +1,11 @@
|
||||
return { "wakatime/vim-wakatime", lazy = false }
|
||||
return {
|
||||
"wakatime/vim-wakatime",
|
||||
lazy = false,
|
||||
config = function()
|
||||
-- WakaTime performance optimizations
|
||||
vim.g.wakatime_HeartbeatFrequency = 2 -- Increase from default 1 minute to 2 minutes
|
||||
vim.g.wakatime_buffering_heartbeats_enabled = 1 -- Enable buffering
|
||||
vim.g.wakatime_debug = 0 -- Disable debug mode for performance
|
||||
vim.g.wakatime_redraw_setting = 'auto' -- Auto redraw setting
|
||||
end,
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@ return {
|
||||
event = "VeryLazy",
|
||||
init = function()
|
||||
vim.o.timeout = true
|
||||
vim.o.timeoutlen = 500
|
||||
vim.o.timeoutlen = 200 -- Reduced from 500 for faster response
|
||||
end,
|
||||
opts = {
|
||||
-- your configuration comes here
|
||||
|
||||
Reference in New Issue
Block a user