neoscroll and keybindings

This commit is contained in:
RiverMatsumoto 2026-01-03 23:59:33 -10:00
parent 291ae1ea52
commit ca178b641d
1 changed files with 83 additions and 26 deletions

109
init.lua
View File

@ -2,7 +2,7 @@ vim.g.maplocalleader = ' '
vim.g.mapleader = ' ' vim.g.mapleader = ' '
-- install deps if need to -- install deps if need to
require("bootstrap.pacman") require 'bootstrap.pacman'
-- ========================= -- =========================
-- Lazy.nvim bootstrap -- Lazy.nvim bootstrap
@ -34,6 +34,61 @@ require('lazy').setup({
{ 'numToStr/Comment.nvim', opts = {} }, { 'numToStr/Comment.nvim', opts = {} },
{
'karb94/neoscroll.nvim',
opts = {},
config = function()
local neoscroll = require 'neoscroll'
neoscroll.setup {
-- remove <C-u>/<C-d> from defaults so your custom maps win
mappings = {
'<C-b>',
'<C-f>',
'<C-y>',
'<C-e>',
'zt',
'zz',
'zb',
},
hide_cursor = true, -- Hide cursor while scrolling
stop_eof = true, -- Stop at <EOF> when scrolling downwards
respect_scrolloff = true, -- Stop scrolling when the cursor reaches the scrolloff margin of the file
cursor_scrolls_alone = true, -- The cursor will keep on scrolling even if the window cannot scroll further
duration_multiplier = 0.3, -- Global duration multiplier
easing = 'quadratic', -- Default easing function
pre_hook = function(info)
if info == 'center' then
vim.cmd 'normal! M'
end
end,
post_hook = nil,
}
local function near_file_edge()
local line = vim.api.nvim_win_get_cursor(0)[1]
local last = vim.api.nvim_buf_line_count(0)
local so = vim.wo.scrolloff
return line <= so + 1 or line >= last - so
end
local modes = { 'n', 'v', 'x' }
vim.keymap.set(modes, '<C-d>', function()
neoscroll.ctrl_d { duration = 300 }
if not near_file_edge() then
vim.cmd 'normal! M'
end
end)
vim.keymap.set(modes, '<C-u>', function()
neoscroll.ctrl_u { duration = 300 }
if not near_file_edge() then
vim.cmd 'normal! M'
end
end)
end,
},
{ {
'nvim-treesitter/nvim-treesitter', 'nvim-treesitter/nvim-treesitter',
lazy = false, lazy = false,
@ -53,7 +108,9 @@ require('lazy').setup({
'yaml', 'yaml',
'toml', 'toml',
}, },
highlight = { enable = true }, highlight = {
enable = true,
},
}, },
}, },
@ -126,17 +183,6 @@ require('lazy').setup({
end, end,
}, },
-- Colors
{
'folke/tokyonight.nvim',
lazy = false,
priority = 1000,
config = function()
vim.cmd.colorscheme 'gruvbox-material'
vim.cmd.hi 'Comment gui=none'
end,
},
{ {
'sphamba/smear-cursor.nvim', 'sphamba/smear-cursor.nvim',
opts = { opts = {
@ -191,7 +237,7 @@ require('lazy').setup({
system_open = function(state) system_open = function(state)
local node = state.tree:get_node() local node = state.tree:get_node()
local path = node:get_id() -- absolute path local path = node:get_id() -- absolute path
vim.fn.jobstart({ 'imv', path }, { detach = true }) vim.fn.jobstart({ 'xdg-open', path }, { detach = true })
end, end,
}, },
window = { window = {
@ -794,6 +840,7 @@ require('lazy').setup({
return { 'isort', 'black' } return { 'isort', 'black' }
end, end,
yaml = { 'prettier' }, yaml = { 'prettier' },
rust = { 'rustfmt' },
['*'] = { 'injected' }, ['*'] = { 'injected' },
}, },
ignore_errors = true, ignore_errors = true,
@ -1465,11 +1512,11 @@ vim.api.nvim_create_autocmd({ 'BufLeave', 'InsertEnter', 'FocusLost' }, {
-- Keymaps (treesitter keymaps removed) -- Keymaps (treesitter keymaps removed)
-- ========================= -- =========================
-- scrolling / search centering -- scrolling / search centering, disabled for neoscroll
vim.keymap.set('n', '<C-d>', '<C-d>zz', { desc = 'Scroll down and center cursor' }) -- vim.keymap.set('n', '<C-d>', '<C-d>zz', { desc = 'Scroll down and center cursor' })
vim.keymap.set('n', '<C-u>', '<C-u>zz', { desc = 'Scroll up and center cursor' }) -- vim.keymap.set('n', '<C-u>', '<C-u>zz', { desc = 'Scroll up and center cursor' })
vim.keymap.set('n', 'n', 'nzzzv', { desc = 'Next search result and center' }) -- vim.keymap.set('n', 'n', 'nzzzv', { desc = 'Next search result and center' })
vim.keymap.set('n', 'N', 'Nzzzv', { desc = 'Previous search result and center' }) -- vim.keymap.set('n', 'N', 'Nzzzv', { desc = 'Previous search result and center' })
-- move selected lines -- move selected lines
vim.keymap.set('v', 'J', ":m '>+1<CR>gv=gv", { desc = 'Move selection down' }) vim.keymap.set('v', 'J', ":m '>+1<CR>gv=gv", { desc = 'Move selection down' })
@ -1497,6 +1544,7 @@ vim.keymap.set('n', '<leader>de', vim.diagnostic.enable, { desc = 'Enable diagno
vim.keymap.set('n', '<leader>cw', ':cd %:p:h<CR>:pwd<CR>', { desc = 'cd to current file directory' }) vim.keymap.set('n', '<leader>cw', ':cd %:p:h<CR>:pwd<CR>', { desc = 'cd to current file directory' })
vim.keymap.set('n', '<C-I>', '<C-I>', { noremap = true, desc = 'Jump forward in jumplist' }) vim.keymap.set('n', '<C-I>', '<C-I>', { noremap = true, desc = 'Jump forward in jumplist' })
vim.keymap.set('n', '<C-s>', ':write<CR>', { desc = 'Save file' }) vim.keymap.set('n', '<C-s>', ':write<CR>', { desc = 'Save file' })
vim.keymap.set('i', '<C-s>', ':write<CR>', { desc = 'Save file' })
vim.keymap.set('n', '<leader>cd', ':ToggleAutoComplete<CR>', { desc = 'Toggle autocomplete' }) vim.keymap.set('n', '<leader>cd', ':ToggleAutoComplete<CR>', { desc = 'Toggle autocomplete' })
vim.keymap.set('n', '<leader>ce', ':ToggleAutoComplete<CR>', { desc = 'Toggle autocomplete (alias)' }) vim.keymap.set('n', '<leader>ce', ':ToggleAutoComplete<CR>', { desc = 'Toggle autocomplete (alias)' })
@ -1615,10 +1663,6 @@ vim.keymap.set('n', '<C-w>', '<cmd>wqa<cr>')
vim.keymap.set('n', '<leader>sv', '<cmd>vsplit<CR>') vim.keymap.set('n', '<leader>sv', '<cmd>vsplit<CR>')
vim.keymap.set('n', '<leader>sh', '<cmd>split<CR>') vim.keymap.set('n', '<leader>sh', '<cmd>split<CR>')
-- signature help
vim.api.nvim_set_keymap('i', '<C-S-Space>', '<cmd>lua vim.lsp.buf.signature_help()<CR>', { noremap = true, silent = true })
vim.api.nvim_set_keymap('n', '<C-S-Space>', '<cmd>lua vim.lsp.buf.signature_help()<CR>', { noremap = true, silent = true })
-- toggle neotree -- toggle neotree
local function toggle_neotree() local function toggle_neotree()
local manager = require 'neo-tree.sources.manager' local manager = require 'neo-tree.sources.manager'
@ -1650,8 +1694,21 @@ vim.api.nvim_set_keymap('i', '<C-H>', '<C-W>', { noremap = true })
vim.keymap.set('n', '<leader>ga', ':Telescope coauthors<CR>') vim.keymap.set('n', '<leader>ga', ':Telescope coauthors<CR>')
-- install treesitter parsers -- install treesitter parsers
require('nvim-treesitter').install { 'c', 'rust', 'gdscript', 'c#' } require('nvim-treesitter').install { 'c', 'rust', 'gdscript', 'c_sharp' }
-- LSP basics -- ======== LSP settings ===========
-- signature help
vim.api.nvim_set_keymap('i', '<C-S-Space>', '<cmd>lua vim.lsp.buf.signature_help()<CR>', { noremap = true, silent = true })
vim.api.nvim_set_keymap('n', '<C-S-Space>', '<cmd>lua vim.lsp.buf.signature_help()<CR>', { noremap = true, silent = true })
vim.api.nvim_set_keymap('i', '<C-S-Space>', '<cmd>lua vim.lsp.buf.hover()<CR>', { noremap = true, silent = true })
vim.api.nvim_set_keymap('n', '<C-S-Space>', '<cmd>lua vim.lsp.buf.hover()<CR>', { noremap = true, silent = true })
-- code actions (normal + insert)
vim.keymap.set({ 'n', 'i' }, '<C-.>', vim.lsp.buf.code_action, { silent = true, desc = 'Code Action' })
-- rename bindings
vim.keymap.set('n', '<F2>', vim.lsp.buf.rename, { silent = true, desc = 'LSP: Rename' }) vim.keymap.set('n', '<F2>', vim.lsp.buf.rename, { silent = true, desc = 'LSP: Rename' })
vim.keymap.set('n', '<F12>', vim.lsp.buf.references, { silent = true, desc = 'LSP: References' }) vim.keymap.set('n', '<F12>', vim.lsp.buf.definition, { silent = true, desc = 'LSP: Go To Defintion' })
-- put after colorscheme load
vim.api.nvim_set_hl(0, '@lsp.type.typeAlias', { link = 'Type' })
vim.api.nvim_set_hl(0, '@lsp.type.type', { link = 'Type' })
vim.api.nvim_set_hl(0, '@lsp.type.struct', { link = 'Type' })