-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathinit.lua
More file actions
160 lines (140 loc) · 4.44 KB
/
init.lua
File metadata and controls
160 lines (140 loc) · 4.44 KB
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
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
--[[
-- Arthur Soulié 2025
-- This configuration is hosted at https://github.com/ArthurS1/nvim-init
--]]
local nvim_version = vim.version()
vim.cmd('echo \"Configuration by Arthur Soulié 2026\"')
-- Leader key
-- [[
-- Must be done before any vim.keymap.set() call (yes, even the plugins)
-- according to
-- https://neovim.discourse.group/t/how-to-set-leader-key-in-lua/175/6
-- ]]
vim.g.mapleader = ','
-- Plugins
--[[
-- From https://dev.to/vonheikemen/neovim-using-vim-plug-in-lua-3oom for vim
-- plug usage in lua.
--]]
local Plug = vim.fn['plug#']
vim.call('plug#begin', '~/.config/nvim/plugins')
Plug('junegunn/fzf',{['do'] = vim.fn['fzf#install']})
Plug('junegunn/fzf.vim')
Plug('neovim/nvim-lspconfig')
Plug('hrsh7th/nvim-cmp')
Plug('hrsh7th/cmp-nvim-lsp')
Plug('hrsh7th/cmp-buffer')
Plug('hrsh7th/cmp-vsnip')
Plug('hrsh7th/vim-vsnip')
Plug('hrsh7th/vim-vsnip')
Plug('tpope/vim-fugitive')
vim.call('plug#end')
-- General Options
local extended_tabs_filetypes = {'c', 'cpp'}
local no_spaced_tabs_filetypes = {'make'}
local default_tabs = 2
local extended_tabs = 4
local home_dir = '/home/arthur'
vim.api.nvim_set_option('dir', home_dir .. '/.config/nvim/tmp')
vim.api.nvim_win_set_option(0, 'number', true)
vim.api.nvim_win_set_option(0, 'relativenumber', true)
vim.api.nvim_win_set_option(0, 'foldlevel', 1)
vim.api.nvim_win_set_option(0, 'foldmethod', 'indent')
vim.api.nvim_win_set_option(0, 'foldclose', 'all')
vim.api.nvim_win_set_option(0, 'foldenable', false)
vim.api.nvim_win_set_option(0, 'ignorecase', true)
vim.api.nvim_win_set_option(0, 'shiftwidth', default_tabs)
vim.o.exrc = true
vim.opt.clipboard = 'unnamedplus'
vim.api.nvim_set_keymap('t', '<esc>', '<c-\\><c-n>', {})
vim.api.nvim_set_keymap('', ';', ':GitFiles<cr>', {})
vim.api.nvim_set_keymap('i', '(', '()<left>', {})
vim.api.nvim_set_keymap('i', '[', '[]<left>', {})
vim.api.nvim_set_keymap('i', '{', '{}<left>', {})
--[[
-- Changes the tab length depending on filetype according to the variables on
-- top of this section.
--]]
vim.api.nvim_create_autocmd({'FileType'}, {
callback = function ()
vim.api.nvim_buf_set_option(0, 'expandtab', true)
vim.api.nvim_buf_set_option(0, 'shiftwidth', default_tabs)
vim.api.nvim_buf_set_option(0, 'tabstop', default_tabs)
return false
end
})
vim.api.nvim_create_autocmd({'FileType'}, {
pattern = extended_tabs_filetypes,
callback = function ()
vim.api.nvim_buf_set_option(0, 'expandtab', true)
vim.api.nvim_buf_set_option(0, 'shiftwidth', extended_tabs)
vim.api.nvim_buf_set_option(0, 'tabstop', extended_tabs)
return false
end
})
-- [[
-- Switches off tabs made of spaces on specific filtypes. Configurable on top
-- of this section.
-- ]]
vim.api.nvim_create_autocmd({'FileType'}, {
pattern = no_spaced_tabs_filetypes,
callback = function ()
vim.api.nvim_buf_set_option(0, 'expandtab', false)
return false
end
})
-- [[
-- Removes line numbers when in terminal mode
-- ]]
vim.api.nvim_create_autocmd('TermOpen', {
callback = function ()
vim.o.number = false
vim.o.relativenumber = false
end
})
--[[
-- Removes ueseless whitespaces at the end of each line. See
-- https://vim.fandom.com/wiki/Remove_unwanted_spaces
--]]
vim.api.nvim_create_autocmd({'BufWritePre'}, {
command = ':%s/\\s\\+$//e'
})
-- [[
-- Add lsp related shortcuts. See help lsp.
-- ]]
vim.api.nvim_create_autocmd({'LspAttach'}, {
callback = function ()
vim.keymap.set('n', '<Leader>=', vim.lsp.buf.format)
vim.keymap.set('n', '<Leader>g', vim.lsp.buf.definition)
vim.keymap.set('n', '<Leader><Space>', vim.lsp.buf.hover)
vim.keymap.set('n', '<Leader>r', vim.lsp.buf.rename)
vim.keymap.set('n', '<Leader>e', vim.diagnostic.goto_next)
end
})
-- Completion options
--[[
-- Got from https://github.com/neovim/nvim-lspconfig
--]]
vim.api.nvim_set_option('completeopt', 'menuone,noinsert,noselect')
local cmp = require'cmp'
local language_servers = require'languageservers'
local cmp_nvim_lsp = require'cmp_nvim_lsp'
cmp.setup({
snippet = {
expand = function(args)
vim.fn["vsnip#anonymous"](args.body)
end,
},
mapping = {
['<Tab>'] = cmp.mapping.select_next_item({ behavior = cmp.SelectBehavior.Insert }),
['<S-Tab>'] = cmp.mapping.select_prev_item({ behavior = cmp.SelectBehavior.Insert }),
['<CR>'] = cmp.mapping.confirm({ select = true }),
},
sources = {
{ name = 'nvim_lsp' },
{ name = 'vsnip' },
{ name = 'buffer' },
}
})
cmp_nvim_lsp.default_capabilities()
language_servers.setup(cmp_nvim_lsp)