1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
|
-----------
-- Basic --
-----------
vim.g.mapleader = " "
vim.opt.mouse = ''
vim.opt.wrap = true
vim.opt.number = true
vim.opt.relativenumber = true
vim.opt.laststatus = 2
vim.opt.hlsearch = true
vim.opt.incsearch = true
-- Directory for swap files
vim.opt.directory = vim.fn.expand("~/.local/share/nvim/swap//")
-- Search into subfolders
-- Provides tab completion for file related tasks
vim.opt.path:append '**'
-- Display all matching files when we tab complete
vim.opt.wildmenu = true
vim.cmd("filetype plugin on")
vim.api.nvim_set_keymap('v', '<C-c>', '"+y', { noremap = true, silent = true })
------------------------------------
-- Native Neovim tabs and windows --
------------------------------------
vim.keymap.set('n', '<leader>f', '<cmd>Explore<CR>', { desc = 'Open Neotree' })
vim.keymap.set("n", '<leader>c',function()
vim.cmd("Tex")
vim.cmd("wincmd r")
end, { desc = "Open tab"})
vim.keymap.set("n", '<leader>v', function()
vim.cmd("Vex")
vim.cmd("wincmd x")
vim.cmd("wincmd l")
vim.cmd("enew")
end, { desc = "Open vertical split" })
vim.keymap.set("n", '<leader>h', function()
vim.cmd("Sex")
vim.cmd("wincmd x")
vim.cmd("wincmd j")
end, { desc = "Open horizontal split" })
-- Open terminal
local term_buf = nil
vim.keymap.set('n', '<leader>t', function()
if term_buf and vim.api.nvim_buf_is_valid(term_buf) then
-- Reuse existing terminal
vim.cmd('rightbelow vsplit')
vim.cmd('buffer ' .. term_buf)
else
-- Create a new terminal
vim.cmd('rightbelow vsplit | terminal')
term_buf = vim.api.nvim_get_current_buf()
end
vim.cmd('startinsert')
end, { desc = 'Open terminal in vertical split' })
vim.keymap.set('t', '<Esc>', [[<C-\><C-n>:q<CR>]], { desc = 'Exit terminal mode' })
vim.keymap.set('n', '<C-l>', '<cmd>tabnext +<CR>', { desc = 'Switch next tab' })
vim.keymap.set('n', '<C-h>', '<cmd>tabnext -<CR>', { desc = 'Switch prev tab' })
vim.keymap.set('n', '<C-A-h>', '<cmd>tabmove -1<CR>', { desc = 'Move current tab left' })
vim.keymap.set('n', '<C-A-l>', '<cmd>tabmove +1<CR>', { desc = 'Move current tab right' })
vim.keymap.set('n', '<A-k>', '<cmd>wincmd k<CR>', { desc = 'Move cursor to window above' })
vim.keymap.set('n', '<A-j>', '<cmd>wincmd j<CR>', { desc = 'Move cursor to window below' })
vim.keymap.set('n', '<A-h>', '<cmd>wincmd h<CR>', { desc = 'Move cursor to window left' })
vim.keymap.set('n', '<A-l>', '<cmd>wincmd l<CR>', { desc = 'Move cursor to window right' })
--------------------------------------------
-----------------
-- Diagnostics --
-----------------
vim.diagnostic.config({
virtual_text = false, -- Disable inline text diagnostics
signs = true, -- Keep signs in the sign column
update_in_insert = false,
underline = true,
severity_sort = true,
})
-- Show diagnostics on hover
vim.o.updatetime = 250 -- Faster update time for hover
vim.api.nvim_create_autocmd("CursorHold", {
pattern = "*",
callback = function()
vim.diagnostic.open_float(nil, { focus = false, scope = "cursor" })
end,
})
--------------
-- Lazy.vim --
--------------
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
if not vim.loop.fs_stat(lazypath) then
vim.fn.system({
"git",
"clone",
"--filter=blob:none",
"https://github.com/folke/lazy.nvim.git",
"--branch=stable", -- latest stable release
lazypath,
})
end
vim.opt.rtp:prepend(lazypath)
-- Rename Tmux Window to File Opened by Neovim
-- https://github.com/Dyslectric/neovim-tmux-window-rename
if vim.env.TMUX ~= nil then
-- Define an autocommand for BufEnter and FocusGained events
vim.api.nvim_create_autocmd({"BufEnter", "FocusGained"}, {
pattern = "*",
callback = function()
local file_name = vim.fn.expand("%:t")
local folder_name = vim.fn.expand("%:p:h:t")
local tmux_command = string.format(
"tmux rename-window 'Nv:%s/%s'", folder_name, file_name
)
vim.fn.system(tmux_command)
end
})
-- Define an autocommand for the VimLeave event
vim.api.nvim_create_autocmd("VimLeave", {
pattern = "*",
callback = function()
local shell = vim.env.SHELL or "sh"
vim.fn.system("tmux set-window-option automatic-rename on")
end
})
end
require("lazy").setup("plugins")
|