mirror of
https://github.com/nvim-lua/kickstart.nvim.git
synced 2025-06-24 06:08:34 +02:00
done maybe
This commit is contained in:
parent
d00f77555e
commit
c54b71fdd4
24 changed files with 2632 additions and 501 deletions
|
@ -1,3 +1,4 @@
|
|||
# filepath: /home/kali/.config/nvim/.stylua.toml
|
||||
column_width = 160
|
||||
line_endings = "Unix"
|
||||
indent_type = "Spaces"
|
||||
|
|
79
README.md
79
README.md
|
@ -4,9 +4,9 @@
|
|||
|
||||
A starting point for Neovim that is:
|
||||
|
||||
* Small
|
||||
* Single-file
|
||||
* Completely Documented
|
||||
- Small
|
||||
- Single-file
|
||||
- Completely Documented
|
||||
|
||||
**NOT** a Neovim distribution, but instead a starting point for your configuration.
|
||||
|
||||
|
@ -14,7 +14,7 @@ A starting point for Neovim that is:
|
|||
|
||||
### Install Neovim
|
||||
|
||||
Kickstart.nvim targets *only* the latest
|
||||
Kickstart.nvim targets _only_ the latest
|
||||
['stable'](https://github.com/neovim/neovim/releases/tag/stable) and latest
|
||||
['nightly'](https://github.com/neovim/neovim/releases/tag/nightly) of Neovim.
|
||||
If you are experiencing issues, please make sure you have the latest versions.
|
||||
|
@ -22,13 +22,16 @@ If you are experiencing issues, please make sure you have the latest versions.
|
|||
### Install External Dependencies
|
||||
|
||||
External Requirements:
|
||||
|
||||
- Basic utils: `git`, `make`, `unzip`, C Compiler (`gcc`)
|
||||
- [ripgrep](https://github.com/BurntSushi/ripgrep#installation),
|
||||
[fd-find](https://github.com/sharkdp/fd#installation)
|
||||
- Clipboard tool (xclip/xsel/win32yank or other depending on the platform)
|
||||
- A [Nerd Font](https://www.nerdfonts.com/): optional, provides various icons
|
||||
- if you have it set `vim.g.have_nerd_font` in `init.lua` to true
|
||||
- Emoji fonts (Ubuntu only, and only if you want emoji!) `sudo apt install fonts-noto-color-emoji`
|
||||
- Emoji fonts (only if you want emoji!)
|
||||
- On Arch Linux: `sudo pacman -S noto-fonts-emoji` or `yay -S noto-fonts-emoji`
|
||||
- On Ubuntu: `sudo apt install fonts-noto-color-emoji`
|
||||
- Language Setup:
|
||||
- If you want to write Typescript, you need `npm`
|
||||
- If you want to write Golang, you will need `go`
|
||||
|
@ -40,16 +43,15 @@ External Requirements:
|
|||
|
||||
### Install Kickstart
|
||||
|
||||
> [!NOTE]
|
||||
> [Backup](#FAQ) your previous configuration (if any exists)
|
||||
> [!NOTE] > [Backup](#FAQ) your previous configuration (if any exists)
|
||||
|
||||
Neovim's configurations are located under the following paths, depending on your OS:
|
||||
|
||||
| OS | PATH |
|
||||
| :- | :--- |
|
||||
| Linux, MacOS | `$XDG_CONFIG_HOME/nvim`, `~/.config/nvim` |
|
||||
| Windows (cmd)| `%localappdata%\nvim\` |
|
||||
| Windows (powershell)| `$env:LOCALAPPDATA\nvim\` |
|
||||
| OS | PATH |
|
||||
| :------------------- | :---------------------------------------- |
|
||||
| Linux, MacOS | `$XDG_CONFIG_HOME/nvim`, `~/.config/nvim` |
|
||||
| Windows (cmd) | `%localappdata%\nvim\` |
|
||||
| Windows (powershell) | `$env:LOCALAPPDATA\nvim\` |
|
||||
|
||||
#### Recommended Step
|
||||
|
||||
|
@ -115,19 +117,18 @@ examples of adding popularly requested plugins.
|
|||
> [!NOTE]
|
||||
> For more information about a particular plugin check its repository's documentation.
|
||||
|
||||
|
||||
### Getting Started
|
||||
|
||||
[The Only Video You Need to Get Started with Neovim](https://youtu.be/m8C0Cq9Uv9o)
|
||||
|
||||
### FAQ
|
||||
|
||||
* What should I do if I already have a pre-existing Neovim configuration?
|
||||
* You should back it up and then delete all associated files.
|
||||
* This includes your existing init.lua and the Neovim files in `~/.local`
|
||||
- What should I do if I already have a pre-existing Neovim configuration?
|
||||
- You should back it up and then delete all associated files.
|
||||
- This includes your existing init.lua and the Neovim files in `~/.local`
|
||||
which can be deleted with `rm -rf ~/.local/share/nvim/`
|
||||
* Can I keep my existing configuration in parallel to kickstart?
|
||||
* Yes! You can use [NVIM_APPNAME](https://neovim.io/doc/user/starting.html#%24NVIM_APPNAME)`=nvim-NAME`
|
||||
- Can I keep my existing configuration in parallel to kickstart?
|
||||
- Yes! You can use [NVIM_APPNAME](https://neovim.io/doc/user/starting.html#%24NVIM_APPNAME)`=nvim-NAME`
|
||||
to maintain multiple configurations. For example, you can install the kickstart
|
||||
configuration in `~/.config/nvim-kickstart` and create an alias:
|
||||
```
|
||||
|
@ -137,18 +138,18 @@ examples of adding popularly requested plugins.
|
|||
config directory and the matching local directory
|
||||
`~/.local/share/nvim-kickstart`. You can apply this approach to any Neovim
|
||||
distribution that you would like to try out.
|
||||
* What if I want to "uninstall" this configuration:
|
||||
* See [lazy.nvim uninstall](https://lazy.folke.io/usage#-uninstalling) information
|
||||
* Why is the kickstart `init.lua` a single file? Wouldn't it make sense to split it into multiple files?
|
||||
* The main purpose of kickstart is to serve as a teaching tool and a reference
|
||||
- What if I want to "uninstall" this configuration:
|
||||
- See [lazy.nvim uninstall](https://lazy.folke.io/usage#-uninstalling) information
|
||||
- Why is the kickstart `init.lua` a single file? Wouldn't it make sense to split it into multiple files?
|
||||
- The main purpose of kickstart is to serve as a teaching tool and a reference
|
||||
configuration that someone can easily use to `git clone` as a basis for their own.
|
||||
As you progress in learning Neovim and Lua, you might consider splitting `init.lua`
|
||||
into smaller parts. A fork of kickstart that does this while maintaining the
|
||||
same functionality is available here:
|
||||
* [kickstart-modular.nvim](https://github.com/dam9000/kickstart-modular.nvim)
|
||||
* Discussions on this topic can be found here:
|
||||
* [Restructure the configuration](https://github.com/nvim-lua/kickstart.nvim/issues/218)
|
||||
* [Reorganize init.lua into a multi-file setup](https://github.com/nvim-lua/kickstart.nvim/pull/473)
|
||||
- [kickstart-modular.nvim](https://github.com/dam9000/kickstart-modular.nvim)
|
||||
- Discussions on this topic can be found here:
|
||||
- [Restructure the configuration](https://github.com/nvim-lua/kickstart.nvim/issues/218)
|
||||
- [Reorganize init.lua into a multi-file setup](https://github.com/nvim-lua/kickstart.nvim/pull/473)
|
||||
|
||||
### Install Recipes
|
||||
|
||||
|
@ -170,23 +171,27 @@ This requires:
|
|||
```lua
|
||||
{'nvim-telescope/telescope-fzf-native.nvim', build = 'cmake -S. -Bbuild -DCMAKE_BUILD_TYPE=Release && cmake --build build --config Release && cmake --install build --prefix build' }
|
||||
```
|
||||
|
||||
</details>
|
||||
<details><summary>Windows with gcc/make using chocolatey</summary>
|
||||
Alternatively, one can install gcc and make which don't require changing the config,
|
||||
the easiest way is to use choco:
|
||||
|
||||
1. install [chocolatey](https://chocolatey.org/install)
|
||||
either follow the instructions on the page or use winget,
|
||||
run in cmd as **admin**:
|
||||
either follow the instructions on the page or use winget,
|
||||
run in cmd as **admin**:
|
||||
|
||||
```
|
||||
winget install --accept-source-agreements chocolatey.chocolatey
|
||||
```
|
||||
|
||||
2. install all requirements using choco, exit the previous cmd and
|
||||
open a new one so that choco path is set, and run in cmd as **admin**:
|
||||
open a new one so that choco path is set, and run in cmd as **admin**:
|
||||
|
||||
```
|
||||
choco install -y neovim git ripgrep wget fd unzip gzip mingw make
|
||||
```
|
||||
|
||||
</details>
|
||||
<details><summary>WSL (Windows Subsystem for Linux)</summary>
|
||||
|
||||
|
@ -197,9 +202,20 @@ sudo add-apt-repository ppa:neovim-ppa/unstable -y
|
|||
sudo apt update
|
||||
sudo apt install make gcc ripgrep unzip git xclip neovim
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
#### Linux Install
|
||||
|
||||
<details><summary>Arch Linux Install Steps</summary>
|
||||
|
||||
```
|
||||
sudo pacman -S neovim make gcc ripgrep unzip git xclip
|
||||
# If you need additional packages from AUR, use yay:
|
||||
# yay -S neovim-git # For the git version of neovim
|
||||
```
|
||||
|
||||
</details>
|
||||
<details><summary>Ubuntu Install Steps</summary>
|
||||
|
||||
```
|
||||
|
@ -207,6 +223,7 @@ sudo add-apt-repository ppa:neovim-ppa/unstable -y
|
|||
sudo apt update
|
||||
sudo apt install make gcc ripgrep unzip git xclip neovim
|
||||
```
|
||||
|
||||
</details>
|
||||
<details><summary>Debian Install Steps</summary>
|
||||
|
||||
|
@ -224,12 +241,14 @@ sudo tar -C /opt -xzf nvim-linux-x86_64.tar.gz
|
|||
# make it available in /usr/local/bin, distro installs to /usr/bin
|
||||
sudo ln -sf /opt/nvim-linux-x86_64/bin/nvim /usr/local/bin/
|
||||
```
|
||||
|
||||
</details>
|
||||
<details><summary>Fedora Install Steps</summary>
|
||||
|
||||
```
|
||||
sudo dnf install -y gcc make git ripgrep fd-find unzip neovim
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
<details><summary>Arch Install Steps</summary>
|
||||
|
@ -237,5 +256,5 @@ sudo dnf install -y gcc make git ripgrep fd-find unzip neovim
|
|||
```
|
||||
sudo pacman -S --noconfirm --needed gcc make git ripgrep fd unzip neovim
|
||||
```
|
||||
</details>
|
||||
|
||||
</details>
|
||||
|
|
179
debug.lua.bak
179
debug.lua.bak
|
@ -1,179 +0,0 @@
|
|||
-- debug.lua
|
||||
--
|
||||
-- Shows how to use the DAP plugin to debug your code.
|
||||
--
|
||||
-- Primarily focused on configuring the debugger for Go, but can
|
||||
-- be extended to other languages as well. That's why it's called
|
||||
-- kickstart.nvim and not kitchen-sink.nvim ;)
|
||||
|
||||
return {
|
||||
-- NOTE: Yes, you can install new plugins here!
|
||||
'mfussenegger/nvim-dap',
|
||||
-- NOTE: And you can specify dependencies as well
|
||||
dependencies = {
|
||||
-- Creates a beautiful debugger UI
|
||||
'rcarriga/nvim-dap-ui',
|
||||
|
||||
-- Required dependency for nvim-dap-ui
|
||||
'nvim-neotest/nvim-nio',
|
||||
|
||||
-- Installs the debug adapters for you
|
||||
'williamboman/mason.nvim',
|
||||
'jay-babu/mason-nvim-dap.nvim',
|
||||
|
||||
-- Add your own debuggers here
|
||||
'leoluz/nvim-dap-go',
|
||||
'mfussenegger/nvim-dap-python', -- Uncomment to add Python support
|
||||
'theHamsta/nvim-dap-virtual-text', -- Uncomment to add virtual text support
|
||||
},
|
||||
keys = {
|
||||
-- Basic debugging keymaps, feel free to change to your liking!
|
||||
{
|
||||
'g@',
|
||||
function()
|
||||
require('dap').continue()
|
||||
end,
|
||||
desc = 'Debug: Start/Continue',
|
||||
},
|
||||
{
|
||||
'<F1>',
|
||||
function()
|
||||
require('dap').step_into()
|
||||
end,
|
||||
desc = 'Debug: Step Into',
|
||||
},
|
||||
{Read debug.lua, lines 1 to 153
|
||||
|
||||
|
||||
'<F2>',
|
||||
function()
|
||||
require('dap').step_over()
|
||||
end,
|
||||
desc = 'Debug: Step Over',
|
||||
},
|
||||
{
|
||||
'<F3>',
|
||||
function()
|
||||
require('dap').step_out()
|
||||
end,
|
||||
desc = 'Debug: Step Out',
|
||||
},
|
||||
{
|
||||
'<leader>.',
|
||||
function()
|
||||
require('dap').toggle_breakpoint()
|
||||
end,
|
||||
desc = 'Debug: Toggle Breakpoint',
|
||||
},
|
||||
{
|
||||
'<leader>B',
|
||||
function()
|
||||
require('dap').set_breakpoint(vim.fn.input 'Breakpoint condition: ')
|
||||
end,
|
||||
desc = 'Debug: Set Breakpoint',
|
||||
},
|
||||
-- Toggle to see last session result. Without this, you can't see session output in case of unhandled exception.
|
||||
{
|
||||
'<F7>',
|
||||
function()
|
||||
require('dapui').toggle()
|
||||
end,
|
||||
desc = 'Debug: See last session result.',
|
||||
},
|
||||
},
|
||||
config = function()
|
||||
local dap = require 'dap'
|
||||
local dapui = require 'dapui'
|
||||
|
||||
require('mason-nvim-dap').setup {
|
||||
-- Makes a best effort to setup the various debuggers with
|
||||
-- reasonable debug configurations
|
||||
automatic_installation = true,
|
||||
|
||||
-- You can provide additional configuration to the handlers,
|
||||
-- see mason-nvim-dap README for more information
|
||||
handlers = {},
|
||||
|
||||
-- You'll need to check that you have the required things installed
|
||||
-- online, please don't ask me how to install them :)
|
||||
ensure_installed = {
|
||||
-- Update this to ensure that you have the debuggers for the langs you want
|
||||
'delve',
|
||||
'debugpy', -- Python debugger
|
||||
},
|
||||
}
|
||||
|
||||
-- Dap UI setup
|
||||
-- For more information, see |:help nvim-dap-ui|
|
||||
dapui.setup {
|
||||
-- Set icons to characters that are more likely to work in every terminal.
|
||||
-- Feel free to remove or use ones that you like more! :)
|
||||
-- Don't feel like these are good choices.
|
||||
icons = { expanded = '▾', collapsed = '▸', current_frame = '*' },
|
||||
controls = {
|
||||
icons = {
|
||||
pause = '⏸',
|
||||
play = '▶',
|
||||
step_into = '⏎',
|
||||
step_over = '⏭',
|
||||
step_out = '⏮',
|
||||
step_back = 'b',
|
||||
run_last = '▶▶',
|
||||
terminate = '⏹',
|
||||
disconnect = '⏏',
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
-- Change breakpoint icons
|
||||
-- vim.api.nvim_set_hl(0, 'DapBreak', { fg = '#e51400' })
|
||||
-- vim.api.nvim_set_hl(0, 'DapStop', { fg = '#ffcc00' })
|
||||
-- local breakpoint_icons = vim.g.have_nerd_font
|
||||
-- and { Breakpoint = '', BreakpointCondition = '', BreakpointRejected = '', LogPoint = '', Stopped = '' }
|
||||
-- or { Breakpoint = '●', BreakpointCondition = '⊜', BreakpointRejected = '⊘', LogPoint = '◆', Stopped = '⭔' }
|
||||
-- for type, icon in pairs(breakpoint_icons) do
|
||||
-- local tp = 'Dap' .. type
|
||||
-- local hl = (type == 'Stopped') and 'DapStop' or 'DapBreak'
|
||||
-- vim.fn.sign_define(tp, { text = icon, texthl = hl, numhl = hl })
|
||||
-- end
|
||||
|
||||
dap.listeners.after.event_initialized['dapui_config'] = dapui.open
|
||||
dap.listeners.before.event_terminated['dapui_config'] = dapui.close
|
||||
dap.listeners.before.event_exited['dapui_config'] = dapui.close
|
||||
|
||||
-- Install golang specific config
|
||||
require('dap-go').setup {
|
||||
delve = {
|
||||
-- On Windows delve must be run attached or it crashes.
|
||||
-- See https://github.com/leoluz/nvim-dap-go/blob/main/README.md#configuring
|
||||
detached = vim.fn.has 'win32' == 0,
|
||||
},
|
||||
}
|
||||
|
||||
-- Python configuration
|
||||
require('dap-python').setup('python') -- Uses the Python in your PATH
|
||||
require('dap-python').test_runner = 'pytest'
|
||||
|
||||
-- Make sure the configurations table exists
|
||||
dap.configurations.python = dap.configurations.python or {}
|
||||
|
||||
-- Add some common Python debug configurations
|
||||
table.insert(dap.configurations.python, {
|
||||
type = 'python',
|
||||
request = 'launch',
|
||||
name = 'Launch file',
|
||||
program = '${file}',
|
||||
pythonPath = function()
|
||||
-- Try to detect python path from virtual environment
|
||||
local cwd = vim.fn.getcwd()
|
||||
if vim.fn.executable(cwd .. '/venv/bin/python') == 1 then
|
||||
return cwd .. '/venv/bin/python'
|
||||
elseif vim.fn.executable(cwd .. '/.venv/bin/python') == 1 then
|
||||
return cwd .. '/.venv/bin/python'
|
||||
else
|
||||
return 'python'
|
||||
end
|
||||
end,
|
||||
})
|
||||
end,
|
||||
}
|
|
@ -1,9 +0,0 @@
|
|||
# Disable flow control (Ctrl+S, Ctrl+Q) in the terminal
|
||||
# This allows Ctrl+S to be used for saving in Neovim
|
||||
stty -ixon
|
||||
|
||||
# Optional: You can also add this line to make Ctrl+S work in programs that use readline
|
||||
# (like the bash/zsh command line itself)
|
||||
if [ -t 0 ]; then
|
||||
bind -r '\C-s' 2>/dev/null || true
|
||||
fi
|
162
init.lua
162
init.lua
|
@ -91,6 +91,9 @@ local vim = vim
|
|||
vim.g.mapleader = ' '
|
||||
vim.g.maplocalleader = ' '
|
||||
|
||||
-- Test leader key mapping
|
||||
vim.keymap.set('n', '<leader>zz', function() print("Leader key is working!") end, { desc = "Test leader key" })
|
||||
|
||||
-- Set to true if you have a Nerd Font installed and selected in the terminal
|
||||
vim.g.have_nerd_font = true
|
||||
|
||||
|
@ -320,59 +323,112 @@ require('lazy').setup({
|
|||
-- Then, because we use the `opts` key (recommended), the configuration runs
|
||||
-- after the plugin has been loaded as `require(MODULE).setup(opts)`.
|
||||
|
||||
{ -- Useful plugin to show you pending keybinds.
|
||||
'folke/which-key.nvim',
|
||||
event = 'VimEnter', -- Sets the loading event to 'VimEnter'
|
||||
opts = {
|
||||
-- delay between pressing a key and opening which-key (milliseconds)
|
||||
-- this setting is independent of vim.o.timeoutlen
|
||||
delay = 0,
|
||||
icons = {
|
||||
-- set icon mappings to true if you have a Nerd Font
|
||||
mappings = vim.g.have_nerd_font,
|
||||
-- If you are using a Nerd Font: set icons.keys to an empty table which will use the
|
||||
-- default which-key.nvim defined Nerd Font icons, otherwise define a string table
|
||||
keys = vim.g.have_nerd_font and {} or {
|
||||
Up = '<Up> ',
|
||||
Down = '<Down> ',
|
||||
Left = '<Left> ',
|
||||
Right = '<Right> ',
|
||||
C = '<C-…> ',
|
||||
M = '<M-…> ',
|
||||
D = '<D-…> ',
|
||||
S = '<S-…> ',
|
||||
CR = '<CR> ',
|
||||
Esc = '<Esc> ',
|
||||
ScrollWheelDown = '<ScrollWheelDown> ',
|
||||
ScrollWheelUp = '<ScrollWheelUp> ',
|
||||
NL = '<NL> ',
|
||||
BS = '<BS> ',
|
||||
Space = '<Space> ',
|
||||
Tab = '<Tab> ',
|
||||
F1 = '<F1>',
|
||||
F2 = '<F2>',
|
||||
F3 = '<F3>',
|
||||
F4 = '<F4>',
|
||||
F5 = '<F5>',
|
||||
F6 = '<F6>',
|
||||
F7 = '<F7>',
|
||||
F8 = '<F8>',
|
||||
F9 = '<F9>',
|
||||
F10 = '<F10>',
|
||||
F11 = '<F11>',
|
||||
F12 = '<F12>',
|
||||
},
|
||||
},
|
||||
-- NOTE: which-key is now configured in custom/plugins/which_key_integration.lua
|
||||
-- { -- Useful plugin to show you pending keybinds.
|
||||
-- 'folke/which-key.nvim',
|
||||
-- event = 'VimEnter', -- Sets the loading event to 'VimEnter'
|
||||
-- opts = {
|
||||
-- -- delay between pressing a key and opening which-key (milliseconds)
|
||||
-- -- this setting is independent of vim.o.timeoutlen
|
||||
-- delay = 0,
|
||||
-- icons = {
|
||||
-- -- set icon mappings to true if you have a Nerd Font
|
||||
-- mappings = vim.g.have_nerd_font,
|
||||
-- -- If you are using a Nerd Font: set icons.keys to an empty table which will use the
|
||||
-- -- default which-key.nvim defined Nerd Font icons, otherwise define a string table
|
||||
-- keys = vim.g.have_nerd_font and {} or {
|
||||
-- Up = '<Up> ',
|
||||
-- Down = '<Down> ', -- { -- Useful plugin to show you pending keybinds.
|
||||
-- 'folke/which-key.nvim',
|
||||
-- event = 'VimEnter', -- Sets the loading event to 'VimEnter'
|
||||
-- opts = {
|
||||
-- -- delay between pressing a key and opening which-key (milliseconds)
|
||||
-- -- this setting is independent of vim.o.timeoutlen
|
||||
-- delay = 0,
|
||||
-- icons = {
|
||||
-- -- set icon mappings to true if you have a Nerd Font
|
||||
-- mappings = vim.g.have_nerd_font,
|
||||
-- -- If you are using a Nerd Font: set icons.keys to an empty table which will use the
|
||||
-- -- default which-key.nvim defined Nerd Font icons, otherwise define a string table
|
||||
-- keys = vim.g.have_nerd_font and {} or {
|
||||
-- Up = '<Up> ',
|
||||
-- Down = '<Down> ',
|
||||
-- Left = '<Left> ',
|
||||
-- Right = '<Right> ',
|
||||
-- C = '<C-…> ',
|
||||
-- M = '<M-…> ',
|
||||
-- D = '<D-…> ',
|
||||
-- S = '<S-…> ',
|
||||
-- CR = '<CR> ',
|
||||
-- Esc = '<Esc> ',
|
||||
-- ScrollWheelDown = '<ScrollWheelDown> ',
|
||||
-- ScrollWheelUp = '<ScrollWheelUp> ',
|
||||
-- NL = '<NL> ',
|
||||
-- BS = '<BS> ',
|
||||
-- Space = '<Space> ',
|
||||
-- Tab = '<Tab> ',
|
||||
-- F1 = '<F1>',
|
||||
-- F2 = '<F2>',
|
||||
-- F3 = '<F3>',
|
||||
-- F4 = '<F4>',
|
||||
-- F5 = '<F5>',
|
||||
-- F6 = '<F6>',
|
||||
-- F7 = '<F7>',
|
||||
-- F8 = '<F8>',
|
||||
-- F9 = '<F9>',
|
||||
-- F10 = '<F10>',
|
||||
-- F11 = '<F11>',
|
||||
-- F12 = '<F12>',
|
||||
-- },
|
||||
-- },
|
||||
|
||||
-- Document existing key chains
|
||||
spec = {
|
||||
{ '<leader>s', group = '[S]earch' },
|
||||
{ '<leader>t', group = '[T]oggle' },
|
||||
{ '<leader>h', group = 'Git [H]unk', mode = { 'n', 'v' } },
|
||||
{ '<leader>b', group = '[B]uffer' },
|
||||
},
|
||||
},
|
||||
},
|
||||
-- -- Document existing key chains
|
||||
-- spec = {
|
||||
-- { '<leader>s', group = '[S]earch' },
|
||||
-- { '<leader>t', group = '[T]oggle' },
|
||||
-- { '<leader>h', group = 'Git [H]unk', mode = { 'n', 'v' } },
|
||||
-- { '<leader>b', group = '[B]uffer' },
|
||||
-- },
|
||||
-- },
|
||||
-- },
|
||||
-- Left = '<Left> ',
|
||||
-- Right = '<Right> ',
|
||||
-- C = '<C-…> ',
|
||||
-- M = '<M-…> ',
|
||||
-- D = '<D-…> ',
|
||||
-- S = '<S-…> ',
|
||||
-- CR = '<CR> ',
|
||||
-- Esc = '<Esc> ',
|
||||
-- ScrollWheelDown = '<ScrollWheelDown> ',
|
||||
-- ScrollWheelUp = '<ScrollWheelUp> ',
|
||||
-- NL = '<NL> ',
|
||||
-- BS = '<BS> ',
|
||||
-- Space = '<Space> ',
|
||||
-- Tab = '<Tab> ',
|
||||
-- F1 = '<F1>',
|
||||
-- F2 = '<F2>',
|
||||
-- F3 = '<F3>',
|
||||
-- F4 = '<F4>',
|
||||
-- F5 = '<F5>',
|
||||
-- F6 = '<F6>',
|
||||
-- F7 = '<F7>',
|
||||
-- F8 = '<F8>',
|
||||
-- F9 = '<F9>',
|
||||
-- F10 = '<F10>',
|
||||
-- F11 = '<F11>',
|
||||
-- F12 = '<F12>',
|
||||
-- },
|
||||
-- },
|
||||
|
||||
-- -- Document existing key chains
|
||||
-- spec = {
|
||||
-- { '<leader>s', group = '[S]earch' },
|
||||
-- { '<leader>t', group = '[T]oggle' },
|
||||
-- { '<leader>h', group = 'Git [H]unk', mode = { 'n', 'v' } },
|
||||
-- { '<leader>b', group = '[B]uffer' },
|
||||
-- },
|
||||
-- },
|
||||
-- },
|
||||
|
||||
-- NOTE: Plugins can specify dependencies.
|
||||
--
|
||||
|
@ -458,7 +514,7 @@ require('lazy').setup({
|
|||
vim.keymap.set('n', '<leader>sd', builtin.diagnostics, { desc = '[S]earch [D]iagnostics' })
|
||||
vim.keymap.set('n', '<leader>sr', builtin.resume, { desc = '[S]earch [R]esume' })
|
||||
vim.keymap.set('n', '<leader>s.', builtin.oldfiles, { desc = '[S]earch Recent Files ("." for repeat)' })
|
||||
vim.keymap.set('n', '<leader><leader>', function() builtin.buffers() end, { desc = '[ ] Find existing buffers' })
|
||||
vim.keymap.set('n', '<leader>bb', function() builtin.buffers() end, { desc = '[B]uffers [B]rowse' })
|
||||
|
||||
-- Slightly advanced example of overriding default behavior and theme
|
||||
vim.keymap.set('n', '<leader>/', function()
|
||||
|
|
50
lua/custom/keybinding_cheatsheet.md
Normal file
50
lua/custom/keybinding_cheatsheet.md
Normal file
|
@ -0,0 +1,50 @@
|
|||
# Neovim Keybinding Cheatsheet
|
||||
|
||||
## General
|
||||
|
||||
| Key | Mode | Description |
|
||||
| ----------- | ---- | ----------------------- |
|
||||
| `<leader>w` | n | Save file |
|
||||
| `<leader>q` | n | Quit |
|
||||
| `<leader>Q` | n | Force quit all |
|
||||
| `<leader>W` | n | Save and quit |
|
||||
| `<leader>/` | n | Clear search highlights |
|
||||
| `<Esc>` | n | Clear highlights |
|
||||
|
||||
## Navigation
|
||||
|
||||
### Window Navigation
|
||||
|
||||
| Key | Mode | Description |
|
||||
| ------- | ---- | -------------------- |
|
||||
| `<C-h>` | n | Move to left window |
|
||||
| `<C-j>` | n | Move to lower window |
|
||||
| `<C-k>` | n | Move to upper window |
|
||||
| `<C-l>` | n | Move to right window |
|
||||
|
||||
### Window Management (`<leader>w`)
|
||||
|
||||
| Key | Mode | Description |
|
||||
| ------------ | ---- | ------------------------- |
|
||||
| `<leader>wv` | n | Split window vertically |
|
||||
| `<leader>ws` | n | Split window horizontally |
|
||||
| `<leader>wq` | n | Close current window |
|
||||
| `<leader>wo` | n | Close other windows |
|
||||
| `<leader>wh` | n | Go to left window |
|
||||
| `<leader>wj` | n | Go to lower window |
|
||||
| `<leader>wk` | n | Go to upper window |
|
||||
| `<leader>wl` | n | Go to right window |
|
||||
|
||||
### Window Resizing
|
||||
|
||||
| Key | Mode | Description |
|
||||
| ----------- | ---- | ---------------------- |
|
||||
| `<M-Up>` | n | Increase window height |
|
||||
| `<M-Down>` | n | Decrease window height |
|
||||
| `<M-Left>` | n | Decrease window width |
|
||||
| `<M-Right>` | n | Increase window width |
|
||||
|
||||
### Tab Management (`<leader>t`)
|
||||
|
||||
| Key | Mode | Description |
|
||||
| --- | ---- | ----------- |
|
182
lua/custom/keybindings_ref.md
Normal file
182
lua/custom/keybindings_ref.md
Normal file
|
@ -0,0 +1,182 @@
|
|||
# Neovim Keybindings Reference
|
||||
|
||||
A comprehensive reference for all keybindings in this Neovim configuration, organized by prefix and functionality.
|
||||
|
||||
## General Operations
|
||||
|
||||
- `<leader>w` - Save file
|
||||
- `<leader>q` - Quit
|
||||
- `<leader>Q` - Force quit all
|
||||
- `<leader>W` - Save and quit
|
||||
- `<leader>/` - Clear search highlights
|
||||
- `<Esc>` - Clear highlights
|
||||
|
||||
## Navigation
|
||||
|
||||
### Window Navigation
|
||||
|
||||
- `<C-h>` - Move focus to the left window
|
||||
- `<C-j>` - Move focus to the down window
|
||||
- `<C-k>` - Move focus to the up window
|
||||
- `<C-l>` - Move focus to the right window
|
||||
|
||||
### Window Management (`<leader>w`)
|
||||
|
||||
- `<leader>wv` - Split window vertically
|
||||
- `<leader>ws` - Split window horizontally
|
||||
- `<leader>wq` - Close current window
|
||||
- `<leader>wo` - Close other windows
|
||||
|
||||
### Window Resizing
|
||||
|
||||
- `<M-Up>` - Increase window height
|
||||
- `<M-Down>` - Decrease window height
|
||||
- `<M-Left>` - Decrease window width
|
||||
- `<M-Right>` - Increase window width
|
||||
|
||||
### Tab Management (`<leader>t`)
|
||||
|
||||
- `<leader>tn` - New tab
|
||||
- `<leader>to` - New tab with file
|
||||
- `<leader>tc` - Close tab
|
||||
- `<C-PgDn>` - Next tab
|
||||
- `<C-PgUp>` - Previous tab
|
||||
|
||||
### Buffer Navigation (`<leader>b`)
|
||||
|
||||
- `<leader><leader>` - Find buffers
|
||||
- `<leader>bd` - Delete buffer
|
||||
- `<leader>bn` - Next buffer
|
||||
- `<leader>bp` - Previous buffer
|
||||
- `<leader>bp` - Pick buffer
|
||||
- `<leader>bc` - Pick buffer to close
|
||||
- `<leader>bh` - Previous buffer
|
||||
- `<leader>bl` - Next buffer
|
||||
- `<leader>bH` - Move buffer left
|
||||
- `<leader>bL` - Move buffer right
|
||||
- `<leader>b1-9` - Go to buffer 1-9
|
||||
- `<A-1-9>` - Go to buffer 1-9
|
||||
|
||||
## File Operations (`<leader>f`)
|
||||
|
||||
### File Search (Telescope)
|
||||
|
||||
- `<leader>ff` - Find files
|
||||
- `<leader>fg` - Live grep
|
||||
- `<leader>fb` - Find buffers
|
||||
- `<leader>fh` - Help tags
|
||||
- `<leader>fr` - Recent files
|
||||
- `<leader>fc` - Grep current string
|
||||
- `<leader>fk` - Find keymaps
|
||||
- `<leader>fd` - Search diagnostics
|
||||
- `<leader>fw` - Search current buffer
|
||||
|
||||
### Git Search (`<leader>fg`)
|
||||
|
||||
- `<leader>fgc` - Git commits
|
||||
- `<leader>fgb` - Git branches
|
||||
- `<leader>fgs` - Git status
|
||||
- `<leader>fgt` - Git stash
|
||||
|
||||
### File Explorer
|
||||
|
||||
- `<leader>e` - Open file explorer
|
||||
|
||||
## Editing
|
||||
|
||||
### Line Movement
|
||||
|
||||
- `<A-j>` - Move line down
|
||||
- `<A-k>` - Move line up
|
||||
- `<A-j>` (visual) - Move selection down
|
||||
- `<A-k>` (visual) - Move selection up
|
||||
|
||||
### Indentation
|
||||
|
||||
- `<` (visual) - Decrease indent
|
||||
- `>` (visual) - Increase indent
|
||||
|
||||
## Terminal (`<leader>tt`)
|
||||
|
||||
- `<leader>tt` - Toggle terminal
|
||||
- `<leader>tf` - Toggle floating terminal
|
||||
- `<leader>th` - Toggle horizontal terminal
|
||||
- `<leader>tv` - Toggle vertical terminal
|
||||
- `<Esc>` (terminal) - Exit terminal mode
|
||||
|
||||
## Diagnostics (`<leader>x`)
|
||||
|
||||
- `<leader>xx` - Toggle trouble
|
||||
- `<leader>xw` - Toggle workspace diagnostics
|
||||
- `<leader>xd` - Toggle document diagnostics / Open diagnostic float
|
||||
- `<leader>xq` - Toggle quickfix
|
||||
- `<leader>xl` - Toggle location list / Open diagnostic list
|
||||
- `[d` - Previous diagnostic
|
||||
- `]d` - Next diagnostic
|
||||
|
||||
## Plugin-specific Keybindings
|
||||
|
||||
### Harpoon (`<leader>h`)
|
||||
|
||||
- `<leader>ha` - Add file to harpoon
|
||||
- `<leader>hh` - Toggle quick menu
|
||||
- `<leader>h1-9` - Jump to file 1-9
|
||||
|
||||
### LeetCode (`<leader>l`)
|
||||
|
||||
- `<leader>ll` - Open LeetCode
|
||||
- `<leader>ld` - Daily Challenge
|
||||
- `<leader>lr` - Random Problem
|
||||
- `<leader>ls` - Submit Solution
|
||||
- `<leader>lt` - Test Solution
|
||||
- `<leader>lm` - LeetCode Menu
|
||||
- `<leader>li` - Problem Info
|
||||
- `<leader>lc` - Toggle Console
|
||||
- `<leader>la` - Switch Tab
|
||||
|
||||
### Neorg (`<leader>n`)
|
||||
|
||||
- `<leader>ni` - Neorg index
|
||||
- `<leader>nr` - Return from workspace
|
||||
- `<leader>nt` - Toggle concealer
|
||||
- `<leader>nm` - Inject metadata
|
||||
|
||||
#### Neorg Journal (`<leader>nj`)
|
||||
|
||||
- `<leader>njj` - Today's journal entry
|
||||
- `<leader>njt` - Tomorrow's journal entry
|
||||
- `<leader>njy` - Yesterday's journal entry
|
||||
|
||||
#### Neorg Workspace (`<leader>nw`)
|
||||
|
||||
- `<leader>nwn` - Switch to notes workspace
|
||||
- `<leader>nww` - Switch to work workspace
|
||||
- `<leader>nwp` - Switch to personal workspace
|
||||
|
||||
#### Neorg Export (`<leader>ne`)
|
||||
|
||||
- `<leader>neh` - Export to HTML
|
||||
- `<leader>nem` - Export to Markdown
|
||||
- `<leader>nep` - Export to PDF
|
||||
|
||||
### LSP (`<leader>ls`)
|
||||
|
||||
- `<leader>lsr` - Rename symbol
|
||||
- `<leader>lsa` - Code actions
|
||||
- `<leader>lsf` - Format document
|
||||
- `<leader>lsd` - Go to definition
|
||||
- `<leader>lst` - Go to type definition
|
||||
- `<leader>lsD` - Go to declaration
|
||||
- `<leader>lsi` - Go to implementation
|
||||
- `<leader>lsr` - Go to references
|
||||
|
||||
### Test (`<leader>te`)
|
||||
|
||||
- `<leader>ter` - Run test
|
||||
- `<leader>tes` - Run test suite
|
||||
- `<leader>tef` - Run test file
|
||||
- `<leader>tel` - Run last test
|
||||
|
||||
### Code/Copilot (`<leader>c`)
|
||||
|
||||
- Various code and Copilot-related commands
|
187
lua/custom/keybindings_reference.md
Normal file
187
lua/custom/keybindings_reference.md
Normal file
|
@ -0,0 +1,187 @@
|
|||
# Neovim Keybindings Reference
|
||||
|
||||
This document provides a comprehensive reference for all keybindings in this Neovim configuration, organized by category.
|
||||
|
||||
## Navigation
|
||||
|
||||
### Window Navigation
|
||||
|
||||
- `<C-h>` - Move focus to the left window
|
||||
- `<C-j>` - Move focus to the down window
|
||||
- `<C-k>` - Move focus to the up window
|
||||
- `<C-l>` - Move focus to the right window
|
||||
|
||||
### Window Management
|
||||
|
||||
- `<leader>wv` - Split window vertically
|
||||
- `<leader>ws` - Split window horizontally
|
||||
- `<leader>wq` - Close current window
|
||||
- `<leader>wo` - Close other windows
|
||||
|
||||
### Window Resizing
|
||||
|
||||
- `<M-Up>` - Increase window height
|
||||
- `<M-Down>` - Decrease window height
|
||||
- `<M-Left>` - Decrease window width
|
||||
- `<M-Right>` - Increase window width
|
||||
|
||||
### Tab Management
|
||||
|
||||
- `<leader>tn` - New tab
|
||||
- `<leader>to` - New tab with file
|
||||
- `<leader>tc` - Close tab
|
||||
- `<C-PgDn>` - Next tab
|
||||
- `<C-PgUp>` - Previous tab
|
||||
|
||||
### Buffer Navigation
|
||||
|
||||
- `<leader><leader>` - Find buffers
|
||||
- `<leader>bd` - Delete buffer
|
||||
- `<leader>bn` - Next buffer
|
||||
- `<leader>bp` - Previous buffer
|
||||
|
||||
## File Operations
|
||||
|
||||
### General Operations
|
||||
|
||||
- `<leader>w` - Save file
|
||||
- `<leader>q` - Quit
|
||||
- `<leader>Q` - Force quit all
|
||||
- `<leader>W` - Save and quit
|
||||
- `<leader>/` - Clear search highlights
|
||||
- `<Esc>` - Clear highlights
|
||||
|
||||
### File Explorer
|
||||
|
||||
- `<leader>e` - Open file explorer
|
||||
|
||||
## Search and Navigation (Telescope)
|
||||
|
||||
### General Search
|
||||
|
||||
- `<leader>ff` - Find files
|
||||
- `<leader>fg` - Live grep
|
||||
- `<leader>fb` - Find buffers
|
||||
- `<leader>fh` - Help tags
|
||||
- `<leader>fr` - Recent files
|
||||
- `<leader>fc` - Grep current string
|
||||
- `<leader>fk` - Find keymaps
|
||||
- `<leader>fd` - Search diagnostics
|
||||
- `<leader>fw` - Search current buffer
|
||||
|
||||
### Git Search
|
||||
|
||||
- `<leader>fgc` - Git commits
|
||||
- `<leader>fgb` - Git branches
|
||||
- `<leader>fgs` - Git status
|
||||
- `<leader>fgt` - Git stash
|
||||
|
||||
## Bufferline
|
||||
|
||||
### Buffer Actions
|
||||
|
||||
- `<leader>bp` - Pick buffer
|
||||
- `<leader>bc` - Pick buffer to close
|
||||
- `<leader>bh` - Previous buffer
|
||||
- `<leader>bl` - Next buffer
|
||||
- `<leader>bH` - Move buffer left
|
||||
- `<leader>bL` - Move buffer right
|
||||
- `<leader>b1-9` - Go to buffer 1-9
|
||||
- `<A-1-9>` - Go to buffer 1-9
|
||||
|
||||
## Editing
|
||||
|
||||
### Line Movement
|
||||
|
||||
- `<A-j>` - Move line down
|
||||
- `<A-k>` - Move line up
|
||||
- `<A-j>` (visual) - Move selection down
|
||||
- `<A-k>` (visual) - Move selection up
|
||||
|
||||
### Indentation
|
||||
|
||||
- `<` (visual) - Decrease indent
|
||||
- `>` (visual) - Increase indent
|
||||
|
||||
## Terminal
|
||||
|
||||
### Terminal Commands
|
||||
|
||||
- `<leader>tt` - Toggle terminal
|
||||
- `<leader>tf` - Toggle floating terminal
|
||||
- `<leader>th` - Toggle horizontal terminal
|
||||
- `<leader>tv` - Toggle vertical terminal
|
||||
- `<Esc>` (terminal) - Exit terminal mode
|
||||
|
||||
## Diagnostics
|
||||
|
||||
### Diagnostic Navigation
|
||||
|
||||
- `<leader>xd` - Open diagnostic float
|
||||
- `<leader>xl` - Open diagnostic list
|
||||
- `[d` - Previous diagnostic
|
||||
- `]d` - Next diagnostic
|
||||
|
||||
## Plugin-specific Keybindings
|
||||
|
||||
### Harpoon
|
||||
|
||||
- `<leader>ha` - Add file to harpoon
|
||||
- `<leader>hh` - Toggle quick menu
|
||||
- `<leader>h1-9` - Jump to file 1-9
|
||||
|
||||
### LeetCode
|
||||
|
||||
- `<leader>ll` - Open LeetCode
|
||||
- `<leader>ld` - Daily Challenge
|
||||
- `<leader>lr` - Random Problem
|
||||
- `<leader>ls` - Submit Solution
|
||||
- `<leader>lt` - Test Solution
|
||||
- `<leader>lm` - LeetCode Menu
|
||||
- `<leader>li` - Problem Info
|
||||
- `<leader>lc` - Toggle Console
|
||||
- `<leader>la` - Switch Tab
|
||||
|
||||
### Trouble/Diagnostics
|
||||
|
||||
- `<leader>xx` - Toggle trouble
|
||||
- `<leader>xw` - Toggle workspace diagnostics
|
||||
- `<leader>xd` - Toggle document diagnostics
|
||||
- `<leader>xq` - Toggle quickfix
|
||||
- `<leader>xl` - Toggle location list
|
||||
|
||||
### Neorg
|
||||
|
||||
- `<leader>ni` - Neorg index
|
||||
- `<leader>nr` - Return from workspace
|
||||
- `<leader>nt` - Toggle concealer
|
||||
- `<leader>nm` - Inject metadata
|
||||
|
||||
#### Neorg Journal
|
||||
|
||||
- `<leader>njj` - Today's journal entry
|
||||
- `<leader>njt` - Tomorrow's journal entry
|
||||
- `<leader>njy` - Yesterday's journal entry
|
||||
|
||||
#### Neorg Workspace
|
||||
|
||||
- `<leader>nwn` - Switch to notes workspace
|
||||
- `<leader>nww` - Switch to work workspace
|
||||
- `<leader>nwp` - Switch to personal workspace
|
||||
|
||||
#### Neorg Export
|
||||
|
||||
- `<leader>neh` - Export to HTML
|
||||
- `<leader>nem` - Export to Markdown
|
||||
- `<leader>nep` - Export to PDF
|
||||
|
||||
### LSP
|
||||
|
||||
- `<leader>lsr` - Rename symbol
|
||||
- `<leader>lsa` - Code actions
|
||||
- `<leader>lsf` - Format document
|
||||
- `<leader>lsd` - Go to definition
|
||||
- `<leader>lst` - Go to type definition
|
||||
- `<leader>lsD` - Go to declaration
|
||||
- `<leader>lsi` - Go to implementation
|
||||
- `<leader>lsr` - Go to references
|
113
lua/custom/keymaps.lua
Normal file
113
lua/custom/keymaps.lua
Normal file
|
@ -0,0 +1,113 @@
|
|||
--[[
|
||||
Centralized keymaps configuration
|
||||
|
||||
This file contains all the keybindings for the Neovim configuration,
|
||||
organized by category for better readability and maintenance.
|
||||
|
||||
Structure:
|
||||
1. General keymaps (save, quit, etc.)
|
||||
2. Navigation keymaps (windows, tabs, etc.)
|
||||
3. UI keymaps (toggle elements, etc.)
|
||||
4. Editing keymaps (formatting, etc.)
|
||||
5. Plugin-specific keymaps
|
||||
]]
|
||||
|
||||
local M = {}
|
||||
|
||||
-- Helper function for setting keymaps with proper labels
|
||||
local function map(mode, lhs, rhs, opts)
|
||||
opts = opts or {}
|
||||
opts.noremap = opts.noremap == nil and true or opts.noremap
|
||||
opts.silent = opts.silent == nil and true or opts.silent
|
||||
vim.keymap.set(mode, lhs, rhs, opts)
|
||||
end
|
||||
|
||||
-- Initialize keymaps
|
||||
function M.setup()
|
||||
--------------------------------------------------
|
||||
-- 1. GENERAL KEYMAPS
|
||||
--------------------------------------------------
|
||||
|
||||
-- Save and quit
|
||||
map('n', '<leader>w', ':w<CR>', { desc = 'Save file' })
|
||||
-- map('n', '<leader>q', ':q<CR>', { desc = 'Quit' })
|
||||
map('n', '<leader>Q', ':qa!<CR>', { desc = 'Force quit all' })
|
||||
map('n', '<leader>W', ':wq<CR>', { desc = 'Save and quit' })
|
||||
|
||||
-- Common operations
|
||||
map('n', '<leader>/', '<cmd>nohlsearch<CR>', { desc = 'Clear search highlights' })
|
||||
map('n', '<Esc>', '<cmd>noh<CR>', { desc = 'Clear highlights' })
|
||||
|
||||
--------------------------------------------------
|
||||
-- 2. NAVIGATION KEYMAPS
|
||||
--------------------------------------------------
|
||||
|
||||
-- Window navigation
|
||||
map('n', '<C-h>', '<C-w>h', { desc = 'Move focus to the left window' })
|
||||
map('n', '<C-j>', '<C-w>j', { desc = 'Move focus to the down window' })
|
||||
map('n', '<C-k>', '<C-w>k', { desc = 'Move focus to the up window' })
|
||||
map('n', '<C-l>', '<C-w>l', { desc = 'Move focus to the right window' })
|
||||
|
||||
-- Window management
|
||||
map('n', '<leader>[', ':vsplit<CR>', { desc = 'Split window vertically' })
|
||||
map('n', '<leader>]', ':split<CR>', { desc = 'Split window horizontally' })
|
||||
map('n', '<leader>wq', '<C-w>q', { desc = 'Close current window' })
|
||||
map('n', '<leader>wo', '<C-w>o', { desc = 'Close other windows' })
|
||||
|
||||
-- Window resizing
|
||||
map('n', '<M-Up>', ':resize +2<CR>', { desc = 'Increase window height' })
|
||||
map('n', '<M-Down>', ':resize -2<CR>', { desc = 'Decrease window height' })
|
||||
map('n', '<M-Left>', ':vertical resize -2<CR>', { desc = 'Decrease window width' })
|
||||
map('n', '<M-Right>', ':vertical resize +2<CR>', { desc = 'Increase window width' })
|
||||
|
||||
-- Tab management (see also plugin-specific keymaps below)
|
||||
map('n', '<leader>tn', ':tabnew<CR>', { desc = 'New tab' })
|
||||
map('n', '<leader>to', ':tabnew<CR>:Telescope find_files<CR>', { desc = 'New tab with file' })
|
||||
map('n', '<leader>tc', ':tabclose<CR>', { desc = 'Close tab' })
|
||||
map('n', '<C-PgDn>', 'gt', { desc = 'Next tab' })
|
||||
map('n', '<C-PgUp>', 'gT', { desc = 'Previous tab' })
|
||||
|
||||
-- Buffer navigation
|
||||
map('n', '<leader>bb', "<cmd>lua require('telescope.builtin').buffers()<CR>", { desc = 'Browse buffers' })
|
||||
map('n', '<leader>bd', ':bd<CR>', { desc = 'Delete buffer' })
|
||||
map('n', '<leader>bn', ':bn<CR>', { desc = 'Next buffer' })
|
||||
map('n', '<leader>bp', ':bp<CR>', { desc = 'Previous buffer' })
|
||||
|
||||
--------------------------------------------------
|
||||
-- 3. UI KEYMAPS
|
||||
--------------------------------------------------
|
||||
|
||||
-- File explorer
|
||||
map('n', '<leader>e', ':Explore<CR>', { desc = 'Open file explorer' })
|
||||
|
||||
-- Terminal
|
||||
map('n', '<leader>tt', ':ToggleTerm<CR>', { desc = 'Toggle terminal' })
|
||||
map('n', '<leader>tf', ':ToggleTerm direction=float<CR>', { desc = 'Toggle floating terminal' })
|
||||
map('n', '<leader>th', ':ToggleTerm direction=horizontal<CR>', { desc = 'Toggle horizontal terminal' })
|
||||
map('n', '<leader>tv', ':ToggleTerm direction=vertical<CR>', { desc = 'Toggle vertical terminal' })
|
||||
map('t', '<Esc>', [[<C-\><C-n>]], { desc = 'Exit terminal mode' })
|
||||
|
||||
-- Diagnostics
|
||||
map('n', '<leader>xd', vim.diagnostic.open_float, { desc = 'Open diagnostic float' })
|
||||
map('n', '<leader>xl', vim.diagnostic.setloclist, { desc = 'Open diagnostic list' })
|
||||
map('n', '[d', vim.diagnostic.goto_prev, { desc = 'Previous diagnostic' })
|
||||
map('n', ']d', vim.diagnostic.goto_next, { desc = 'Next diagnostic' })
|
||||
|
||||
--------------------------------------------------
|
||||
-- 4. EDITING KEYMAPS
|
||||
--------------------------------------------------
|
||||
|
||||
-- Move lines
|
||||
map('n', '<A-j>', ':m .+1<CR>==', { desc = 'Move line down' })
|
||||
map('n', '<A-k>', ':m .-2<CR>==', { desc = 'Move line up' })
|
||||
map('v', '<A-j>', ":m '>+1<CR>gv=gv", { desc = 'Move selection down' })
|
||||
map('v', '<A-k>', ":m '<-2<CR>gv=gv", { desc = 'Move selection up' })
|
||||
|
||||
-- Better indenting
|
||||
map('v', '<', '<gv', { desc = 'Decrease indent and reselect' })
|
||||
map('v', '>', '>gv', { desc = 'Increase indent and reselect' })
|
||||
|
||||
return M
|
||||
end
|
||||
|
||||
return M
|
196
lua/custom/keymaps_reference.md
Normal file
196
lua/custom/keymaps_reference.md
Normal file
|
@ -0,0 +1,196 @@
|
|||
# Neovim Keybindings Reference
|
||||
|
||||
This document provides a comprehensive reference for all keybindings in your Neovim configuration.
|
||||
|
||||
## Table of Contents
|
||||
|
||||
- [General Keybindings](#general-keybindings)
|
||||
- [Navigation](#navigation)
|
||||
- [Editing](#editing)
|
||||
- [UI & Terminal](#ui--terminal)
|
||||
- [Plugin Keybindings](#plugin-keybindings)
|
||||
- [Telescope](#telescope)
|
||||
- [Bufferline](#bufferline)
|
||||
- [Harpoon](#harpoon)
|
||||
- [Git](#git)
|
||||
- [Copilot](#copilot)
|
||||
- [Neorg](#neorg)
|
||||
- [LeetCode](#leetcode)
|
||||
|
||||
## General Keybindings
|
||||
|
||||
| Keybinding | Mode | Description |
|
||||
| ----------- | ------ | ----------------------- |
|
||||
| `<leader>w` | Normal | Save file |
|
||||
| `<leader>q` | Normal | Quit |
|
||||
| `<leader>Q` | Normal | Force quit all |
|
||||
| `<leader>W` | Normal | Save and quit |
|
||||
| `<leader>/` | Normal | Clear search highlights |
|
||||
| `<Esc>` | Normal | Clear highlights |
|
||||
|
||||
## Navigation
|
||||
|
||||
### Window Navigation
|
||||
|
||||
| Keybinding | Mode | Description |
|
||||
| ---------- | ------ | -------------------------- |
|
||||
| `<C-h>` | Normal | Move focus to left window |
|
||||
| `<C-j>` | Normal | Move focus to down window |
|
||||
| `<C-k>` | Normal | Move focus to up window |
|
||||
| `<C-l>` | Normal | Move focus to right window |
|
||||
|
||||
### Window Management
|
||||
|
||||
| Keybinding | Mode | Description |
|
||||
| ------------ | ------ | ------------------------- |
|
||||
| `<leader>wv` | Normal | Split window vertically |
|
||||
| `<leader>ws` | Normal | Split window horizontally |
|
||||
| `<leader>wq` | Normal | Close current window |
|
||||
| `<leader>wo` | Normal | Close other windows |
|
||||
| `<M-Up>` | Normal | Increase window height |
|
||||
| `<M-Down>` | Normal | Decrease window height |
|
||||
| `<M-Left>` | Normal | Decrease window width |
|
||||
| `<M-Right>` | Normal | Increase window width |
|
||||
|
||||
### Tab Management
|
||||
|
||||
| Keybinding | Mode | Description |
|
||||
| ------------ | ------ | ----------------- |
|
||||
| `<leader>tn` | Normal | New tab |
|
||||
| `<leader>to` | Normal | New tab with file |
|
||||
| `<leader>tc` | Normal | Close tab |
|
||||
| `<C-PgDn>` | Normal | Next tab |
|
||||
| `<C-PgUp>` | Normal | Previous tab |
|
||||
|
||||
### Buffer Navigation
|
||||
|
||||
| Keybinding | Mode | Description |
|
||||
| ------------------ | ------ | --------------- |
|
||||
| `<leader><leader>` | Normal | Find buffers |
|
||||
| `<leader>bd` | Normal | Delete buffer |
|
||||
| `<leader>bn` | Normal | Next buffer |
|
||||
| `<leader>bp` | Normal | Previous buffer |
|
||||
|
||||
## Editing
|
||||
|
||||
| Keybinding | Mode | Description |
|
||||
| ---------- | ------ | ---------------------------- |
|
||||
| `<A-j>` | Normal | Move line down |
|
||||
| `<A-k>` | Normal | Move line up |
|
||||
| `<A-j>` | Visual | Move selection down |
|
||||
| `<A-k>` | Visual | Move selection up |
|
||||
| `<` | Visual | Decrease indent and reselect |
|
||||
| `>` | Visual | Increase indent and reselect |
|
||||
|
||||
## UI & Terminal
|
||||
|
||||
| Keybinding | Mode | Description |
|
||||
| ------------ | -------- | -------------------------- |
|
||||
| `<leader>e` | Normal | Open file explorer |
|
||||
| `<leader>tt` | Normal | Toggle terminal |
|
||||
| `<leader>tf` | Normal | Toggle floating terminal |
|
||||
| `<leader>th` | Normal | Toggle horizontal terminal |
|
||||
| `<leader>tv` | Normal | Toggle vertical terminal |
|
||||
| `<Esc>` | Terminal | Exit terminal mode |
|
||||
|
||||
### Diagnostics
|
||||
|
||||
| Keybinding | Mode | Description |
|
||||
| ------------ | ------ | --------------------- |
|
||||
| `<leader>xd` | Normal | Open diagnostic float |
|
||||
| `<leader>xl` | Normal | Open diagnostic list |
|
||||
| `[d` | Normal | Previous diagnostic |
|
||||
| `]d` | Normal | Next diagnostic |
|
||||
|
||||
## Plugin Keybindings
|
||||
|
||||
### Telescope
|
||||
|
||||
| Keybinding | Mode | Description |
|
||||
| ------------- | ------ | ------------------- |
|
||||
| `<leader>ff` | Normal | Find files |
|
||||
| `<leader>fg` | Normal | Live grep |
|
||||
| `<leader>fb` | Normal | Find buffers |
|
||||
| `<leader>fh` | Normal | Help tags |
|
||||
| `<leader>fr` | Normal | Recent files |
|
||||
| `<leader>fc` | Normal | Grep current string |
|
||||
| `<leader>fk` | Normal | Find keymaps |
|
||||
| `<leader>fgc` | Normal | Git commits |
|
||||
| `<leader>fgb` | Normal | Git branches |
|
||||
| `<leader>fgs` | Normal | Git status |
|
||||
|
||||
### Bufferline
|
||||
|
||||
| Keybinding | Mode | Description |
|
||||
| ------------------ | ------ | -------------------- |
|
||||
| `<leader>bp` | Normal | Pick buffer |
|
||||
| `<leader>bc` | Normal | Pick buffer to close |
|
||||
| `<leader>bh` | Normal | Previous buffer |
|
||||
| `<leader>bl` | Normal | Next buffer |
|
||||
| `<leader>bH` | Normal | Move buffer left |
|
||||
| `<leader>bL` | Normal | Move buffer right |
|
||||
| `<A-1>` to `<A-9>` | Normal | Go to buffer 1-9 |
|
||||
|
||||
### Harpoon
|
||||
|
||||
| Keybinding | Mode | Description |
|
||||
| ---------------------------- | ------ | ------------------------ |
|
||||
| `<leader>ha` | Normal | Add file to harpoon |
|
||||
| `<leader>hm` | Normal | Open harpoon menu |
|
||||
| `<leader>h1` to `<leader>h9` | Normal | Jump to harpoon file 1-9 |
|
||||
| `<C-n>` | Normal | Next harpoon file |
|
||||
| `<C-p>` | Normal | Previous harpoon file |
|
||||
|
||||
### Git
|
||||
|
||||
| Keybinding | Mode | Description |
|
||||
| ------------ | ------ | -------------------- |
|
||||
| `<leader>gg` | Normal | Open LazyGit |
|
||||
| `<leader>gc` | Normal | Open LazyGit config |
|
||||
| `<leader>gf` | Normal | LazyGit current file |
|
||||
|
||||
### Copilot
|
||||
|
||||
| Keybinding | Mode | Description |
|
||||
| ------------ | ------ | -------------------------------- |
|
||||
| `<leader>cc` | Normal | Copilot chat |
|
||||
| `<leader>ce` | Normal | Explain code |
|
||||
| `<leader>cf` | Normal | Fix code |
|
||||
| `<leader>co` | Normal | Optimize code |
|
||||
| `<leader>cd` | Normal | Generate documentation |
|
||||
| `<leader>ct` | Normal | Generate tests |
|
||||
| `<leader>cb` | Normal | Check best practices |
|
||||
| `<leader>ce` | Visual | Explain selected code |
|
||||
| `<leader>cf` | Visual | Fix selected code |
|
||||
| `<leader>co` | Visual | Optimize selected code |
|
||||
| `<leader>cd` | Visual | Document selected code |
|
||||
| `<leader>ct` | Visual | Generate tests for selected code |
|
||||
|
||||
### Neorg
|
||||
|
||||
| Keybinding | Mode | Description |
|
||||
| ------------- | ------ | ---------------------------- |
|
||||
| `<leader>nj` | Normal | Open today's journal |
|
||||
| `<leader>nyt` | Normal | Open yesterday's journal |
|
||||
| `<leader>ntm` | Normal | Open tomorrow's journal |
|
||||
| `<leader>nw` | Normal | Open workspace selector |
|
||||
| `<leader>nn` | Normal | Switch to notes workspace |
|
||||
| `<leader>nwp` | Normal | Switch to personal workspace |
|
||||
| `<leader>ntt` | Normal | Generate table of contents |
|
||||
| `<leader>ni` | Normal | Inject metadata |
|
||||
| `<leader>nm` | Normal | Update metadata |
|
||||
| `<leader>nc` | Normal | Toggle concealer |
|
||||
| `<leader>nem` | Normal | Export to markdown |
|
||||
| `<leader>nl` | Normal | Return to last workspace |
|
||||
| `<leader>nu` | Normal | Iterate next list type |
|
||||
| `<leader>np` | Normal | Iterate previous list type |
|
||||
|
||||
### LeetCode
|
||||
|
||||
| Keybinding | Mode | Description |
|
||||
| ------------ | ------ | ------------------------ |
|
||||
| `<leader>ll` | Normal | Open LeetCode |
|
||||
| `<leader>ld` | Normal | LeetCode daily challenge |
|
||||
| `<leader>lr` | Normal | LeetCode random problem |
|
||||
| `<leader>ls` | Normal | Submit LeetCode solution |
|
||||
| `<leader>lt` | Normal | Test LeetCode solution |
|
270
lua/custom/plugin_keymaps.lua
Normal file
270
lua/custom/plugin_keymaps.lua
Normal file
|
@ -0,0 +1,270 @@
|
|||
--[[
|
||||
Plugin-specific keymaps configuration
|
||||
|
||||
This file contains all the plugin-specific keybindings,
|
||||
organized by plugin for better readability and maintenance.
|
||||
]]
|
||||
|
||||
local M = {}
|
||||
|
||||
-- Initialize plugin keymaps
|
||||
function M.setup()
|
||||
-- Ensure vim is available in this scope
|
||||
local vim = vim or _G.vim or require('vim')
|
||||
|
||||
-- Helper function for setting keymaps with proper labels
|
||||
local function map(mode, lhs, rhs, opts)
|
||||
opts = opts or {}
|
||||
opts.noremap = opts.noremap == nil and true or opts.noremap
|
||||
opts.silent = opts.silent == nil and true or opts.silent
|
||||
vim.keymap.set(mode, lhs, rhs, opts)
|
||||
end
|
||||
|
||||
-- Check if which-key is available
|
||||
local which_key_ok, wk = pcall(require, "which-key")
|
||||
if not which_key_ok then
|
||||
vim.notify("Which-key not found, keybindings will be set without groups", vim.log.levels.WARN)
|
||||
end
|
||||
|
||||
--------------------------------------------------
|
||||
-- TELESCOPE
|
||||
--------------------------------------------------
|
||||
local telescope_builtin_ok, builtin = pcall(require, "telescope.builtin")
|
||||
if telescope_builtin_ok then
|
||||
if which_key_ok then
|
||||
wk.add({
|
||||
{ "<leader>f", group = "Find/Files" },
|
||||
{ "<leader>ff", function() builtin.find_files() end, desc = "Find files" },
|
||||
{ "<leader>fg", function() builtin.live_grep() end, desc = "Live grep" },
|
||||
{ "<leader>fb", function() builtin.buffers() end, desc = "Find buffers" },
|
||||
{ "<leader>fh", function() builtin.help_tags() end, desc = "Help tags" },
|
||||
{ "<leader>fr", function() builtin.oldfiles() end, desc = "Recent files" },
|
||||
{ "<leader>fc", function() builtin.grep_string() end, desc = "Grep current string" },
|
||||
{ "<leader>fk", function() builtin.keymaps() end, desc = "Find keymaps" },
|
||||
{ "<leader>fd", function() builtin.diagnostics() end, desc = "Search diagnostics" },
|
||||
{ "<leader>fw", function() builtin.current_buffer_fuzzy_find() end, desc = "Search current buffer" },
|
||||
})
|
||||
|
||||
wk.add({
|
||||
{ "<leader>fg", group = "Git Search" },
|
||||
{ "<leader>fgc", function() builtin.git_commits() end, desc = "Git commits" },
|
||||
{ "<leader>fgb", function() builtin.git_branches() end, desc = "Git branches" },
|
||||
{ "<leader>fgs", function() builtin.git_status() end, desc = "Git status" },
|
||||
{ "<leader>fgt", function() builtin.git_stash() end, desc = "Git stashes" },
|
||||
})
|
||||
|
||||
wk.add({
|
||||
{ "<leader><leader>", function() builtin.buffers() end, desc = "Find buffers (Telescope)" },
|
||||
})
|
||||
else
|
||||
map("n", "<leader>ff", function() builtin.find_files() end, { desc = "Find files" })
|
||||
map("n", "<leader>fg", function() builtin.live_grep() end, { desc = "Live grep" })
|
||||
map("n", "<leader>fb", function() builtin.buffers() end, { desc = "Find buffers" })
|
||||
map("n", "<leader>fh", function() builtin.help_tags() end, { desc = "Help tags" })
|
||||
map("n", "<leader>fr", function() builtin.oldfiles() end, { desc = "Recent files" })
|
||||
map("n", "<leader>fc", function() builtin.grep_string() end, { desc = "Grep current string" })
|
||||
map("n", "<leader>fk", function() builtin.keymaps() end, { desc = "Find keymaps" })
|
||||
map("n", "<leader>fd", function() builtin.diagnostics() end, { desc = "Search diagnostics" })
|
||||
map("n", "<leader>fw", function() builtin.current_buffer_fuzzy_find() end, { desc = "Search current buffer" })
|
||||
map("n", "<leader>fgc", function() builtin.git_commits() end, { desc = "Git commits" })
|
||||
map("n", "<leader>fgb", function() builtin.git_branches() end, { desc = "Git branches" })
|
||||
map("n", "<leader>fgs", function() builtin.git_status() end, { desc = "Git status" })
|
||||
map("n", "<leader>fgt", function() builtin.git_stash() end, { desc = "Git stashes" })
|
||||
map("n", "<leader><leader>", function() builtin.buffers() end, { desc = "Find buffers (Telescope)" })
|
||||
end
|
||||
end
|
||||
|
||||
--------------------------------------------------
|
||||
-- BUFFERLINE
|
||||
--------------------------------------------------
|
||||
local bufferline_commands_ok = pcall(require, 'bufferline')
|
||||
if bufferline_commands_ok then
|
||||
if which_key_ok then
|
||||
wk.add({
|
||||
{ "<leader>b", group = "Buffers" },
|
||||
{ "<leader>bp", "<cmd>BufferLinePick<CR>", desc = "Pick buffer" },
|
||||
{ "<leader>bc", "<cmd>BufferLinePickClose<CR>", desc = "Pick buffer to close" },
|
||||
{ "<leader>bh", "<cmd>BufferLineCyclePrev<CR>", desc = "Previous buffer" },
|
||||
{ "<leader>bl", "<cmd>BufferLineCycleNext<CR>", desc = "Next buffer" },
|
||||
{ "<leader>bH", "<cmd>BufferLineMovePrev<CR>", desc = "Move buffer left" },
|
||||
{ "<leader>bL", "<cmd>BufferLineMoveNext<CR>", desc = "Move buffer right" },
|
||||
{ "<leader>b1", "<cmd>BufferLineGoToBuffer 1<CR>", desc = "Buffer 1" },
|
||||
{ "<leader>b2", "<cmd>BufferLineGoToBuffer 2<CR>", desc = "Buffer 2" },
|
||||
{ "<leader>b3", "<cmd>BufferLineGoToBuffer 3<CR>", desc = "Buffer 3" },
|
||||
{ "<leader>b4", "<cmd>BufferLineGoToBuffer 4<CR>", desc = "Buffer 4" },
|
||||
{ "<leader>b5", "<cmd>BufferLineGoToBuffer 5<CR>", desc = "Buffer 5" },
|
||||
{ "<leader>b6", "<cmd>BufferLineGoToBuffer 6<CR>", desc = "Buffer 6" },
|
||||
{ "<leader>b7", "<cmd>BufferLineGoToBuffer 7<CR>", desc = "Buffer 7" },
|
||||
{ "<leader>b8", "<cmd>BufferLineGoToBuffer 8<CR>", desc = "Buffer 8" },
|
||||
{ "<leader>b9", "<cmd>BufferLineGoToBuffer 9<CR>", desc = "Buffer 9" },
|
||||
})
|
||||
|
||||
local alt_buffer_items = {}
|
||||
for i = 1, 9 do
|
||||
table.insert(alt_buffer_items, {
|
||||
string.format("<A-%d>", i),
|
||||
string.format("<cmd>BufferLineGoToBuffer %d<CR>", i),
|
||||
desc = string.format("Buffer %d", i)
|
||||
})
|
||||
end
|
||||
if #alt_buffer_items > 0 then
|
||||
wk.add(alt_buffer_items)
|
||||
end
|
||||
else
|
||||
map("n", "<leader>bp", "<cmd>BufferLinePick<CR>", { desc = "Pick buffer" })
|
||||
map("n", "<leader>bc", "<cmd>BufferLinePickClose<CR>", { desc = "Pick buffer to close" })
|
||||
map("n", "<leader>bh", "<cmd>BufferLineCyclePrev<CR>", { desc = "Previous buffer" })
|
||||
map("n", "<leader>bl", "<cmd>BufferLineCycleNext<CR>", { desc = "Next buffer" })
|
||||
map("n", "<leader>bH", "<cmd>BufferLineMovePrev<CR>", { desc = "Move buffer left" })
|
||||
map("n", "<leader>bL", "<cmd>BufferLineMoveNext<CR>", { desc = "Move buffer right" })
|
||||
for i = 1, 9 do
|
||||
map("n", string.format("<leader>b%d", i), string.format("<cmd>BufferLineGoToBuffer %d<CR>", i), { desc = string.format("Buffer %d", i) })
|
||||
map("n", string.format("<A-%d>", i), string.format("<cmd>BufferLineGoToBuffer %d<CR>", i), { desc = string.format("Buffer %d", i) })
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
--------------------------------------------------
|
||||
-- HARPOON
|
||||
--------------------------------------------------
|
||||
local harpoon_ok, harpoon = pcall(require, "harpoon")
|
||||
if harpoon_ok then
|
||||
if which_key_ok then
|
||||
local harpoon_items = {
|
||||
{ "<leader>h", group = "Harpoon" },
|
||||
{ "<leader>ha", function() harpoon:list():add() end, desc = "Add file" },
|
||||
{ "<leader>hm", function() harpoon.ui:toggle_quick_menu(harpoon:list()) end, desc = "Toggle menu" },
|
||||
}
|
||||
for i = 1, 9 do
|
||||
table.insert(harpoon_items, {
|
||||
string.format("<leader>h%d", i),
|
||||
function() harpoon:list():select(i) end,
|
||||
desc = string.format("Jump to file %d", i)
|
||||
})
|
||||
end
|
||||
wk.add(harpoon_items)
|
||||
|
||||
wk.add({
|
||||
{ "<C-n>", function() harpoon:list():next() end, desc = "Harpoon next file" },
|
||||
{ "<C-p>", function() harpoon:list():prev() end, desc = "Harpoon previous file" },
|
||||
})
|
||||
else
|
||||
map("n", "<leader>ha", function() harpoon:list():add() end, { desc = "Add file" })
|
||||
map("n", "<leader>hm", function() harpoon.ui:toggle_quick_menu(harpoon:list()) end, { desc = "Toggle menu" })
|
||||
for i = 1, 9 do
|
||||
map("n", string.format("<leader>h%d", i), function() harpoon:list():select(i) end, { desc = string.format("Jump to file %d", i) })
|
||||
end
|
||||
map("n", "<C-n>", function() harpoon:list():next() end, { desc = "Harpoon next file" })
|
||||
map("n", "<C-p>", function() harpoon:list():prev() end, { desc = "Harpoon previous file" })
|
||||
end
|
||||
end
|
||||
|
||||
--------------------------------------------------
|
||||
-- GIT (LAZYGIT)
|
||||
--------------------------------------------------
|
||||
local lazygit_commands_ok = pcall(require, 'lazygit')
|
||||
if lazygit_commands_ok then
|
||||
if which_key_ok then
|
||||
wk.add({
|
||||
{ "<leader>g", group = "Git" },
|
||||
{ "<leader>gg", "<cmd>LazyGit<CR>", desc = "Open LazyGit" },
|
||||
{ "<leader>gc", "<cmd>LazyGitConfig<CR>", desc = "LazyGit Config" },
|
||||
{ "<leader>gf", "<cmd>LazyGitCurrentFile<CR>", desc = "LazyGit Current File" },
|
||||
{ "<leader>gb", "<cmd>LazyGitFilter<CR>", desc = "LazyGit Filter" },
|
||||
{ "<leader>gB", "<cmd>LazyGitFilterCurrentFile<CR>", desc = "LazyGit Filter Current File" },
|
||||
})
|
||||
else
|
||||
map('n', '<leader>gg', '<cmd>LazyGit<CR>', { desc = 'Open LazyGit' })
|
||||
map('n', '<leader>gc', '<cmd>LazyGitConfig<CR>', { desc = 'LazyGit Config' })
|
||||
map('n', '<leader>gf', '<cmd>LazyGitCurrentFile<CR>', { desc = 'LazyGit Current File' })
|
||||
map('n', '<leader>gb', '<cmd>LazyGitFilter<CR>', { desc = 'LazyGit Filter' })
|
||||
map('n', '<leader>gB', '<cmd>LazyGitFilterCurrentFile<CR>', { desc = 'LazyGit Filter Current File' })
|
||||
end
|
||||
end
|
||||
|
||||
--------------------------------------------------
|
||||
-- COMMENTING
|
||||
--------------------------------------------------
|
||||
-- Comment.nvim and other commenting tools are already mapped through their setup
|
||||
|
||||
--------------------------------------------------
|
||||
-- COPILOT CHAT
|
||||
--------------------------------------------------
|
||||
local copilot_chat_ok = pcall(require, 'CopilotChat')
|
||||
if copilot_chat_ok then
|
||||
if which_key_ok then
|
||||
-- Normal mode commands
|
||||
wk.add({
|
||||
{ "<leader>c", group = "Copilot" },
|
||||
{ "<leader>cc", "<cmd>CopilotChat<CR>", desc = "Open Chat" },
|
||||
{ "<leader>ce", "<cmd>CopilotChatExplain<CR>", desc = "Explain Code" },
|
||||
{ "<leader>cf", "<cmd>CopilotChatFixCode<CR>", desc = "Fix Code" },
|
||||
{ "<leader>co", "<cmd>CopilotChatOptimize<CR>", desc = "Optimize Code" },
|
||||
{ "<leader>cd", "<cmd>CopilotChatDocumentation<CR>", desc = "Generate Documentation" },
|
||||
{ "<leader>ct", "<cmd>CopilotChatTests<CR>", desc = "Generate Tests" },
|
||||
{ "<leader>cb", "<cmd>CopilotChatBestPractices<CR>", desc = "Check Best Practices" },
|
||||
{ "<leader>cr", "<cmd>CopilotChatRefactor<CR>", desc = "Refactor Code" },
|
||||
{ "<leader>cs", "<cmd>CopilotChatSummarize<CR>", desc = "Summarize Code" },
|
||||
{ "<leader>ch", "<cmd>CopilotChatHelp<CR>", desc = "Copilot Chat Help" },
|
||||
})
|
||||
|
||||
-- Visual mode commands
|
||||
wk.add({
|
||||
{ "<leader>c", group = "Copilot", mode = "v" },
|
||||
{ "<leader>ce", ":CopilotChatExplain<CR>", desc = "Explain Selected Code", mode = "v" },
|
||||
{ "<leader>cf", ":CopilotChatFixCode<CR>", desc = "Fix Selected Code", mode = "v" },
|
||||
{ "<leader>co", ":CopilotChatOptimize<CR>", desc = "Optimize Selected Code", mode = "v" },
|
||||
{ "<leader>cd", ":CopilotChatDocumentation<CR>", desc = "Document Selected Code", mode = "v" },
|
||||
{ "<leader>ct", ":CopilotChatTests<CR>", desc = "Generate Tests for Selection", mode = "v" },
|
||||
{ "<leader>cr", ":CopilotChatRefactor<CR>", desc = "Refactor Selected Code", mode = "v" },
|
||||
{ "<leader>cs", ":CopilotChatSummarize<CR>", desc = "Summarize Selected Code", mode = "v" },
|
||||
})
|
||||
else
|
||||
map("n", "<leader>cc", "<cmd>CopilotChat<CR>", { desc = "Open Chat" })
|
||||
map("n", "<leader>ce", "<cmd>CopilotChatExplain<CR>", { desc = "Explain Code" })
|
||||
map("n", "<leader>cf", "<cmd>CopilotChatFixCode<CR>", { desc = "Fix Code" })
|
||||
map("n", "<leader>co", "<cmd>CopilotChatOptimize<CR>", { desc = "Optimize Code" })
|
||||
map("n", "<leader>cd", "<cmd>CopilotChatDocumentation<CR>", { desc = "Generate Documentation" })
|
||||
map("n", "<leader>ct", "<cmd>CopilotChatTests<CR>", { desc = "Generate Tests" })
|
||||
map("n", "<leader>cb", "<cmd>CopilotChatBestPractices<CR>", { desc = "Check Best Practices" })
|
||||
map("n", "<leader>cr", "<cmd>CopilotChatRefactor<CR>", { desc = "Refactor Code" })
|
||||
map("n", "<leader>cs", "<cmd>CopilotChatSummarize<CR>", { desc = "Summarize Code" })
|
||||
map("n", "<leader>ch", "<cmd>CopilotChatHelp<CR>", { desc = "Copilot Chat Help" })
|
||||
|
||||
map("v", "<leader>ce", ":CopilotChatExplain<CR>", { desc = "Explain Selected Code" })
|
||||
map("v", "<leader>cf", ":CopilotChatFixCode<CR>", { desc = "Fix Selected Code" })
|
||||
map("v", "<leader>co", ":CopilotChatOptimize<CR>", { desc = "Optimize Selected Code" })
|
||||
map("v", "<leader>cd", ":CopilotChatDocumentation<CR>", { desc = "Document Selected Code" })
|
||||
map("v", "<leader>ct", ":CopilotChatTests<CR>", { desc = "Generate Tests for Selection" })
|
||||
map("v", "<leader>cr", ":CopilotChatRefactor<CR>", { desc = "Refactor Selected Code" })
|
||||
map("v", "<leader>cs", ":CopilotChatSummarize<CR>", { desc = "Summarize Selected Code" })
|
||||
end
|
||||
end
|
||||
|
||||
--------------------------------------------------
|
||||
-- LEETCODE
|
||||
--------------------------------------------------
|
||||
local leetcode_ok = pcall(require, 'leetcode')
|
||||
if leetcode_ok then
|
||||
if which_key_ok then
|
||||
wk.add({
|
||||
{ "<leader>l", group = "LeetCode" },
|
||||
{ "<leader>ll", "<cmd>Leet<CR>", desc = "Open LeetCode" },
|
||||
{ "<leader>ld", "<cmd>Leet daily<CR>", desc = "LeetCode daily challenge" },
|
||||
{ "<leader>lr", "<cmd>Leet random<CR>", desc = "LeetCode random problem" },
|
||||
{ "<leader>ls", "<cmd>Leet submit<CR>", desc = "Submit LeetCode solution" },
|
||||
{ "<leader>la", "<cmd>Leet tabs<CR>", desc = "Switch tab" },
|
||||
})
|
||||
else
|
||||
map('n', '<leader>ll', '<cmd>Leet<CR>', { desc = 'Open LeetCode' })
|
||||
map('n', '<leader>ld', '<cmd>Leet daily<CR>', { desc = 'LeetCode daily challenge' })
|
||||
map('n', '<leader>lr', '<cmd>Leet random<CR>', { desc = 'LeetCode random problem' })
|
||||
map('n', '<leader>ls', '<cmd>Leet submit<CR>', { desc = 'Submit LeetCode solution' })
|
||||
map('n', '<leader>la', '<cmd>Leet tabs<CR>', { desc = 'Switch tab' })
|
||||
end
|
||||
end
|
||||
|
||||
return M
|
||||
end
|
||||
|
||||
return M
|
|
@ -1,192 +1,287 @@
|
|||
-- filepath: /home/kali/.config/nvim/lua/custom/plugins/copilot-chat.lua
|
||||
-- GitHub Copilot Chat configuration
|
||||
-- An advanced setup for Copilot Chat in Neovim
|
||||
--gitHub Copilot Chat configuration - Latest v3+ setup
|
||||
-- Comprehensive configuration with all features and working keymaps
|
||||
-- https://github.com/CopilotC-Nvim/CopilotChat.nvim
|
||||
|
||||
-- Declare vim as global
|
||||
local vim = vim
|
||||
|
||||
return {
|
||||
"CopilotC-Nvim/CopilotChat.nvim",
|
||||
branch = "main", -- Ensure we're using the stable main branch
|
||||
dependencies = {
|
||||
-- Dependencies for CopilotChat
|
||||
{ "github/copilot.vim" }, -- The base Copilot plugin
|
||||
{ "nvim-lua/plenary.nvim" }, -- Common Lua functions
|
||||
{ "nvim-telescope/telescope.nvim" }, -- For nice UI integration
|
||||
{ "nvim-tree/nvim-web-devicons" }, -- Icons for enhanced UI
|
||||
{ "github/copilot.vim" }, -- or zbirenbaum/copilot.lua
|
||||
{ "nvim-lua/plenary.nvim", branch = "master" }, -- for curl, log and async functions
|
||||
},
|
||||
-- Load after GitHub Copilot and when a file is opened
|
||||
event = { "VeryLazy" },
|
||||
build = "make tiktoken", -- Only on MacOS or Linux
|
||||
event = "VeryLazy",
|
||||
|
||||
config = function()
|
||||
local chat = require("CopilotChat")
|
||||
local select = require("CopilotChat.select")
|
||||
|
||||
-- Configure the plugin with advanced settings
|
||||
-- Setup CopilotChat with comprehensive configuration
|
||||
chat.setup({
|
||||
-- Show Copilot Chat window border
|
||||
-- Model configuration
|
||||
model = 'gpt-4.1', -- Default model to use, see ':CopilotChatModels' for available models
|
||||
agent = 'copilot', -- Default agent to use, see ':CopilotChatAgents' for available agents
|
||||
context = nil, -- Default context or array of contexts to use
|
||||
|
||||
-- Temperature for GPT responses (0.1 = more focused, 1.0 = more creative)
|
||||
temperature = 0.1,
|
||||
|
||||
-- Window configuration
|
||||
window = {
|
||||
border = "rounded", -- Make the window look nice
|
||||
width = 80, -- Default width
|
||||
height = 20, -- Default height
|
||||
title = {
|
||||
name = "Copilot Chat", -- Custom title
|
||||
alignment = "center", -- Center the title
|
||||
},
|
||||
layout = 'vertical', -- 'vertical', 'horizontal', 'float', 'replace'
|
||||
width = 0.5, -- fractional width of parent
|
||||
height = 0.5, -- fractional height of parent
|
||||
-- Options for floating windows
|
||||
relative = 'editor', -- 'editor', 'win', 'cursor', 'mouse'
|
||||
border = 'rounded', -- 'none', 'single', 'double', 'rounded', 'solid', 'shadow'
|
||||
title = 'Copilot Chat',
|
||||
footer = nil,
|
||||
zindex = 1,
|
||||
},
|
||||
|
||||
-- File context features
|
||||
context = {
|
||||
-- Include 5 lines above and below the cursor for context
|
||||
cursor_context = 5,
|
||||
-- UI settings
|
||||
show_help = true, -- Shows help message as virtual lines when waiting for user input
|
||||
highlight_selection = true, -- Highlight selection in source buffer
|
||||
highlight_headers = true, -- Highlight headers in chat
|
||||
auto_follow_cursor = true, -- Auto-follow cursor in chat
|
||||
auto_insert_mode = false, -- Automatically enter insert mode when opening window
|
||||
insert_at_end = false, -- Move cursor to end of buffer when inserting text
|
||||
clear_chat_on_new_prompt = false, -- Clears chat on every new prompt
|
||||
|
||||
-- Include the entire selection when using visual mode
|
||||
selection_context = true,
|
||||
-- Chat features
|
||||
chat_autocomplete = true, -- Enable chat autocompletion
|
||||
|
||||
-- Show context-aware commit history
|
||||
git_context = true,
|
||||
},
|
||||
-- Default selection (uses visual selection or falls back to buffer)
|
||||
selection = function(source)
|
||||
return select.visual(source) or select.buffer(source)
|
||||
end,
|
||||
|
||||
-- Enable debug (set to true only when troubleshooting)
|
||||
debug = false,
|
||||
|
||||
-- Enable syntax highlighting in response
|
||||
syntax_highlighting = true,
|
||||
|
||||
-- Enable auto-sizing of response window
|
||||
auto_size = true,
|
||||
|
||||
-- Define prompts that can be used in commands
|
||||
-- Custom prompts for various coding tasks
|
||||
prompts = {
|
||||
-- Default prompts
|
||||
-- Code explanation
|
||||
Explain = {
|
||||
prompt = "Explain how the following code works in detail:\n```$filetype\n$selection\n```",
|
||||
prompt = 'Write an explanation for the selected code as paragraphs of text.',
|
||||
system_prompt = 'COPILOT_EXPLAIN',
|
||||
},
|
||||
FixCode = {
|
||||
prompt = "Fix the following code. Provide the corrected version and explanations for the fixes:\n```$filetype\n$selection\n```",
|
||||
|
||||
-- Code review
|
||||
Review = {
|
||||
prompt = 'Review the selected code.',
|
||||
system_prompt = 'COPILOT_REVIEW',
|
||||
},
|
||||
|
||||
-- Bug fixes
|
||||
Fix = {
|
||||
prompt = 'There is a problem in this code. Identify the issues and rewrite the code with fixes. Explain what was wrong and how your changes address the problems.',
|
||||
},
|
||||
|
||||
-- Code optimization
|
||||
Optimize = {
|
||||
prompt = "Optimize the following code. Provide the optimized version and explain the improvements:\n```$filetype\n$selection\n```",
|
||||
prompt = 'Optimize the selected code to improve performance and readability. Explain your optimization strategy and the benefits of your changes.',
|
||||
},
|
||||
-- Advanced prompts
|
||||
Documentation = {
|
||||
prompt = "Generate comprehensive documentation for this code:\n```$filetype\n$selection\n```\nInclude descriptions of parameters, return values, exceptions, and provide usage examples.",
|
||||
},
|
||||
BestPractices = {
|
||||
prompt = "Review this code for best practices and suggest improvements:\n```$filetype\n$selection\n```",
|
||||
|
||||
-- Documentation generation
|
||||
Docs = {
|
||||
prompt = 'Please add documentation comments to the selected code.',
|
||||
},
|
||||
|
||||
-- Test generation
|
||||
Tests = {
|
||||
prompt = "Generate unit tests for the following code:\n```$filetype\n$selection\n```",
|
||||
prompt = 'Please generate tests for my code.',
|
||||
},
|
||||
-- Context-aware code generation
|
||||
Implement = {
|
||||
prompt = "Implement the following functionality: $input\nMake it work with the following context:\n```$filetype\n$selection\n```",
|
||||
strategy = "quick_fix", -- Use the quick fix strategy for implementation
|
||||
|
||||
-- Commit message generation
|
||||
Commit = {
|
||||
prompt = 'Write commit message for the change with commitizen convention. Keep the title under 50 characters and wrap message at 72 characters. Format as a gitcommit code block.',
|
||||
context = 'git:staged',
|
||||
},
|
||||
RefactorToPattern = {
|
||||
prompt = "Refactor the following code to use the $input design pattern. Explain the benefits of this refactoring:\n```$filetype\n$selection\n```",
|
||||
|
||||
-- Custom advanced prompts
|
||||
Refactor = {
|
||||
prompt = 'Please refactor the following code to improve its structure and readability. Explain the changes you made and why they improve the code.',
|
||||
},
|
||||
|
||||
BestPractices = {
|
||||
prompt = 'Review this code for best practices and suggest improvements. Focus on code quality, maintainability, and adherence to language-specific conventions.',
|
||||
},
|
||||
|
||||
Security = {
|
||||
prompt = 'Analyze this code for potential security vulnerabilities and suggest fixes. Consider common security issues like injection attacks, authentication, authorization, and data validation.',
|
||||
},
|
||||
|
||||
Performance = {
|
||||
prompt = 'Analyze this code for performance issues and suggest optimizations. Consider algorithmic complexity, memory usage, and language-specific performance patterns.',
|
||||
},
|
||||
|
||||
-- Context-aware prompts
|
||||
ImplementFeature = {
|
||||
prompt = 'Based on the selected code, implement the following feature: ',
|
||||
mapping = '<leader>cif',
|
||||
description = 'Implement a new feature based on existing code',
|
||||
},
|
||||
|
||||
ExplainError = {
|
||||
prompt = 'Explain this error and provide a solution: ',
|
||||
mapping = '<leader>cee',
|
||||
description = 'Explain error and provide solution',
|
||||
},
|
||||
},
|
||||
|
||||
-- Custom mappings for chat buffer
|
||||
mappings = {
|
||||
complete = {
|
||||
insert = '<Tab>',
|
||||
},
|
||||
close = {
|
||||
normal = 'q',
|
||||
insert = '<C-c>',
|
||||
},
|
||||
reset = {
|
||||
normal = '<C-l>',
|
||||
insert = '<C-l>',
|
||||
},
|
||||
submit_prompt = {
|
||||
normal = '<CR>',
|
||||
insert = '<C-s>',
|
||||
},
|
||||
toggle_sticky = {
|
||||
normal = 'grr',
|
||||
},
|
||||
clear_stickies = {
|
||||
normal = 'grx',
|
||||
},
|
||||
accept_diff = {
|
||||
normal = '<C-y>',
|
||||
insert = '<C-y>',
|
||||
},
|
||||
jump_to_diff = {
|
||||
normal = 'gj',
|
||||
},
|
||||
quickfix_answers = {
|
||||
normal = 'gqa',
|
||||
},
|
||||
quickfix_diffs = {
|
||||
normal = 'gqd',
|
||||
},
|
||||
yank_diff = {
|
||||
normal = 'gy',
|
||||
register = '"',
|
||||
},
|
||||
show_diff = {
|
||||
normal = 'gd',
|
||||
full_diff = false,
|
||||
},
|
||||
show_info = {
|
||||
normal = 'gi',
|
||||
},
|
||||
show_context = {
|
||||
normal = 'gc',
|
||||
},
|
||||
show_help = {
|
||||
normal = 'gh',
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
-- Add custom keymaps for the chat buffer
|
||||
vim.api.nvim_create_autocmd("FileType", {
|
||||
pattern = "copilot-chat",
|
||||
callback = function()
|
||||
local buf = vim.api.nvim_get_current_buf()
|
||||
-- Global keymaps for CopilotChat
|
||||
-- Core commands
|
||||
vim.keymap.set("n", "<leader>cc", function() chat.toggle() end, { desc = "Toggle Copilot Chat" })
|
||||
vim.keymap.set("n", "<leader>co", function() chat.open() end, { desc = "Open Copilot Chat" })
|
||||
vim.keymap.set("n", "<leader>cx", function() chat.close() end, { desc = "Close Copilot Chat" })
|
||||
vim.keymap.set("n", "<leader>cr", function() chat.reset() end, { desc = "Reset Copilot Chat" })
|
||||
vim.keymap.set("n", "<leader>cs", function() chat.stop() end, { desc = "Stop Copilot Chat" })
|
||||
|
||||
-- Close window with 'q'
|
||||
vim.keymap.set("n", "q", function()
|
||||
vim.cmd("close")
|
||||
end, { buffer = buf, silent = true })
|
||||
-- Prompt-based commands - these work with current selection
|
||||
vim.keymap.set({"n", "v"}, "<leader>cce", "<cmd>CopilotChatExplain<cr>", { desc = "Explain code" })
|
||||
vim.keymap.set({"n", "v"}, "<leader>ccr", "<cmd>CopilotChatReview<cr>", { desc = "Review code" })
|
||||
vim.keymap.set({"n", "v"}, "<leader>ccf", "<cmd>CopilotChatFix<cr>", { desc = "Fix code" })
|
||||
vim.keymap.set({"n", "v"}, "<leader>cco", "<cmd>CopilotChatOptimize<cr>", { desc = "Optimize code" })
|
||||
vim.keymap.set({"n", "v"}, "<leader>ccd", "<cmd>CopilotChatDocs<cr>", { desc = "Generate docs" })
|
||||
vim.keymap.set({"n", "v"}, "<leader>cct", "<cmd>CopilotChatTests<cr>", { desc = "Generate tests" })
|
||||
vim.keymap.set({"n", "v"}, "<leader>ccrf", "<cmd>CopilotChatRefactor<cr>", { desc = "Refactor code" })
|
||||
vim.keymap.set({"n", "v"}, "<leader>ccb", "<cmd>CopilotChatBestPractices<cr>", { desc = "Best practices" })
|
||||
vim.keymap.set({"n", "v"}, "<leader>ccs", "<cmd>CopilotChatSecurity<cr>", { desc = "Security review" })
|
||||
vim.keymap.set({"n", "v"}, "<leader>ccp", "<cmd>CopilotChatPerformance<cr>", { desc = "Performance review" })
|
||||
|
||||
-- Reset chat with Ctrl+L
|
||||
vim.keymap.set("n", "<C-l>", function()
|
||||
chat.reset()
|
||||
end, { buffer = buf, silent = true })
|
||||
-- Git integration
|
||||
vim.keymap.set("n", "<leader>ccg", "<cmd>CopilotChatCommit<cr>", { desc = "Generate commit message" })
|
||||
|
||||
-- -- Submit prompt with Enter in insert mode
|
||||
-- vim.keymap.set("i", "<CR>", function()
|
||||
-- -- require("CopilotChat").submit_prompt()
|
||||
-- chat.submit_prompt()
|
||||
-- end, { buffer = buf, silent = true })
|
||||
-- Advanced features
|
||||
vim.keymap.set("n", "<leader>ccm", "<cmd>CopilotChatModels<cr>", { desc = "Select model" })
|
||||
vim.keymap.set("n", "<leader>cca", "<cmd>CopilotChatAgents<cr>", { desc = "Select agent" })
|
||||
vim.keymap.set("n", "<leader>ccp", "<cmd>CopilotChatPrompts<cr>", { desc = "Select prompt" })
|
||||
|
||||
-- -- Submit prompt with Enter in normal mode
|
||||
-- vim.keymap.set("n", "<CR>", function()
|
||||
-- require("CopilotChat").submit_prompt()
|
||||
-- end, { buffer = buf, silent = true })
|
||||
|
||||
-- Show diff with Ctrl+D
|
||||
vim.keymap.set("n", "<C-d>", function()
|
||||
require("CopilotChat").show_diff()
|
||||
end, { buffer = buf, silent = true })
|
||||
|
||||
-- Accept diff with Ctrl+Y
|
||||
vim.keymap.set("n", "<C-y>", function()
|
||||
require("CopilotChat").accept_diff()
|
||||
end, { buffer = buf, silent = true })
|
||||
end
|
||||
})
|
||||
|
||||
-- Set up key bindings
|
||||
vim.keymap.set("n", "<leader>cc", "<cmd>CopilotChat<CR>", { desc = "Copilot Chat" })
|
||||
vim.keymap.set("n", "<leader>ce", "<cmd>CopilotChatExplain<CR>", { desc = "Explain Code" })
|
||||
vim.keymap.set("n", "<leader>cf", "<cmd>CopilotChatFixCode<CR>", { desc = "Fix Code" })
|
||||
vim.keymap.set("n", "<leader>co", "<cmd>CopilotChatOptimize<CR>", { desc = "Optimize Code" })
|
||||
vim.keymap.set("n", "<leader>cd", "<cmd>CopilotChatDocumentation<CR>", { desc = "Generate Documentation" })
|
||||
vim.keymap.set("n", "<leader>ct", "<cmd>CopilotChatTests<CR>", { desc = "Generate Tests" })
|
||||
vim.keymap.set("n", "<leader>cb", "<cmd>CopilotChatBestPractices<CR>", { desc = "Check Best Practices" })
|
||||
|
||||
-- Visual mode mappings for selected code
|
||||
vim.keymap.set("v", "<leader>ce", ":CopilotChatExplain<CR>", { desc = "Explain Selected Code" })
|
||||
vim.keymap.set("v", "<leader>cf", ":CopilotChatFixCode<CR>", { desc = "Fix Selected Code" })
|
||||
vim.keymap.set("v", "<leader>co", ":CopilotChatOptimize<CR>", { desc = "Optimize Selected Code" })
|
||||
vim.keymap.set("v", "<leader>cd", ":CopilotChatDocumentation<CR>", { desc = "Document Selected Code" })
|
||||
vim.keymap.set("v", "<leader>ct", ":CopilotChatTests<CR>", { desc = "Generate Tests for Selected Code" })
|
||||
|
||||
-- Create a custom input command with implementation suggestions
|
||||
vim.keymap.set("v", "<leader>ci", function()
|
||||
vim.ui.input({ prompt = "What would you like to implement? " }, function(input)
|
||||
if input then
|
||||
select.selection()
|
||||
chat.ask("Implement: " .. input)
|
||||
-- Chat history
|
||||
vim.keymap.set("n", "<leader>ccl", function()
|
||||
vim.ui.input({ prompt = "Load chat (name): " }, function(name)
|
||||
if name then
|
||||
chat.load(name)
|
||||
end
|
||||
end)
|
||||
end, { desc = "Implement Functionality" })
|
||||
end, { desc = "Load chat history" })
|
||||
|
||||
-- Add quick access to buffer context
|
||||
vim.keymap.set("n", "<leader>cb", function()
|
||||
chat.ask("What does this code do? Consider the full context of the file.", {
|
||||
selection = select.buffer,
|
||||
})
|
||||
end, { desc = "Explain Buffer" })
|
||||
|
||||
-- Refactor the current selection to use a specific design pattern
|
||||
vim.keymap.set("v", "<leader>cr", function()
|
||||
vim.ui.input({ prompt = "Which design pattern to refactor to? " }, function(input)
|
||||
if input then
|
||||
select.selection()
|
||||
chat.ask("RefactorToPattern: " .. input)
|
||||
vim.keymap.set("n", "<leader>ccS", function()
|
||||
vim.ui.input({ prompt = "Save chat (name): " }, function(name)
|
||||
if name then
|
||||
chat.save(name)
|
||||
end
|
||||
end)
|
||||
end, { desc = "Refactor to Design Pattern" })
|
||||
end, { desc = "Save chat history" })
|
||||
|
||||
-- Toggle inline chat for quick questions about the current line
|
||||
vim.keymap.set("n", "<leader>cl", function()
|
||||
-- Use chat.ask with a line selector instead of separate select.line() call
|
||||
chat.ask("What does this line of code do?", {
|
||||
selection = select.line, -- Pass the function reference, not the function call
|
||||
})
|
||||
end, { desc = "Chat About Current Line" })
|
||||
|
||||
-- Open Copilot Chat with a custom prompt
|
||||
vim.keymap.set("n", "<leader>cp", function()
|
||||
-- Custom prompts with input
|
||||
vim.keymap.set({"n", "v"}, "<leader>cci", function()
|
||||
vim.ui.input({ prompt = "Ask Copilot: " }, function(input)
|
||||
if input then
|
||||
chat.ask(input)
|
||||
end
|
||||
end)
|
||||
end, { desc = "Ask Copilot" })
|
||||
end, { desc = "Ask custom question" })
|
||||
|
||||
-- Context-specific commands
|
||||
vim.keymap.set("n", "<leader>ccbf", function()
|
||||
chat.ask("Explain what this file does and its main purpose.", {
|
||||
selection = select.buffer,
|
||||
})
|
||||
end, { desc = "Explain buffer" })
|
||||
|
||||
vim.keymap.set("n", "<leader>ccgd", function()
|
||||
chat.ask("Explain these git changes.", {
|
||||
context = "git",
|
||||
})
|
||||
end, { desc = "Explain git diff" })
|
||||
|
||||
-- Line-specific command
|
||||
vim.keymap.set("n", "<leader>ccl", function()
|
||||
chat.ask("Explain this line of code in detail.", {
|
||||
selection = select.line,
|
||||
})
|
||||
end, { desc = "Explain current line" })
|
||||
|
||||
-- Quick actions for selected text
|
||||
vim.keymap.set("v", "<leader>cq", function()
|
||||
chat.ask("Quick question about this code: " .. vim.fn.input("Question: "), {
|
||||
selection = select.visual,
|
||||
})
|
||||
end, { desc = "Quick question about selection" })
|
||||
|
||||
-- Buffer auto-commands for chat window
|
||||
vim.api.nvim_create_autocmd("BufEnter", {
|
||||
pattern = "copilot-*",
|
||||
callback = function()
|
||||
-- Set buffer-local options for better UX
|
||||
vim.opt_local.relativenumber = false
|
||||
vim.opt_local.number = false
|
||||
vim.opt_local.cursorline = false
|
||||
vim.opt_local.signcolumn = "no"
|
||||
vim.opt_local.foldcolumn = "0"
|
||||
end,
|
||||
})
|
||||
|
||||
-- Notification on chat completion
|
||||
vim.api.nvim_create_autocmd("User", {
|
||||
pattern = "CopilotChatComplete",
|
||||
callback = function()
|
||||
vim.notify("Copilot Chat response complete", vim.log.levels.INFO)
|
||||
end,
|
||||
})
|
||||
end,
|
||||
}
|
||||
|
|
|
@ -16,4 +16,6 @@ return {
|
|||
{ import = "custom.plugins.leetcode" },
|
||||
-- { import = "custom.plugins.telescope_fix" },
|
||||
{ import = "custom.plugins.catppuccin" },
|
||||
{ import = "custom.plugins.neorg" },
|
||||
{ import = "custom.plugins.which_key_integration" }, -- Load which-key integration
|
||||
}
|
||||
|
|
52
lua/custom/plugins/jdtls_config.lua
Normal file
52
lua/custom/plugins/jdtls_config.lua
Normal file
|
@ -0,0 +1,52 @@
|
|||
--[[
|
||||
JDTLS Configuration
|
||||
|
||||
This file configures the Java Development Tools Language Server (jdtls)
|
||||
to fix deprecation warnings and JVM restrictions.
|
||||
]]
|
||||
|
||||
return {
|
||||
-- Override the default jdtls setup
|
||||
{
|
||||
"neovim/nvim-lspconfig",
|
||||
opts = {
|
||||
-- Configure jdtls with the necessary JVM arguments to fix warnings
|
||||
setup = {
|
||||
jdtls = function(_, opts)
|
||||
-- Get existing Java arguments or initialize an empty table
|
||||
local java_args = opts.cmd or {}
|
||||
|
||||
-- Add the necessary JVM arguments to fix the deprecation warnings
|
||||
local fixed_java_args = {
|
||||
-- Enable unrestricted access to JDK internal API
|
||||
"--enable-native-access=ALL-UNNAMED",
|
||||
-- Explicitly allow these modules to eliminate warnings
|
||||
"--add-modules=jdk.incubator.vector",
|
||||
-- Suppress deprecation warnings
|
||||
"-Dsun.misc.Unsafe.allowDeprecation=true",
|
||||
}
|
||||
|
||||
-- Find the java command index in the cmd array
|
||||
local java_cmd_index = 1
|
||||
for i, arg in ipairs(java_args) do
|
||||
if arg:match("java$") then
|
||||
java_cmd_index = i
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
-- Insert our arguments after the java command
|
||||
for i, arg in ipairs(fixed_java_args) do
|
||||
table.insert(java_args, java_cmd_index + i, arg)
|
||||
end
|
||||
|
||||
-- Update the command
|
||||
opts.cmd = java_args
|
||||
|
||||
-- Return false to let the default handler continue
|
||||
return false
|
||||
end,
|
||||
},
|
||||
},
|
||||
}
|
||||
}
|
|
@ -3,79 +3,79 @@
|
|||
-- https://github.com/kawre/leetcode.nvim
|
||||
|
||||
return {
|
||||
"kawre/leetcode.nvim",
|
||||
'kawre/leetcode.nvim',
|
||||
dependencies = {
|
||||
"nvim-telescope/telescope.nvim",
|
||||
"nvim-lua/plenary.nvim",
|
||||
"MunifTanjim/nui.nvim",
|
||||
"nvim-tree/nvim-web-devicons", -- optional but recommended
|
||||
"nvim-treesitter/nvim-treesitter" -- make sure treesitter is a direct dependency
|
||||
'nvim-telescope/telescope.nvim',
|
||||
'nvim-lua/plenary.nvim',
|
||||
'MunifTanjim/nui.nvim',
|
||||
'nvim-tree/nvim-web-devicons', -- optional but recommended
|
||||
'nvim-treesitter/nvim-treesitter', -- make sure treesitter is a direct dependency
|
||||
},
|
||||
build = function()
|
||||
-- Make sure the HTML parser is installed for treesitter
|
||||
require("nvim-treesitter.install").ensure_installed("html")
|
||||
require('nvim-treesitter.install').ensure_installed 'html'
|
||||
end,
|
||||
config = function()
|
||||
require("leetcode").setup({
|
||||
require('leetcode').setup {
|
||||
-- Default language for solving problems
|
||||
lang = "python3", -- you can change this to your preferred language
|
||||
lang = 'python3', -- you can change this to your preferred language
|
||||
|
||||
-- Storage directories
|
||||
storage = {
|
||||
home = vim.fn.stdpath("data") .. "/leetcode",
|
||||
cache = vim.fn.stdpath("cache") .. "/leetcode",
|
||||
home = vim.fn.stdpath 'data' .. '/leetcode',
|
||||
cache = vim.fn.stdpath 'cache' .. '/leetcode',
|
||||
},
|
||||
|
||||
-- Console settings
|
||||
console = {
|
||||
open_on_runcode = true,
|
||||
dir = "row", -- "row" or "col" for horizontal or vertical split
|
||||
dir = 'row', -- "row" or "col" for horizontal or vertical split
|
||||
size = {
|
||||
width = "90%",
|
||||
height = "75%",
|
||||
width = '90%',
|
||||
height = '75%',
|
||||
},
|
||||
result = {
|
||||
size = "60%",
|
||||
size = '60%',
|
||||
},
|
||||
testcase = {
|
||||
virt_text = true,
|
||||
size = "40%",
|
||||
size = '40%',
|
||||
},
|
||||
},
|
||||
|
||||
-- Description panel settings
|
||||
description = {
|
||||
position = "left", -- "left" or "right"
|
||||
width = "40%",
|
||||
position = 'left', -- "left" or "right"
|
||||
width = '40%',
|
||||
show_stats = true, -- show problem stats in description panel
|
||||
},
|
||||
|
||||
-- You can choose either telescope or fzf-lua
|
||||
picker = {
|
||||
provider = "telescope", -- set to "fzf-lua" if you prefer that
|
||||
provider = 'telescope', -- set to "fzf-lua" if you prefer that
|
||||
},
|
||||
|
||||
-- Default keybindings - these won't conflict with your existing mappings
|
||||
-- as they only activate within LeetCode buffers
|
||||
keys = {
|
||||
toggle = { "q" },
|
||||
confirm = { "<CR>" },
|
||||
toggle = { 'q' },
|
||||
confirm = { '<CR>' },
|
||||
|
||||
reset_testcases = "r",
|
||||
use_testcase = "U",
|
||||
focus_testcases = "H",
|
||||
focus_result = "L",
|
||||
reset_testcases = 'r',
|
||||
use_testcase = 'U',
|
||||
focus_testcases = 'H',
|
||||
focus_result = 'L',
|
||||
},
|
||||
|
||||
-- Code injection settings - adds useful imports automatically
|
||||
injector = {
|
||||
["cpp"] = {
|
||||
before = { "#include <bits/stdc++.h>", "using namespace std;" },
|
||||
['cpp'] = {
|
||||
before = { '#include <bits/stdc++.h>', 'using namespace std;' },
|
||||
},
|
||||
["java"] = {
|
||||
before = "import java.util.*;",
|
||||
['java'] = {
|
||||
before = 'import java.util.*;',
|
||||
},
|
||||
["python3"] = {
|
||||
['python3'] = {
|
||||
before = true, -- use default imports
|
||||
},
|
||||
},
|
||||
|
@ -87,7 +87,7 @@ return {
|
|||
plugins = {
|
||||
non_standalone = false,
|
||||
},
|
||||
})
|
||||
}
|
||||
end,
|
||||
cmd = "Leet", -- lazy-load on command
|
||||
cmd = 'Leet', -- lazy-load on command
|
||||
}
|
||||
|
|
185
lua/custom/plugins/neorg.lua
Normal file
185
lua/custom/plugins/neorg.lua
Normal file
|
@ -0,0 +1,185 @@
|
|||
-- Neorg - An organized future for Neovim
|
||||
-- https://github.com/nvim-neorg/neorg
|
||||
--
|
||||
-- Documentation: https://github.com/nvim-neorg/neorg/wiki
|
||||
-- Modules reference: https://github.com/nvim-neorg/neorg/wiki/User-Modules-Reference
|
||||
|
||||
return {
|
||||
"nvim-neorg/neorg",
|
||||
lazy = false, -- Disable lazy loading to ensure proper initialization
|
||||
-- Pin the version for stability - you can update when ready
|
||||
version = "*", -- Use the latest stable version
|
||||
dependencies = {
|
||||
"nvim-lua/plenary.nvim", -- Already should be installed in your config
|
||||
"nvim-treesitter/nvim-treesitter",
|
||||
"nvim-treesitter/nvim-treesitter-textobjects",
|
||||
"hrsh7th/nvim-cmp", -- Proper repository path for nvim-cmp
|
||||
},
|
||||
build = ":Neorg sync-parsers", -- This will install the Neorg treesitter parser
|
||||
config = function()
|
||||
require("neorg").setup {
|
||||
load = {
|
||||
-- Load the core modules that provide basic functionality
|
||||
["core.defaults"] = {}, -- Loads default modules
|
||||
|
||||
-- Essential modules for a good experience
|
||||
["core.concealer"] = {
|
||||
config = {
|
||||
icon_preset = "diamond", -- Icon style: basic, diamond, varied
|
||||
icons = {
|
||||
-- Custom icons for improved visual appearance
|
||||
heading = {
|
||||
icons = { "◉", "○", "✸", "✿" }, -- Cycle through these for heading levels
|
||||
},
|
||||
-- Keep default values for other icons
|
||||
todo = {
|
||||
pending = { icon = "" }, -- Keep the default
|
||||
},
|
||||
},
|
||||
folds = true, -- Enable folding of nested content
|
||||
performance = {
|
||||
conceal_modifier_pre = 200, -- Optimized conceal performance
|
||||
conceal_modifier_post = 300,
|
||||
concealer_weight_implies_priority = true,
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
-- For managing directories of .norg files - required for many features
|
||||
["core.dirman"] = {
|
||||
config = {
|
||||
workspaces = {
|
||||
notes = "~/notes", -- General notes
|
||||
work = "~/work/notes", -- Work-related notes
|
||||
personal = "~/personal/notes", -- Personal notes
|
||||
projects = "~/projects/notes", -- Project-specific notes
|
||||
},
|
||||
default_workspace = "notes",
|
||||
index = "index.norg", -- Default index file to look for
|
||||
},
|
||||
},
|
||||
|
||||
-- Enhance completion capabilities - integrates with your existing completion
|
||||
["core.completion"] = {
|
||||
config = {
|
||||
engine = "nvim-cmp", -- Use nvim-cmp for completion
|
||||
name = "neorg", -- Source name for nvim-cmp
|
||||
-- Customize completion behavior
|
||||
snippet_engine = nil, -- Will use your configured snippet engine
|
||||
trigger_on_carriage_return = true, -- Trigger completion when pressing Enter
|
||||
},
|
||||
},
|
||||
|
||||
-- Export your Neorg files to other formats
|
||||
["core.export"] = {}, -- Base export module
|
||||
["core.export.markdown"] = {
|
||||
config = {
|
||||
extensions = "all", -- Export all extensions
|
||||
versioning = {
|
||||
-- Add version information to exported files
|
||||
enabled = true,
|
||||
-- Pattern: {year}{month}{day}{hour}{min}{sec}_filename.md
|
||||
pattern = "%Y%m%d%H%M%S_{name}.md",
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
-- For a nicer table of contents
|
||||
["core.qol.toc"] = {
|
||||
config = {
|
||||
toc_title = "Table of Contents", -- Title of the TOC
|
||||
close_after_use = true, -- Close TOC after jumping to a heading
|
||||
default_level = 4, -- Show headings up to this level
|
||||
toc_position = "right", -- Position of the TOC window
|
||||
},
|
||||
},
|
||||
|
||||
-- For taking journal notes
|
||||
["core.journal"] = {
|
||||
config = {
|
||||
strategy = "flat", -- "flat" for single files, "nested" for year/month/day structure
|
||||
workspace = "notes", -- Use the notes workspace for journal entries
|
||||
journal_folder = "journal", -- Store journal entries in this subfolder
|
||||
use_template = false, -- Whether to use a template for new entries
|
||||
template_name = nil, -- Optional template name if use_template is true
|
||||
zipper_indicator = false, -- Show indicators for fast navigation
|
||||
},
|
||||
},
|
||||
|
||||
-- Summary generation for notes (new module)
|
||||
["core.summary"] = {},
|
||||
|
||||
-- Enhanced UI presentation mode
|
||||
["core.presenter"] = {
|
||||
config = {
|
||||
zen_mode = "zen-mode", -- Zen mode plugin to use (if installed)
|
||||
slide_count = true, -- Show slide count in presenter mode
|
||||
}
|
||||
},
|
||||
|
||||
-- Enhance keybinds with custom modes
|
||||
["core.keybinds"] = {
|
||||
-- This config is crucial for avoiding keybinding conflicts
|
||||
config = {
|
||||
-- All Neorg keybindings are only active inside .norg files
|
||||
-- They won't affect your existing keymaps in other file types
|
||||
default_keybinds = true,
|
||||
neorg_leader = "<Leader>n", -- Use <Leader>n as the Neorg prefix
|
||||
|
||||
-- Custom keybinds organized by category
|
||||
hook = function(keybinds)
|
||||
-- Navigation keybinds
|
||||
keybinds.map("norg", "n", "<Leader>nj", "<cmd>Neorg journal today<CR>",
|
||||
{ desc = "Open today's journal" })
|
||||
keybinds.map("norg", "n", "<Leader>nyt", "<cmd>Neorg journal yesterday<CR>",
|
||||
{ desc = "Open yesterday's journal" })
|
||||
keybinds.map("norg", "n", "<Leader>ntm", "<cmd>Neorg journal tomorrow<CR>",
|
||||
{ desc = "Open tomorrow's journal" })
|
||||
|
||||
-- Workspace management
|
||||
keybinds.map("norg", "n", "<Leader>nw", "<cmd>Neorg workspace<CR>",
|
||||
{ desc = "Open workspace selector" })
|
||||
keybinds.map("norg", "n", "<Leader>nn", "<cmd>Neorg workspace notes<CR>",
|
||||
{ desc = "Switch to notes workspace" })
|
||||
keybinds.map("norg", "n", "<Leader>nwp", "<cmd>Neorg workspace personal<CR>",
|
||||
{ desc = "Switch to personal workspace" })
|
||||
|
||||
-- Document manipulation
|
||||
keybinds.map("norg", "n", "<Leader>ntt", "<cmd>Neorg toc<CR>",
|
||||
{ desc = "Generate table of contents" })
|
||||
keybinds.map("norg", "n", "<Leader>ni", "<cmd>Neorg inject-metadata<CR>",
|
||||
{ desc = "Inject metadata" })
|
||||
keybinds.map("norg", "n", "<Leader>nm", "<cmd>Neorg update-metadata<CR>",
|
||||
{ desc = "Update metadata" })
|
||||
|
||||
-- Export commands
|
||||
keybinds.map("norg", "n", "<Leader>nem", "<cmd>Neorg export to-markdown<CR>",
|
||||
{ desc = "Export to Markdown" })
|
||||
|
||||
-- Toggle concealer
|
||||
keybinds.map("norg", "n", "<Leader>nc", "<cmd>Neorg toggle-concealer<CR>",
|
||||
{ desc = "Toggle concealer" })
|
||||
|
||||
-- Return to last workspace
|
||||
keybinds.map("norg", "n", "<Leader>nl", "<cmd>Neorg return<CR>",
|
||||
{ desc = "Return to last workspace" })
|
||||
|
||||
-- Advanced keybinds for list manipulation
|
||||
keybinds.map_event("norg", "n", "<Leader>nu", "core.itero.next-iteration",
|
||||
{ desc = "Iterate next" })
|
||||
keybinds.map_event("norg", "n", "<Leader>np", "core.itero.previous-iteration",
|
||||
{ desc = "Iterate previous" })
|
||||
end,
|
||||
},
|
||||
},
|
||||
|
||||
-- Module for better list handling
|
||||
["core.itero"] = {},
|
||||
|
||||
-- UI improvements for better look and feel
|
||||
["core.ui"] = {},
|
||||
["core.ui.calendar"] = {}, -- Calendar view for journal navigation
|
||||
},
|
||||
}
|
||||
end,
|
||||
}
|
310
lua/custom/plugins/neorg_guide.md
Normal file
310
lua/custom/plugins/neorg_guide.md
Normal file
|
@ -0,0 +1,310 @@
|
|||
# Neorg Guide: Organized Note-Taking for Neovim
|
||||
|
||||
Neorg is a powerful tool for structured note-taking, project and task management, time tracking, and more, all within Neovim. This guide will help you get started with the basics and highlight advanced features.
|
||||
|
||||
## Getting Started
|
||||
|
||||
To start using Neorg:
|
||||
|
||||
1. Make sure `luarocks` is installed on your system:
|
||||
|
||||
```bash
|
||||
sudo pacman -S luarocks
|
||||
# Or using yay if it's not in the main repos
|
||||
# yay -S luarocks
|
||||
```
|
||||
|
||||
2. Create your first Neorg file:
|
||||
|
||||
```
|
||||
:e notes.norg
|
||||
```
|
||||
|
||||
3. Initialize your workspace directories if they don't exist:
|
||||
```bash
|
||||
mkdir -p ~/notes ~/work/notes ~/personal/notes ~/projects/notes
|
||||
```
|
||||
|
||||
## Key Concepts
|
||||
|
||||
### Workspaces
|
||||
|
||||
Workspaces are directories where your Neorg files are stored. Your configuration includes:
|
||||
|
||||
- `notes`: Your general notes (~/notes)
|
||||
- `work`: Work-related notes (~/work/notes)
|
||||
- `personal`: Personal notes (~/personal/notes)
|
||||
- `projects`: Project-specific notes (~/projects/notes)
|
||||
|
||||
### Keybinding Structure
|
||||
|
||||
All Neorg keybindings start with `<Leader>n` (usually `\n` or `<Space>n` depending on your leader key) to avoid conflicts with your existing bindings.
|
||||
|
||||
#### Navigation & Workspaces
|
||||
|
||||
- `<Leader>nw` - Open workspace selector
|
||||
- `<Leader>nn` - Switch to notes workspace
|
||||
- `<Leader>nwp` - Switch to personal workspace
|
||||
- `<Leader>nl` - Return to last workspace
|
||||
|
||||
#### Journal
|
||||
|
||||
- `<Leader>nj` - Open today's journal
|
||||
- `<Leader>nyt` - Open yesterday's journal
|
||||
- `<Leader>ntm` - Open tomorrow's journal
|
||||
- `<Leader>nwd` - Go to day view in journal
|
||||
- `<Leader>nwm` - Go to month view in journal
|
||||
|
||||
#### Document Manipulation
|
||||
|
||||
- `<Leader>ntt` - Generate table of contents
|
||||
- `<Leader>ni` - Inject metadata
|
||||
- `<Leader>nm` - Update metadata
|
||||
- `<Leader>nc` - Toggle concealer
|
||||
- `<Leader>nil` - Insert link
|
||||
- `<Leader>nid` - Insert date
|
||||
|
||||
#### Export Commands
|
||||
|
||||
- `<Leader>nem` - Export to Markdown
|
||||
|
||||
#### Advanced List Manipulation
|
||||
|
||||
- `<Leader>nu` - Iterate to next list type (cycle through bullet types/numbers)
|
||||
- `<Leader>np` - Iterate to previous list type
|
||||
|
||||
### Basic Syntax
|
||||
|
||||
```norg
|
||||
* Heading 1
|
||||
** Heading 2
|
||||
*** Heading 3
|
||||
|
||||
- Unordered list
|
||||
- Nested item
|
||||
- More nesting
|
||||
|
||||
1. Ordered list
|
||||
2. Second item
|
||||
|
||||
~ Definition list
|
||||
Term 1 :: Definition 1
|
||||
Term 2 :: Definition 2
|
||||
~
|
||||
|
||||
( ) Undone task
|
||||
(x) Completed task
|
||||
(?) Pending task
|
||||
(!) Important task
|
||||
(-) Pending task
|
||||
(=) Recurring task
|
||||
(+) On hold task
|
||||
|
||||
`inline code`
|
||||
|
||||
@code lua
|
||||
print("Hello from Neorg!")
|
||||
@end
|
||||
|
||||
{https://github.com/nvim-neorg/neorg}[Link to Neorg]
|
||||
|
||||
> This is a quote
|
||||
> It can span multiple lines
|
||||
|
||||
$ E = mc^2 $ -- Inline math
|
||||
|
||||
@math
|
||||
f(x) = \int_{-\infty}^\infty
|
||||
\hat f(\xi)\,e^{2 \pi i \xi x}
|
||||
\,d\xi
|
||||
@end
|
||||
```
|
||||
|
||||
## Command Reference
|
||||
|
||||
### Common Commands
|
||||
|
||||
| Command | Description |
|
||||
| --------------------------- | ------------------------------- |
|
||||
| `:Neorg workspace notes` | Switch to notes workspace |
|
||||
| `:Neorg journal today` | Open today's journal |
|
||||
| `:Neorg toc` | Generate a table of contents |
|
||||
| `:Neorg export to-markdown` | Export current file to markdown |
|
||||
| `:Neorg toggle-concealer` | Toggle the concealer on/off |
|
||||
| `:Neorg return` | Return to the last workspace |
|
||||
|
||||
### Advanced Commands
|
||||
|
||||
| Command | Description |
|
||||
| ----------------------------------- | -------------------------------- |
|
||||
| `:Neorg inject-metadata` | Add metadata to current document |
|
||||
| `:Neorg update-metadata` | Update document metadata |
|
||||
| `:Neorg journal template` | Create/edit journal template |
|
||||
| `:Neorg keybind all` | Show all available keybindings |
|
||||
| `:Neorg modules list` | List all loaded modules |
|
||||
| `:Neorg generate-workspace-summary` | Generate workspace summary |
|
||||
|
||||
## Advanced Features
|
||||
|
||||
### Journal Management
|
||||
|
||||
Your journal is configured with a flat structure in the `~/notes/journal` directory:
|
||||
|
||||
```
|
||||
:Neorg journal today # Open today's journal
|
||||
:Neorg journal yesterday # Open yesterday's journal
|
||||
:Neorg journal tomorrow # Open tomorrow's journal
|
||||
```
|
||||
|
||||
Use `<Leader>nj` for quick access to today's journal.
|
||||
|
||||
### Export Options
|
||||
|
||||
Export to different formats for sharing:
|
||||
|
||||
```vim
|
||||
:Neorg export to-markdown " Basic markdown export
|
||||
:Neorg export to-markdown all " Export with all extensions
|
||||
```
|
||||
|
||||
The export includes version info with timestamps in the filename format.
|
||||
|
||||
### Table of Contents
|
||||
|
||||
Generate and use a table of contents with `<Leader>ntt` or `:Neorg toc`.
|
||||
The TOC is interactive - you can navigate to any section by selecting it.
|
||||
|
||||
### Presenter Mode
|
||||
|
||||
Turn your notes into presentations:
|
||||
|
||||
```vim
|
||||
:Neorg presenter start " Start presenter mode
|
||||
```
|
||||
|
||||
Navigate slides with:
|
||||
|
||||
- `j/k` or arrow keys - Next/previous slide
|
||||
- `q` - Exit presenter
|
||||
|
||||
## Tips for Best Experience
|
||||
|
||||
> 📌 **Note**: A comprehensive keybinding reference is available in the file:
|
||||
> `/home/kali/.config/nvim/lua/custom/plugins/neorg_keymaps_reference.md`
|
||||
|
||||
1. **Create workspace directories** before using them:
|
||||
|
||||
```bash
|
||||
mkdir -p ~/notes ~/work/notes ~/personal/notes ~/projects/notes
|
||||
```
|
||||
|
||||
2. **Set conceallevel** for a better visual experience:
|
||||
|
||||
```vim
|
||||
:set conceallevel=2
|
||||
```
|
||||
|
||||
3. **Use the journal** for daily notes and tracking with the `<Leader>nj` shortcut.
|
||||
|
||||
4. **Follow links** by placing cursor on a link and pressing `<Enter>`.
|
||||
|
||||
5. **Export to other formats** when needed to share your notes with `<Leader>nem`.
|
||||
|
||||
6. **Use folding** to collapse and expand sections:
|
||||
|
||||
- `za` - Toggle fold under cursor
|
||||
- `zR` - Open all folds
|
||||
- `zM` - Close all folds
|
||||
|
||||
7. **Use custom keybindings** to streamline your workflow - all under the `<Leader>n` prefix.
|
||||
|
||||
8. **Check Neorg health** if you encounter issues:
|
||||
|
||||
```vim
|
||||
:checkhealth neorg
|
||||
```
|
||||
|
||||
9. **Use calendar navigation** for journal entries:
|
||||
|
||||
```vim
|
||||
:Neorg journal calendar
|
||||
```
|
||||
|
||||
Navigate with arrow keys and press Enter on a date.
|
||||
|
||||
10. **Create summaries** of your notes:
|
||||
```vim
|
||||
:Neorg generate-summary
|
||||
```
|
||||
|
||||
## Advanced Document Structure
|
||||
|
||||
### Metadata
|
||||
|
||||
Add metadata to documents for better organization:
|
||||
|
||||
```norg
|
||||
@document.meta
|
||||
title: Project Planning
|
||||
description: Strategic planning document for Q3 2025
|
||||
authors: [your_name]
|
||||
categories: [planning, strategy]
|
||||
created: 2025-06-09
|
||||
version: 1.0
|
||||
@end
|
||||
```
|
||||
|
||||
### Cross-Linking
|
||||
|
||||
Create links between your notes:
|
||||
|
||||
```norg
|
||||
{:my-other-file:}[Link to another file]
|
||||
{:my-other-file:*some-heading}[Link to specific heading]
|
||||
{* My Heading}[Link to heading in current file]
|
||||
```
|
||||
|
||||
### Advanced Tasks
|
||||
|
||||
Track tasks with metadata:
|
||||
|
||||
```norg
|
||||
(x) Completed task #project @tag <2025-06-01>
|
||||
( ) Upcoming task #work @important <2025-06-15>
|
||||
(!) Critical task with ^high^ priority
|
||||
```
|
||||
|
||||
### Code Execution
|
||||
|
||||
Some code blocks can be executed directly from Neorg:
|
||||
|
||||
```norg
|
||||
@code lua runnable
|
||||
print("Hello from Neorg!")
|
||||
@end
|
||||
```
|
||||
|
||||
Use `<Leader>re` to run the code block under your cursor.
|
||||
|
||||
## Customization
|
||||
|
||||
Your Neorg setup is configured with:
|
||||
|
||||
- Diamond icon preset for better visuals
|
||||
- Custom keybindings under `<Leader>n` prefix
|
||||
- Four configured workspaces
|
||||
- Enhanced journal capabilities
|
||||
|
||||
Refer to the full configuration in `/home/kali/.config/nvim/lua/custom/plugins/neorg.lua` for more details.
|
||||
:Neorg export to-markdown
|
||||
|
||||
```
|
||||
|
||||
## Compatibility
|
||||
|
||||
Neorg is designed to work alongside your existing Neovim setup without conflicts. All keymaps are scoped to `.norg` files to avoid conflicts with other plugins.
|
||||
|
||||
## Learning More
|
||||
|
||||
Visit the [Neorg Wiki](https://github.com/nvim-neorg/neorg/wiki) for comprehensive documentation on all modules and features.
|
||||
```
|
129
lua/custom/plugins/neorg_keymaps_reference.md
Normal file
129
lua/custom/plugins/neorg_keymaps_reference.md
Normal file
|
@ -0,0 +1,129 @@
|
|||
# Neorg Keybindings Reference
|
||||
|
||||
All Neorg keybindings are namespaced under `<Leader>n` to avoid conflicts with other plugins. These bindings are only active in `.norg` files.
|
||||
|
||||
## 🚀 Getting Started
|
||||
|
||||
To check your Neorg setup, run this command in Neovim:
|
||||
|
||||
```vim
|
||||
:lua require('custom.utils.neorg_setup_check').check()
|
||||
```
|
||||
|
||||
To create your first Neorg file:
|
||||
|
||||
```vim
|
||||
:e myfile.norg
|
||||
```
|
||||
|
||||
To access your notes index:
|
||||
|
||||
```vim
|
||||
:Neorg workspace notes
|
||||
```
|
||||
|
||||
## Navigation & Workspace Management
|
||||
|
||||
| Keybinding | Description |
|
||||
| ------------- | ---------------------------- |
|
||||
| `<Leader>nw` | Open workspace selector |
|
||||
| `<Leader>nn` | Switch to notes workspace |
|
||||
| `<Leader>nwp` | Switch to personal workspace |
|
||||
| `<Leader>nl` | Return to last workspace |
|
||||
|
||||
## Journal
|
||||
|
||||
| Keybinding | Description |
|
||||
| ------------- | --------------------------- |
|
||||
| `<Leader>nj` | Open today's journal |
|
||||
| `<Leader>nyt` | Open yesterday's journal |
|
||||
| `<Leader>ntm` | Open tomorrow's journal |
|
||||
| `<Leader>nwd` | Go to day view in journal |
|
||||
| `<Leader>nwm` | Go to month view in journal |
|
||||
|
||||
## Document Structure
|
||||
|
||||
| Keybinding | Description |
|
||||
| ------------- | -------------------------- |
|
||||
| `<Leader>ntt` | Generate table of contents |
|
||||
| `<Leader>ni` | Inject metadata |
|
||||
| `<Leader>nm` | Update metadata |
|
||||
| `<Leader>nc` | Toggle concealer |
|
||||
|
||||
## Content Creation
|
||||
|
||||
| Keybinding | Description |
|
||||
| ------------- | ----------- |
|
||||
| `<Leader>nil` | Insert link |
|
||||
| `<Leader>nid` | Insert date |
|
||||
|
||||
## Export
|
||||
|
||||
| Keybinding | Description |
|
||||
| ------------- | ------------------ |
|
||||
| `<Leader>nem` | Export to Markdown |
|
||||
|
||||
## Advanced List Manipulation
|
||||
|
||||
| Keybinding | Description |
|
||||
| ------------ | ------------------------------- |
|
||||
| `<Leader>nu` | Iterate next (cycle list types) |
|
||||
| `<Leader>np` | Iterate previous |
|
||||
|
||||
## Default Keybindings
|
||||
|
||||
Additionally, Neorg has many default keybindings that are active in `.norg` files:
|
||||
|
||||
### Navigation
|
||||
|
||||
| Keybinding | Description |
|
||||
| ---------- | ---------------------------- |
|
||||
| `<CR>` | Follow link under cursor |
|
||||
| `<M-k>` | Follow link up |
|
||||
| `<M-j>` | Follow link down |
|
||||
| `<M-h>` | Follow link previous |
|
||||
| `<M-l>` | Follow link next |
|
||||
| `gO` | Navigate to previous heading |
|
||||
| `gI` | Navigate to next heading |
|
||||
|
||||
### Lists & Tasks
|
||||
|
||||
| Keybinding | Description |
|
||||
| ---------- | -------------------------------------- |
|
||||
| `<M-CR>` | Toggle task status |
|
||||
| `<M-v>` | Toggle list type |
|
||||
| `<Tab>` | Indent current line (in insert mode) |
|
||||
| `<S-Tab>` | Unindent current line (in insert mode) |
|
||||
|
||||
### Folding (when folding is enabled)
|
||||
|
||||
| Keybinding | Description |
|
||||
| ---------- | ------------------------ |
|
||||
| `za` | Toggle fold under cursor |
|
||||
| `zR` | Open all folds |
|
||||
| `zM` | Close all folds |
|
||||
|
||||
### Text Objects
|
||||
|
||||
| Keybinding | Description |
|
||||
| ---------- | -------------- |
|
||||
| `ah` | Around heading |
|
||||
| `ih` | Inside heading |
|
||||
| `al` | Around list |
|
||||
| `il` | Inside list |
|
||||
|
||||
### Presenter Mode
|
||||
|
||||
| Keybinding | Description |
|
||||
| ---------- | ------------------- |
|
||||
| `j`/`k` | Next/previous slide |
|
||||
| `q` | Exit presenter |
|
||||
|
||||
## Command Reference
|
||||
|
||||
| Command | Description |
|
||||
| ------------------------- | ------------------------------ |
|
||||
| `:Neorg keybind all` | Show all available keybindings |
|
||||
| `:Neorg index` | Go to workspace index file |
|
||||
| `:Neorg return` | Return to previous location |
|
||||
| `:Neorg toggle-concealer` | Toggle concealer |
|
82
lua/custom/plugins/neorg_optimization_summary.md
Normal file
82
lua/custom/plugins/neorg_optimization_summary.md
Normal file
|
@ -0,0 +1,82 @@
|
|||
# Neorg Configuration Optimization Summary
|
||||
|
||||
## Optimizations Made
|
||||
|
||||
### 1. Enhanced Core Configuration
|
||||
|
||||
- Improved concealer settings with the "diamond" icon preset for better visuals
|
||||
- Added performance optimizations for the concealer
|
||||
- Added a new "projects" workspace
|
||||
- Added index file configuration
|
||||
- Configured versioning for exports
|
||||
|
||||
### 2. Added New Modules
|
||||
|
||||
- Added `core.summary` module for generating note summaries
|
||||
- Added `core.presenter` module for presentation mode
|
||||
- Added `core.itero` module for better list handling
|
||||
- Added `core.ui.calendar` for calendar navigation in journal
|
||||
|
||||
### 3. Enhanced Keybindings
|
||||
|
||||
- Created namespaced keybindings under `<Leader>n`
|
||||
- Added specialized keybindings for common operations:
|
||||
- Journal management
|
||||
- Workspace navigation
|
||||
- Document manipulation
|
||||
- Export functions
|
||||
- List manipulation
|
||||
|
||||
### 4. Created Documentation
|
||||
|
||||
- Comprehensive `neorg_guide.md` with detailed usage instructions
|
||||
- Dedicated `neorg_keymaps_reference.md` for quick reference
|
||||
- Setup checking tool for troubleshooting
|
||||
|
||||
### 5. Created File Structure
|
||||
|
||||
- Set up workspace directories:
|
||||
- ~/notes
|
||||
- ~/work/notes
|
||||
- ~/personal/notes
|
||||
- ~/projects/notes
|
||||
- Created folder structure within notes
|
||||
- Added index.norg as a starting point
|
||||
|
||||
## How to Use the Optimized Setup
|
||||
|
||||
1. **Check your setup** with the provided utility:
|
||||
|
||||
```vim
|
||||
:lua require('custom.utils.neorg_setup_check').check()
|
||||
```
|
||||
|
||||
2. **Open your notes index**:
|
||||
|
||||
```vim
|
||||
:Neorg workspace notes
|
||||
```
|
||||
|
||||
3. **Create a journal entry**:
|
||||
Press `<Leader>nj` or use command `:Neorg journal today`
|
||||
|
||||
4. **Navigate workspaces**:
|
||||
Press `<Leader>nw` to open the workspace selector
|
||||
|
||||
5. **Export to Markdown**:
|
||||
Press `<Leader>nem` within a Neorg file
|
||||
|
||||
## What's Changed from Previous Configuration
|
||||
|
||||
- Improved visual appearance with diamond icons
|
||||
- Added more workspace options
|
||||
- Expanded keybinding set with better documentation
|
||||
- Added support for advanced list manipulation
|
||||
- Enhanced journal capabilities
|
||||
- Added calendar support for date navigation
|
||||
- Improved organization with an index file
|
||||
|
||||
Refer to the full documentation in:
|
||||
|
||||
- `/home/kali/.config/nvim/lua/custom/plugins/neorg_guide.md`
|
||||
- `/home/kali/.config/nvim/lua/custom/plugins/neorg_keymaps_reference.md`
|
|
@ -1,34 +0,0 @@
|
|||
-- Fix for Telescope error with nil paths
|
||||
-- return {
|
||||
-- "nvim-telescope/telescope.nvim",
|
||||
-- -- This will only modify the existing telescope configuration
|
||||
-- config = function()
|
||||
-- local telescope = require('telescope')
|
||||
|
||||
-- -- Only apply our patch if telescope is loaded
|
||||
-- local utils = require('telescope.utils')
|
||||
-- local original_path_expand = utils.path_expand
|
||||
|
||||
-- -- Override path_expand with a safer version that handles nil paths
|
||||
-- utils.path_expand = function(path)
|
||||
-- if path == nil then
|
||||
-- -- Return the current working directory if path is nil
|
||||
-- return vim.fn.getcwd() or vim.fn.expand('%:p:h') or '.'
|
||||
-- end
|
||||
-- return original_path_expand(path)
|
||||
-- end
|
||||
|
||||
-- -- Any additional telescope settings can be set here
|
||||
-- telescope.setup({
|
||||
-- defaults = {
|
||||
-- path_display = { "truncate" },
|
||||
-- mappings = {
|
||||
-- i = {
|
||||
-- ["<C-u>"] = false,
|
||||
-- ["<C-d>"] = false,
|
||||
-- },
|
||||
-- },
|
||||
-- },
|
||||
-- })
|
||||
-- end,
|
||||
-- }
|
|
@ -77,17 +77,14 @@ return {
|
|||
},
|
||||
config = function(_, opts)
|
||||
require('trouble').setup(opts)
|
||||
-- Add which-key group
|
||||
local ok, which_key = pcall(require, 'which-key')
|
||||
-- if ok then
|
||||
-- -- Use standard which-key format that's known to work
|
||||
-- which_key.register({
|
||||
-- ["<leader>x"] = { name = "Trouble/Diagnostics" },
|
||||
-- })
|
||||
|
||||
-- which_key.register({
|
||||
-- ["g"] = { name = "Goto" },
|
||||
-- })
|
||||
-- end
|
||||
-- Add which-key group using the new v3 spec API
|
||||
local ok, which_key = pcall(require, 'which-key')
|
||||
if ok then
|
||||
which_key.add({
|
||||
{ "<leader>x", group = "Trouble/Diagnostics" },
|
||||
{ "g", group = "Goto" },
|
||||
})
|
||||
end
|
||||
end,
|
||||
}
|
||||
|
|
275
lua/custom/plugins/which_key_integration.lua
Normal file
275
lua/custom/plugins/which_key_integration.lua
Normal file
|
@ -0,0 +1,275 @@
|
|||
-- --[[
|
||||
-- Which-Key Integration Plugin - Latest v3 Configuration
|
||||
|
||||
-- This file sets up which-key with the latest v3 API and configuration.
|
||||
-- which-key v3 uses a new spec-based system for defining keymaps.
|
||||
-- ]]
|
||||
|
||||
-- return {
|
||||
-- {
|
||||
-- 'folke/which-key.nvim',
|
||||
-- event = "VeryLazy",
|
||||
-- opts = {
|
||||
-- preset = "modern", -- "classic", "modern", or "helix"
|
||||
-- delay = function(ctx)
|
||||
-- return ctx.plugin and 0 or 200
|
||||
-- end,
|
||||
-- plugins = {
|
||||
-- marks = true, -- shows a list of your marks on ' and `
|
||||
-- registers = true, -- shows your registers on " in NORMAL or <C-r> in INSERT mode
|
||||
-- spelling = {
|
||||
-- enabled = true, -- enabling this will show WhichKey when pressing z= to select spelling suggestions
|
||||
-- suggestions = 20, -- how many suggestions should be shown in the list?
|
||||
-- },
|
||||
-- presets = {
|
||||
-- operators = true, -- adds help for operators like d, y, ...
|
||||
-- motions = true, -- adds help for motions
|
||||
-- text_objects = true, -- help for text objects triggered after entering an operator
|
||||
-- windows = true, -- default bindings on <c-w>
|
||||
-- nav = true, -- misc bindings to work with windows
|
||||
-- z = true, -- bindings for folds, spelling and others prefixed with z
|
||||
-- g = true, -- bindings for prefixed with g
|
||||
-- },
|
||||
-- },
|
||||
-- spec = {
|
||||
-- { "g", group = "goto" },
|
||||
-- { "gz", group = "surround" },
|
||||
-- { "]", group = "next" },
|
||||
-- { "[", group = "prev" },
|
||||
-- { "<leader><tab>", group = "tabs" },
|
||||
-- { "<leader>b", group = "buffer" },
|
||||
-- { "<leader>c", group = "code" },
|
||||
-- { "<leader>f", group = "file/find" },
|
||||
-- { "<leader>g", group = "git" },
|
||||
-- { "<leader>h", group = "harpoon" },
|
||||
-- { "<leader>l", group = "leetcode" },
|
||||
-- { "<leader>n", group = "neorg" },
|
||||
-- { "<leader>q", group = "quit/session" },
|
||||
-- { "<leader>s", group = "search" },
|
||||
-- { "<leader>t", group = "toggle/tab" },
|
||||
-- { "<leader>w", group = "windows" },
|
||||
-- { "<leader>x", group = "diagnostics/quickfix" },
|
||||
-- },
|
||||
-- icons = {
|
||||
-- breadcrumb = "»", -- symbol used in the command line area that shows your active key combo
|
||||
-- separator = "→", -- symbol used between a key and it's label
|
||||
-- group = "+", -- symbol prepended to a group
|
||||
-- mappings = vim.g.have_nerd_font,
|
||||
-- },
|
||||
-- win = {
|
||||
-- border = "rounded", -- none, single, double, shadow, rounded
|
||||
-- position = "bottom", -- bottom, top
|
||||
-- margin = { 1, 0, 1, 0 }, -- extra window margin [top, right, bottom, left]
|
||||
-- padding = { 2, 2, 2, 2 }, -- extra window padding [top, right, bottom, left]
|
||||
-- winblend = 0, -- value between 0-100 0 for fully opaque and 100 for fully transparent
|
||||
-- },
|
||||
-- layout = {
|
||||
-- height = { min = 4, max = 25 }, -- min and max height of the columns
|
||||
-- width = { min = 20, max = 50 }, -- min and max width of the columns
|
||||
-- spacing = 3, -- spacing between columns
|
||||
-- align = "center", -- align columns left, center or right
|
||||
-- },
|
||||
-- show_help = true, -- show help message on the command line when the popup is visible
|
||||
-- show_keys = true, -- show the currently pressed key and its label as a message in the command line
|
||||
-- },
|
||||
-- config = function(_, opts)
|
||||
-- local wk = require("which-key")
|
||||
-- wk.setup(opts)
|
||||
|
||||
-- -- Use vim.schedule to ensure modules are loaded after Vim is ready
|
||||
-- vim.schedule(function()
|
||||
-- -- Load which-key setup with customized configuration
|
||||
-- require('custom.which_key_setup').setup()
|
||||
|
||||
-- -- Load core keymaps
|
||||
-- pcall(function() require('custom.keymaps').setup() end)
|
||||
|
||||
-- -- Load plugin-specific keymaps
|
||||
-- pcall(function() require('custom.plugin_keymaps').setup() end)
|
||||
-- end)
|
||||
-- end,
|
||||
-- -- Load on specific events with higher priority
|
||||
-- event = "VeryLazy",
|
||||
-- priority = 1000, -- High priority to ensure it loads first
|
||||
-- }
|
||||
-- }
|
||||
--[[
|
||||
Which-Key Integration Plugin - Latest v3 Configuration
|
||||
|
||||
This file sets up which-key with the latest v3 API and configuration.
|
||||
Official documentation: https://github.com/folke/which-key.nvim
|
||||
]]
|
||||
|
||||
return {
|
||||
{
|
||||
"folke/which-key.nvim",
|
||||
event = "VeryLazy",
|
||||
opts = {
|
||||
preset = "modern", -- "classic", "modern", or "helix"
|
||||
-- Delay before showing the popup. Can be a number or a function that returns a number.
|
||||
-- 0 to disable, or a function that returns the delay based on the current context
|
||||
delay = function(ctx)
|
||||
return ctx.plugin and 0 or 200
|
||||
end,
|
||||
|
||||
-- Filter to exclude mappings without descriptions or that match certain patterns
|
||||
filter = function(mapping)
|
||||
-- Exclude mappings without descriptions
|
||||
return mapping.desc and mapping.desc ~= ""
|
||||
end,
|
||||
|
||||
-- You can add any mappings here, or use `require("which-key").add()` later
|
||||
spec = {
|
||||
{
|
||||
mode = { "n", "v" },
|
||||
{ "<leader><tab>", group = "tabs" },
|
||||
{ "<leader>b", group = "buffer" },
|
||||
{ "<leader>c", group = "code/copilot" },
|
||||
{ "<leader>f", group = "file/find" },
|
||||
{ "<leader>g", group = "git" },
|
||||
{ "<leader>gh", group = "hunks" },
|
||||
{ "<leader>h", group = "harpoon" },
|
||||
{ "<leader>l", group = "leetcode" },
|
||||
{ "<leader>n", group = "neorg" },
|
||||
{ "<leader>q", group = "quit/session" },
|
||||
{ "<leader>s", group = "search" },
|
||||
{ "<leader>t", group = "toggle/tab" },
|
||||
{ "<leader>u", group = "ui" },
|
||||
{ "<leader>w", group = "windows" },
|
||||
{ "<leader>x", group = "diagnostics/quickfix" },
|
||||
{ "[", group = "prev" },
|
||||
{ "]", group = "next" },
|
||||
{ "g", group = "goto" },
|
||||
{ "gs", group = "surround" },
|
||||
{ "z", group = "fold" },
|
||||
},
|
||||
},
|
||||
|
||||
-- Window configuration
|
||||
win = {
|
||||
border = "rounded",
|
||||
no_overlap = true,
|
||||
padding = { 1, 2 }, -- extra window padding [top/bottom, right/left]
|
||||
title = true,
|
||||
title_pos = "center",
|
||||
zindex = 1000,
|
||||
},
|
||||
|
||||
-- Layout configuration
|
||||
layout = {
|
||||
width = { min = 20 }, -- min and max width of the columns
|
||||
spacing = 3, -- spacing between columns
|
||||
},
|
||||
|
||||
-- Key bindings for the which-key buffer
|
||||
keys = {
|
||||
scroll_down = "<c-d>", -- binding to scroll down inside the popup
|
||||
scroll_up = "<c-u>", -- binding to scroll up inside the popup
|
||||
},
|
||||
|
||||
-- Sort mappings
|
||||
sort = { "local", "order", "group", "alphanum", "mod" },
|
||||
|
||||
-- Expand groups when <= n mappings
|
||||
expand = 0,
|
||||
|
||||
-- Replacements for how keys and descriptions are displayed
|
||||
replace = {
|
||||
key = {
|
||||
function(key)
|
||||
return require("which-key.view").format(key)
|
||||
end,
|
||||
-- { "<Space>", "SPC" },
|
||||
},
|
||||
desc = {
|
||||
{ "<Plug>%(?(.*)%)?", "%1" },
|
||||
{ "^%+", "" },
|
||||
{ "<[cC]md>", "" },
|
||||
{ "<[cC][rR]>", "" },
|
||||
{ "<[sS]ilent>", "" },
|
||||
{ "^lua%s+", "" },
|
||||
{ "^call%s+", "" },
|
||||
{ "^:%s*", "" },
|
||||
},
|
||||
},
|
||||
|
||||
-- Icons configuration
|
||||
icons = {
|
||||
breadcrumb = "»", -- symbol used in the command line area that shows your active key combo
|
||||
separator = "➜", -- symbol used between a key and it's label
|
||||
group = "+", -- symbol prepended to a group
|
||||
ellipsis = "…",
|
||||
mappings = vim.g.have_nerd_font, -- set to false to disable all mapping icons
|
||||
rules = {},
|
||||
colors = true,
|
||||
-- Icon keys for different key types
|
||||
keys = vim.g.have_nerd_font and {} or {
|
||||
Up = " ",
|
||||
Down = " ",
|
||||
Left = " ",
|
||||
Right = " ",
|
||||
C = " ",
|
||||
M = " ",
|
||||
D = " ",
|
||||
S = " ",
|
||||
CR = " ",
|
||||
Esc = " ",
|
||||
ScrollWheelDown = " ",
|
||||
ScrollWheelUp = " ",
|
||||
NL = " ",
|
||||
BS = "",
|
||||
Space = " ",
|
||||
Tab = " ",
|
||||
F1 = "",
|
||||
F2 = "",
|
||||
F3 = "",
|
||||
F4 = "",
|
||||
F5 = "",
|
||||
F6 = "",
|
||||
F7 = "",
|
||||
F8 = "",
|
||||
F9 = "",
|
||||
F10 = "",
|
||||
F11 = "",
|
||||
F12 = "",
|
||||
},
|
||||
},
|
||||
|
||||
-- Show help and keys
|
||||
show_help = true,
|
||||
show_keys = true,
|
||||
|
||||
-- Disable which-key for certain file types or buffer types
|
||||
disable = {
|
||||
buftypes = {},
|
||||
filetypes = {},
|
||||
},
|
||||
},
|
||||
|
||||
config = function(_, opts)
|
||||
local wk = require("which-key")
|
||||
wk.setup(opts)
|
||||
|
||||
-- Load keymap modules after which-key is ready
|
||||
vim.schedule(function()
|
||||
-- Load core keymaps if they exist
|
||||
local core_keymaps_ok, _ = pcall(require, 'custom.keymaps')
|
||||
if core_keymaps_ok then
|
||||
pcall(function() require('custom.keymaps').setup() end)
|
||||
end
|
||||
|
||||
-- Load which-key specific setup
|
||||
local wk_setup_ok, _ = pcall(require, 'custom.which_key_setup')
|
||||
if wk_setup_ok then
|
||||
pcall(function() require('custom.which_key_setup').setup() end)
|
||||
end
|
||||
|
||||
-- Load plugin-specific keymaps
|
||||
local plugin_keymaps_ok, _ = pcall(require, 'custom.plugin_keymaps')
|
||||
if plugin_keymaps_ok then
|
||||
pcall(function() require('custom.plugin_keymaps').setup() end)
|
||||
end
|
||||
end)
|
||||
end,
|
||||
}
|
||||
}
|
0
lua/custom/utils/neorg_setup_check.lua
Normal file
0
lua/custom/utils/neorg_setup_check.lua
Normal file
152
lua/custom/which_key_setup.lua
Normal file
152
lua/custom/which_key_setup.lua
Normal file
|
@ -0,0 +1,152 @@
|
|||
--[[
|
||||
Which-key configuration
|
||||
|
||||
This file contains the configuration for which-key,
|
||||
organizing keybindings into logical groups with descriptions.
|
||||
]]
|
||||
|
||||
---@diagnostic disable-next-line: undefined-global
|
||||
local vim = vim
|
||||
local M = {}
|
||||
|
||||
function M.setup()
|
||||
-- Check if which-key is available
|
||||
local status_ok, wk = pcall(require, 'which-key')
|
||||
if not status_ok then
|
||||
return
|
||||
end
|
||||
|
||||
-- Use the modern which-key v3 API with add()
|
||||
-- Define common keybindings and groups
|
||||
wk.add {
|
||||
-- Most frequent operations
|
||||
{ '<leader>w', '<cmd>w<CR>', desc = 'Save file' },
|
||||
{ '<leader>q', '<cmd>q<CR>', desc = 'Quit' },
|
||||
{ '<leader>Q', '<cmd>qa!<CR>', desc = 'Force quit all' },
|
||||
{ '<leader>/', '<cmd>nohlsearch<CR>', desc = 'Clear highlights' },
|
||||
{ '<leader>e', '<cmd>Explore<CR>', desc = 'Open file explorer' },
|
||||
|
||||
-- File operations (f)
|
||||
{ '<leader>f', group = 'Find/Files' },
|
||||
{ '<leader>ff', '<cmd>Telescope find_files<CR>', desc = 'Find files' },
|
||||
{ '<leader>fg', '<cmd>Telescope live_grep<CR>', desc = 'Live grep' },
|
||||
{ '<leader>fb', '<cmd>Telescope buffers<CR>', desc = 'Find buffers' },
|
||||
{ '<leader>fr', '<cmd>Telescope oldfiles<CR>', desc = 'Recent files' },
|
||||
|
||||
-- Buffer operations (b)
|
||||
{ '<leader>b', group = 'Buffers' },
|
||||
{ '<leader>bb', '<cmd>Telescope buffers<CR>', desc = 'Browse buffers' },
|
||||
{ '<leader>bd', '<cmd>bd<CR>', desc = 'Delete buffer' },
|
||||
{ '<leader>bn', '<cmd>bn<CR>', desc = 'Next buffer' },
|
||||
{ '<leader>bp', '<cmd>bp<CR>', desc = 'Previous buffer' },
|
||||
|
||||
-- Git operations (g)
|
||||
{ '<leader>g', group = 'Git' },
|
||||
{ '<leader>gs', '<cmd>Telescope git_status<CR>', desc = 'Git status' },
|
||||
{ '<leader>gc', '<cmd>Telescope git_commits<CR>', desc = 'Git commits' },
|
||||
{ '<leader>gb', '<cmd>Telescope git_branches<CR>', desc = 'Git branches' },
|
||||
|
||||
-- Code operations (c)
|
||||
{ '<leader>c', group = 'Code/Copilot' },
|
||||
{ '<leader>ca', '<cmd>lua vim.lsp.buf.code_action()<CR>', desc = 'Code actions' },
|
||||
{ '<leader>cf', '<cmd>lua vim.lsp.buf.format()<CR>', desc = 'Format code' },
|
||||
|
||||
-- Harpoon (h)
|
||||
{ '<leader>h', group = 'Harpoon' },
|
||||
{ '<leader>ha', "<cmd>lua require('harpoon.mark').add_file()<CR>", desc = 'Add file' },
|
||||
{ '<leader>hh', "<cmd>lua require('harpoon.ui').toggle_quick_menu()<CR>", desc = 'Toggle menu' },
|
||||
{ '<leader>h1', "<cmd>lua require('harpoon.ui').nav_file(1)<CR>", desc = 'File 1' },
|
||||
{ '<leader>h2', "<cmd>lua require('harpoon.ui').nav_file(2)<CR>", desc = 'File 2' },
|
||||
{ '<leader>h3', "<cmd>lua require('harpoon.ui').nav_file(3)<CR>", desc = 'File 3' },
|
||||
{ '<leader>h4', "<cmd>lua require('harpoon.ui').nav_file(4)<CR>", desc = 'File 4' },
|
||||
|
||||
-- LeetCode (l)
|
||||
{ '<leader>l', group = 'LeetCode' },
|
||||
{ '<leader>ll', '<cmd>Leet<CR>', desc = 'Open LeetCode' },
|
||||
{ '<leader>ld', '<cmd>Leet daily<CR>', desc = 'Daily challenge' },
|
||||
{ '<leader>lr', '<cmd>Leet random<CR>', desc = 'Random problem' },
|
||||
{ '<leader>ls', '<cmd>Leet submit<CR>', desc = 'Submit solution' },
|
||||
{ '<leader>lt', '<cmd>Leet test<CR>', desc = 'Test solution' },
|
||||
|
||||
-- Tab operations (t)
|
||||
{ '<leader>t', group = 'Tabs' },
|
||||
{ '<leader>tn', '<cmd>tabnew<CR>', desc = 'New tab' },
|
||||
{ '<leader>tc', '<cmd>tabclose<CR>', desc = 'Close tab' },
|
||||
{ '<leader>to', '<cmd>tabnew<CR><cmd>Telescope find_files<CR>', desc = 'New tab with file' },
|
||||
{ '<leader>t1', '1gt', desc = 'Tab 1' },
|
||||
{ '<leader>t2', '2gt', desc = 'Tab 2' },
|
||||
{ '<leader>t3', '3gt', desc = 'Tab 3' },
|
||||
{ '<leader>t4', '4gt', desc = 'Tab 4' },
|
||||
|
||||
-- Window operations (w)
|
||||
{ '<leader>w', group = 'Windows' },
|
||||
{ '<leader>wv', '<cmd>vsplit<CR>', desc = 'Split vertically' },
|
||||
{ '<leader>ws', '<cmd>split<CR>', desc = 'Split horizontally' },
|
||||
{ '<leader>wq', '<C-w>q', desc = 'Close window' },
|
||||
{ '<leader>wo', '<C-w>o', desc = 'Close other windows' },
|
||||
{ '<leader>wh', '<C-w>h', desc = 'Go to left window' },
|
||||
{ '<leader>wj', '<C-w>j', desc = 'Go to lower window' },
|
||||
{ '<leader>wk', '<C-w>k', desc = 'Go to upper window' },
|
||||
{ '<leader>wl', '<C-w>l', desc = 'Go to right window' },
|
||||
|
||||
-- Terminal operations (tt)
|
||||
{ '<leader>tt', group = 'Terminal' },
|
||||
{ '<leader>ttt', '<cmd>ToggleTerm<CR>', desc = 'Toggle terminal' },
|
||||
{ '<leader>ttf', '<cmd>ToggleTerm direction=float<CR>', desc = 'Floating terminal' },
|
||||
{ '<leader>tth', '<cmd>ToggleTerm size=10 direction=horizontal<CR>', desc = 'Horizontal terminal' },
|
||||
{ '<leader>ttv', '<cmd>ToggleTerm size=80 direction=vertical<CR>', desc = 'Vertical terminal' },
|
||||
|
||||
-- Trouble/Diagnostics (x)
|
||||
{ '<leader>x', group = 'Diagnostics/Trouble' },
|
||||
{ '<leader>xx', '<cmd>TroubleToggle<CR>', desc = 'Toggle Trouble' },
|
||||
{ '<leader>xw', '<cmd>TroubleToggle workspace_diagnostics<CR>', desc = 'Workspace diagnostics' },
|
||||
{ '<leader>xd', '<cmd>TroubleToggle document_diagnostics<CR>', desc = 'Document diagnostics' },
|
||||
{ '<leader>xq', '<cmd>TroubleToggle quickfix<CR>', desc = 'Quickfix list' },
|
||||
{ '<leader>xl', '<cmd>TroubleToggle loclist<CR>', desc = 'Location list' },
|
||||
|
||||
-- Neorg (n)
|
||||
{ '<leader>n', group = 'Neorg' },
|
||||
{ '<leader>ni', '<cmd>Neorg index<CR>', desc = 'Index' },
|
||||
{ '<leader>nr', '<cmd>Neorg return<CR>', desc = 'Return' },
|
||||
{ '<leader>nt', '<cmd>Neorg toggle-concealer<CR>', desc = 'Toggle concealer' },
|
||||
{ '<leader>nm', '<cmd>Neorg inject-metadata<CR>', desc = 'Inject metadata' },
|
||||
|
||||
-- Neorg Journal (nj)
|
||||
{ '<leader>nj', group = 'Journal' },
|
||||
{ '<leader>njj', '<cmd>Neorg journal today<CR>', desc = 'Today' },
|
||||
{ '<leader>njt', '<cmd>Neorg journal tomorrow<CR>', desc = 'Tomorrow' },
|
||||
{ '<leader>njy', '<cmd>Neorg journal yesterday<CR>', desc = 'Yesterday' },
|
||||
|
||||
-- Neorg Workspace (nw)
|
||||
{ '<leader>nw', group = 'Workspace' },
|
||||
{ '<leader>nwn', '<cmd>Neorg workspace notes<CR>', desc = 'Notes' },
|
||||
{ '<leader>nww', '<cmd>Neorg workspace work<CR>', desc = 'Work' },
|
||||
{ '<leader>nwp', '<cmd>Neorg workspace personal<CR>', desc = 'Personal' },
|
||||
|
||||
-- Neorg Export (ne)
|
||||
{ '<leader>ne', group = 'Export' },
|
||||
{ '<leader>neh', '<cmd>Neorg export to-html<CR>', desc = 'To HTML' },
|
||||
{ '<leader>nem', '<cmd>Neorg export to-markdown<CR>', desc = 'To Markdown' },
|
||||
{ '<leader>nep', '<cmd>Neorg export to-pdf<CR>', desc = 'To PDF' },
|
||||
|
||||
-- Diagnostics navigation
|
||||
{ '[d', '<cmd>lua vim.diagnostic.goto_prev()<CR>', desc = 'Previous diagnostic' },
|
||||
{ ']d', '<cmd>lua vim.diagnostic.goto_next()<CR>', desc = 'Next diagnostic' },
|
||||
}
|
||||
|
||||
-- Visual mode mappings
|
||||
wk.add {
|
||||
{ '<leader>c', group = 'Code', mode = 'v' },
|
||||
{ '<leader>cc', "<cmd>'<,'>CommentToggle<CR>", desc = 'Comment selection', mode = 'v' },
|
||||
{ '<leader>y', '"+y', desc = 'Yank to system clipboard', mode = 'v' },
|
||||
{ '<leader>p', '"+p', desc = 'Paste from system clipboard', mode = 'v' },
|
||||
}
|
||||
|
||||
-- Buffer navigation shortcuts
|
||||
wk.add {
|
||||
{ '<Tab>', '<cmd>bnext<CR>', desc = 'Next buffer' },
|
||||
{ '<S-Tab>', '<cmd>bprevious<CR>', desc = 'Previous buffer' },
|
||||
}
|
||||
end
|
||||
|
||||
return M
|
Loading…
Add table
Add a link
Reference in a new issue