Adding smart-split and configure shortcuts in custom init.lua
This commit is contained in:
parent
d7f4fef599
commit
4be9d4536a
|
|
@ -22,4 +22,22 @@ vim.cmd [[
|
|||
vim.keymap.set('v', 'k', "v:count == 0 ? 'gk' : 'k'", { expr = true, silent = true })
|
||||
vim.keymap.set('v', 'j', "v:count == 0 ? 'gj' : 'j'", { expr = true, silent = true })
|
||||
|
||||
-- Provide function and keymap binding to show not saved changes of current buffer
|
||||
function showBufferDiff()
|
||||
vim.cmd [[w !diff % - ]]
|
||||
end
|
||||
-- ":vim.cmd([[w !diff % - ]])"
|
||||
vim.keymap.set('n', '<leader>pd', showBufferDiff, { expr = true, silent = true, desc = 'Print diff between buffer and file' })
|
||||
|
||||
-- Mimic the tmux config here. S for vertical split, v for horizontal:
|
||||
-- - Remap for easier window control access
|
||||
-- - Remap general the window control access to <A-w>.
|
||||
-- - Remap (swapping) particular "s" to "v" when entering window control access.
|
||||
-- (Bear in mind that you have to release <A-w> keys, and then press "s" or "v".
|
||||
-- Otherwise the swapping of "s" and "v" does not work.
|
||||
local map = vim.api.nvim_set_keymap
|
||||
map('n', '<A-w>', '<C-w>', { noremap = false })
|
||||
map('n', '<C-w>s', '<C-w>v', { noremap = true })
|
||||
map('n', '<C-w>v', '<C-w>s', { noremap = true })
|
||||
|
||||
return {}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,132 @@
|
|||
return {
|
||||
'mrjones2014/smart-splits.nvim',
|
||||
dependencies = {
|
||||
'pogyomo/submode.nvim',
|
||||
},
|
||||
-- config = function() end,
|
||||
config = function()
|
||||
require('smart-splits').setup {
|
||||
-- Ignored filetypes (only while resizing)
|
||||
ignored_filetypes = {
|
||||
'nofile',
|
||||
'quickfix',
|
||||
'prompt',
|
||||
},
|
||||
-- Ignored buffer types (only while resizing)
|
||||
ignored_buftypes = { 'NvimTree' },
|
||||
-- the default number of lines/columns to resize by at a time
|
||||
default_amount = 3,
|
||||
-- Desired behavior when your cursor is at an edge and you
|
||||
-- are moving towards that same edge:
|
||||
-- 'wrap' => Wrap to opposite side
|
||||
-- 'split' => Create a new split in the desired direction
|
||||
-- 'stop' => Do nothing
|
||||
-- function => You handle the behavior yourself
|
||||
-- NOTE: If using a function, the function will be called with
|
||||
-- a context object with the following fields:
|
||||
-- {
|
||||
-- mux = {
|
||||
-- type:'tmux'|'wezterm'|'kitty'
|
||||
-- current_pane_id():number,
|
||||
-- is_in_session(): boolean
|
||||
-- current_pane_is_zoomed():boolean,
|
||||
-- -- following methods return a boolean to indicate success or failure
|
||||
-- current_pane_at_edge(direction:'left'|'right'|'up'|'down'):boolean
|
||||
-- next_pane(direction:'left'|'right'|'up'|'down'):boolean
|
||||
-- resize_pane(direction:'left'|'right'|'up'|'down'):boolean
|
||||
-- split_pane(direction:'left'|'right'|'up'|'down',size:number|nil):boolean
|
||||
-- },
|
||||
-- direction = 'left'|'right'|'up'|'down',
|
||||
-- split(), -- utility function to split current Neovim pane in the current direction
|
||||
-- wrap(), -- utility function to wrap to opposite Neovim pane
|
||||
-- }
|
||||
-- NOTE: `at_edge = 'wrap'` is not supported on Kitty terminal
|
||||
-- multiplexer, as there is no way to determine layout via the CLI
|
||||
at_edge = 'wrap',
|
||||
-- when moving cursor between splits left or right,
|
||||
-- place the cursor on the same row of the *screen*
|
||||
-- regardless of line numbers. False by default.
|
||||
-- Can be overridden via function parameter, see Usage.
|
||||
move_cursor_same_row = false,
|
||||
-- whether the cursor should follow the buffer when swapping
|
||||
-- buffers by default; it can also be controlled by passing
|
||||
-- `{ move_cursor = true }` or `{ move_cursor = false }`
|
||||
-- when calling the Lua function.
|
||||
cursor_follows_swapped_bufs = false,
|
||||
-- resize mode options
|
||||
resize_mode = {
|
||||
-- key to exit persistent resize mode
|
||||
quit_key = '<ESC>',
|
||||
-- keys to use for moving in resize mode
|
||||
-- in order of left, down, up' right
|
||||
resize_keys = { 'h', 'j', 'k', 'l' },
|
||||
-- set to true to silence the notifications
|
||||
-- when entering/exiting persistent resize mode
|
||||
silent = false,
|
||||
-- must be functions, they will be executed when
|
||||
-- entering or exiting the resize mode
|
||||
hooks = {
|
||||
on_enter = nil,
|
||||
on_leave = nil,
|
||||
},
|
||||
},
|
||||
-- ignore these autocmd events (via :h eventignore) while processing
|
||||
-- smart-splits.nvim computations, which involve visiting different
|
||||
-- buffers and windows. These events will be ignored during processing,
|
||||
-- and un-ignored on completed. This only applies to resize events,
|
||||
-- not cursor movement events.
|
||||
ignored_events = {
|
||||
'BufEnter',
|
||||
'WinEnter',
|
||||
},
|
||||
-- enable or disable a multiplexer integration;
|
||||
-- automatically determined, unless explicitly disabled or set,
|
||||
-- by checking the $TERM_PROGRAM environment variable,
|
||||
-- and the $KITTY_LISTEN_ON environment variable for Kitty
|
||||
multiplexer_integration = nil,
|
||||
-- disable multiplexer navigation if current multiplexer pane is zoomed
|
||||
-- this functionality is only supported on tmux and Wezterm due to kitty
|
||||
-- not having a way to check if a pane is zoomed
|
||||
disable_multiplexer_nav_when_zoomed = true,
|
||||
-- Supply a Kitty remote control password if needed,
|
||||
-- or you can also set vim.g.smart_splits_kitty_password
|
||||
-- see https://sw.kovidgoyal.net/kitty/conf/#opt-kitty.remote_control_password
|
||||
kitty_password = nil,
|
||||
-- default logging level, one of: 'trace'|'debug'|'info'|'warn'|'error'|'fatal'
|
||||
log_level = 'info',
|
||||
persistent_resize_mode = true,
|
||||
}
|
||||
|
||||
-- vim.keymap.set('n', '<C-w>r', require('smart-splits').start_resize_mode, { desc = 'Start resize mode' })
|
||||
vim.keymap.set('n', '<A-l>', require('smart-splits').move_cursor_right, { desc = 'Move right' })
|
||||
vim.keymap.set('n', '<A-h>', require('smart-splits').move_cursor_left, { desc = 'Move left' })
|
||||
vim.keymap.set('n', '<A-j>', require('smart-splits').move_cursor_down, { desc = 'Move down' })
|
||||
vim.keymap.set('n', '<A-k>', require('smart-splits').move_cursor_up, { desc = 'Move up' })
|
||||
|
||||
-- Resize
|
||||
local submode = require 'submode'
|
||||
submode.create('WinResize', {
|
||||
mode = 'n',
|
||||
enter = '<C-w>r',
|
||||
leave = { '<Esc>', 'q', '<C-c>' },
|
||||
hook = {
|
||||
on_enter = function()
|
||||
vim.notify 'Use { h, j, k, l } or { <Left>, <Down>, <Up>, <Right> } to resize the window'
|
||||
end,
|
||||
on_leave = function()
|
||||
vim.notify ''
|
||||
end,
|
||||
},
|
||||
default = function(register)
|
||||
register('h', require('smart-splits').resize_left, { desc = 'Resize left' })
|
||||
register('j', require('smart-splits').resize_down, { desc = 'Resize down' })
|
||||
register('k', require('smart-splits').resize_up, { desc = 'Resize up' })
|
||||
register('l', require('smart-splits').resize_right, { desc = 'Resize right' })
|
||||
register('<Left>', require('smart-splits').resize_left, { desc = 'Resize left' })
|
||||
register('<Down>', require('smart-splits').resize_down, { desc = 'Resize down' })
|
||||
register('<Up>', require('smart-splits').resize_up, { desc = 'Resize up' })
|
||||
register('<Right>', require('smart-splits').resize_right, { desc = 'Resize right' })
|
||||
end,
|
||||
})
|
||||
end,
|
||||
}
|
||||
Loading…
Reference in New Issue