new split windows repositioned to right/bottom for horizontal/vertical splits

This commit is contained in:
psychhim
2025-09-27 03:31:17 +05:30
parent d2b7fd14c3
commit 87e35827c3
2 changed files with 52 additions and 35 deletions

View File

@@ -402,12 +402,6 @@ end, { desc = 'Save & quit (prompt if new file)' })
--Discard changes and Close current window --Discard changes and Close current window
vim.keymap.set('n', '<leader>qn', '<Cmd>q!<CR>') vim.keymap.set('n', '<leader>qn', '<Cmd>q!<CR>')
--Horizontal split
vim.keymap.set('n', '<leader>sh', '<Cmd>split<CR>', { desc = 'Split [H]orizontal' })
--Vertical split
vim.keymap.set('n', '<leader>sv', '<Cmd>vsplit<CR>', { desc = 'Split [V]ertical' })
--Switch below/right split windows --Switch below/right split windows
vim.keymap.set('n', '<leader><Tab>', '<C-W><C-W>') vim.keymap.set('n', '<leader><Tab>', '<C-W><C-W>')

View File

@@ -1,13 +1,13 @@
-- Unless you are still migrating, remove the deprecated commands from v1.x -- Unless you are still migrating, remove the deprecated commands from v1.x
vim.cmd([[ let g:neo_tree_remove_legacy_commands = 1 ]]) vim.cmd [[ let g:neo_tree_remove_legacy_commands = 1 ]]
return { return {
"nvim-neo-tree/neo-tree.nvim", 'nvim-neo-tree/neo-tree.nvim',
version = "*", version = '*',
dependencies = { dependencies = {
"nvim-lua/plenary.nvim", 'nvim-lua/plenary.nvim',
"nvim-tree/nvim-web-devicons", 'nvim-tree/nvim-web-devicons',
"MunifTanjim/nui.nvim", 'MunifTanjim/nui.nvim',
}, },
config = function() config = function()
local function smart_open(state) local function smart_open(state)
@@ -17,6 +17,13 @@ return {
end end
local path = node:get_id() local path = node:get_id()
-- If the node is a directory, just toggle expand/collapse
if node.type == 'directory' then
state.commands.toggle_node(state, node)
return
end
-- --- File handling starts here ---
-- Reuse already open buffer in any tab safely -- Reuse already open buffer in any tab safely
for _, tab in ipairs(vim.api.nvim_list_tabpages()) do for _, tab in ipairs(vim.api.nvim_list_tabpages()) do
if vim.api.nvim_tabpage_is_valid(tab) then if vim.api.nvim_tabpage_is_valid(tab) then
@@ -30,10 +37,7 @@ return {
for _, w in ipairs(vim.api.nvim_list_wins()) do for _, w in ipairs(vim.api.nvim_list_wins()) do
if vim.api.nvim_win_is_valid(w) then if vim.api.nvim_win_is_valid(w) then
local b = vim.api.nvim_win_get_buf(w) local b = vim.api.nvim_win_get_buf(w)
if if vim.api.nvim_buf_is_valid(b) and vim.api.nvim_buf_get_option(b, 'filetype') == 'neo-tree' then
vim.api.nvim_buf_is_valid(b)
and vim.api.nvim_buf_get_option(b, "filetype") == "neo-tree"
then
vim.api.nvim_win_close(w, true) vim.api.nvim_win_close(w, true)
end end
end end
@@ -53,9 +57,9 @@ return {
local buf = vim.api.nvim_win_get_buf(win) local buf = vim.api.nvim_win_get_buf(win)
if vim.api.nvim_buf_is_valid(buf) then if vim.api.nvim_buf_is_valid(buf) then
local bufname = vim.api.nvim_buf_get_name(buf) local bufname = vim.api.nvim_buf_get_name(buf)
local buftype = vim.api.nvim_buf_get_option(buf, "buftype") local buftype = vim.api.nvim_buf_get_option(buf, 'buftype')
local modified = vim.api.nvim_buf_get_option(buf, "modified") local modified = vim.api.nvim_buf_get_option(buf, 'modified')
if bufname == "" and buftype == "" and not modified then if bufname == '' and buftype == '' and not modified then
empty_buf = buf empty_buf = buf
vim.api.nvim_set_current_win(win) vim.api.nvim_set_current_win(win)
break break
@@ -65,43 +69,62 @@ return {
end end
if empty_buf then if empty_buf then
vim.cmd("edit " .. vim.fn.fnameescape(path)) vim.cmd('edit ' .. vim.fn.fnameescape(path))
else else
vim.cmd("tabnew " .. vim.fn.fnameescape(path)) vim.cmd('tabnew ' .. vim.fn.fnameescape(path))
end end
-- Always close Neo-tree window if open -- Always close Neo-tree window if open
for _, win in ipairs(vim.api.nvim_list_wins()) do for _, win in ipairs(vim.api.nvim_list_wins()) do
if vim.api.nvim_win_is_valid(win) then if vim.api.nvim_win_is_valid(win) then
local buf = vim.api.nvim_win_get_buf(win) local buf = vim.api.nvim_win_get_buf(win)
if if vim.api.nvim_buf_is_valid(buf) and vim.api.nvim_buf_get_option(buf, 'filetype') == 'neo-tree' then
vim.api.nvim_buf_is_valid(buf)
and vim.api.nvim_buf_get_option(buf, "filetype") == "neo-tree"
then
vim.api.nvim_win_close(win, true) vim.api.nvim_win_close(win, true)
end end
end end
end end
end end
require("neo-tree").setup({ require('neo-tree').setup {
close_if_last_window = true, close_if_last_window = true,
popup_border_style = "rounded", popup_border_style = 'rounded',
enable_git_status = true, enable_git_status = true,
enable_diagnostics = true, enable_diagnostics = true,
default_component_configs = { default_component_configs = {
indent = { padding = 1, indent_size = 2 }, indent = { padding = 1, indent_size = 2 },
icon = { folder_closed = "", folder_open = "", folder_empty = "" }, icon = { folder_closed = '', folder_open = '', folder_empty = '' },
}, },
window = { window = {
position = "float", position = 'float',
width = 40, width = 40,
mapping_options = { noremap = true, nowait = true }, mapping_options = { noremap = true, nowait = true },
mappings = { mappings = {
["<cr>"] = smart_open, ['<cr>'] = smart_open,
["h"] = "open_vsplit", ['v'] = function(state)
["v"] = "open_split", local node = state.tree:get_node()
["t"] = "noop", if node.type == 'directory' then
state.commands.toggle_node(state, node)
return
end
local path = node:get_id()
state.commands.open_split(state) -- opens horizontal split (top)
vim.schedule(function()
vim.cmd 'wincmd J' -- move the new split to bottom
end)
end,
['h'] = function(state)
local node = state.tree:get_node()
if node.type == 'directory' then
state.commands.toggle_node(state, node)
return
end
local path = node:get_id()
state.commands.open_vsplit(state) -- opens vertical split (left)
vim.schedule(function()
vim.cmd 'wincmd L' -- move the new split to right
end)
end,
['t'] = 'noop',
}, },
}, },
filesystem = { filesystem = {
@@ -109,13 +132,13 @@ return {
enabled = true, -- updated to table format enabled = true, -- updated to table format
}, },
use_libuv_file_watcher = true, use_libuv_file_watcher = true,
hijack_netrw_behavior = "open_default", hijack_netrw_behavior = 'open_default',
filtered_items = { filtered_items = {
visible = true, visible = true,
hide_dotfiles = false, hide_dotfiles = false,
hide_gitignored = true, hide_gitignored = true,
}, },
}, },
}) }
end, end,
} }