summaryrefslogtreecommitdiffstats
path: root/dotfiles/vim.lua
diff options
context:
space:
mode:
Diffstat (limited to 'dotfiles/vim.lua')
-rw-r--r--dotfiles/vim.lua223
1 files changed, 223 insertions, 0 deletions
diff --git a/dotfiles/vim.lua b/dotfiles/vim.lua
new file mode 100644
index 0000000..1acff0d
--- /dev/null
+++ b/dotfiles/vim.lua
@@ -0,0 +1,223 @@
1-- Options
2----------
3
4vim.o.undofile = true
5vim.o.backup = true
6vim.cmd "set backupdir-=."
7
8vim.o.mouse = "a"
9
10vim.o.ignorecase = true
11vim.o.smartcase = true
12
13vim.o.smartindent = true
14
15vim.o.tabstop = 4
16vim.o.shiftwidth = 4
17
18vim.o.inccommand = "split"
19
20vim.o.scrolloff = 1
21vim.o.sidescrolloff = 5
22
23vim.o.colorcolumn = "80"
24vim.o.cursorline = true
25
26vim.o.title = true
27
28vim.o.wildmode = "longest:full,full"
29vim.o.completeopt = "menu,menuone,preview,noinsert,noselect"
30
31-- Use ripgrep
32vim.o.grepprg = vim.g.ripgrep_path .. " --vimgrep --smart-case"
33vim.o.grepformat = "%f:%l:%c:%m" .. vim.o.grepformat
34
35vim.o.termguicolors = true
36vim.o.background = "dark"
37
38-- Mode already shown by the status line
39vim.o.showmode = false
40
41-- Do not set "trail:-" because it messes up the highlighting
42vim.o.listchars = "tab:│ ,extends:>,precedes:<,nbsp:+"
43vim.wo.list = true
44vim.o.fillchars = "fold:─,vert:│"
45
46-- Leaders
47----------
48
49vim.g.maplocalleader = ","
50vim.g.mapleader = ";"
51
52-- Misc
53-------
54
55-- From neovim#14420
56-- Restores the position of previously opened files
57vim.cmd [[
58 augroup LastCursorPos
59 autocmd!
60 autocmd BufReadPost * if @% !~# "\.git[\/\\]COMMIT_EDITMSG$" && line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g`\"" | endif
61 augroup end
62]]
63
64-- Highlight yanked text
65vim.cmd "autocmd TextYankPost * silent! lua vim.highlight.on_yank()"
66
67vim.g.tex_flavor = "latex"
68
69vim.cmd "colorscheme gruvbox"
70
71-- Mappings
72-----------
73
74local map = vim.api.nvim_set_keymap
75local mapopts = { noremap = true, silent = true }
76
77vim.fn["camelcasemotion#CreateMotionMappings"] "<LocalLeader>"
78
79map("n", "=of", [[:set <C-R>=(&formatoptions =~ "a") ? 'formatoptions-=a' : 'formatoptions+=a'<CR><CR>]], mapopts)
80
81-- Plugins
82----------
83
84-- Gitsigns
85
86require('gitsigns').setup {
87 keymaps = {
88 noremap = true,
89 buffer = true,
90 silent = true,
91
92 ['n ]c'] = { expr = true, "&diff ? ']c' : '<cmd>lua require\"gitsigns\".next_hunk()<CR>'"},
93 ['n [c'] = { expr = true, "&diff ? '[c' : '<cmd>lua require\"gitsigns\".prev_hunk()<CR>'"},
94
95 ['n <leader>hs'] = '<cmd>lua require"gitsigns".stage_hunk()<CR>',
96 ['n <leader>hu'] = '<cmd>lua require"gitsigns".undo_stage_hunk()<CR>',
97 ['n <leader>hr'] = '<cmd>lua require"gitsigns".reset_hunk()<CR>',
98 ['n <leader>hR'] = '<cmd>lua require"gitsigns".reset_buffer()<CR>',
99 ['n <leader>hp'] = '<cmd>lua require"gitsigns".preview_hunk()<CR>',
100 ['n <leader>hb'] = '<cmd>lua require"gitsigns".blame_line()<CR>',
101
102 -- Text objects
103 ['o ih'] = ':<C-U>lua require"gitsigns".select_hunk()<CR>',
104 ['x ih'] = ':<C-U>lua require"gitsigns".select_hunk()<CR>',
105 }
106}
107
108-- Treesitter
109
110require('nvim-treesitter.configs').setup {
111 highlight = {
112 enable = true,
113 },
114 incremental_selection = {
115 enable = true,
116 keymaps = {
117 init_selection = "gnn",
118 node_incremental = "grn",
119 scope_incremental = "grc",
120 node_decremental = "grm",
121 },
122 },
123 indent = {
124 enable = true,
125 },
126 matchup = {
127 enable = true,
128 },
129 textobjects = {
130 select = {
131 enable = true,
132 keymaps = {
133 -- You can use the capture groups defined in textobjects.scm
134 ["af"] = "@function.outer",
135 ["if"] = "@function.inner",
136 ["ac"] = "@class.outer",
137 ["ic"] = "@class.inner",
138 },
139 },
140
141 move = {
142 enable = true,
143 goto_next_start = {
144 ["]m"] = "@function.outer",
145 ["]]"] = "@class.outer",
146 },
147 goto_next_end = {
148 ["]M"] = "@function.outer",
149 ["]["] = "@class.outer",
150 },
151 goto_previous_start = {
152 ["[m"] = "@function.outer",
153 ["[["] = "@class.outer",
154 },
155 goto_previous_end = {
156 ["[M"] = "@function.outer",
157 ["[]"] = "@class.outer",
158 },
159 },
160 },
161}
162
163vim.o.foldmethod = 'expr'
164vim.o.foldexpr = 'nvim_treesitter#foldexpr()'
165
166-- Completion-nvim
167
168vim.g.completion_chain_complete_list = {
169 default = {
170 {
171 complete_items = { 'lsp', 'ts', 'path', 'snippet', 'buffers', 'tmux', },
172 }
173 },
174}
175
176vim.cmd [[autocmd BufEnter * lua require'completion'.on_attach()]]
177
178local map = vim.api.nvim_set_keymap
179
180vim.g.completion_enable_snippet = "snippets.nvim"
181
182-- Telescope
183
184map("n", "<leader>fb", "<cmd>Telescope buffers<cr>", mapopts)
185map("n", "<leader>ff", "<cmd>Telescope find_files<cr>", mapopts)
186map("n", "<leader>fg", "<cmd>Telescope live_grep<cr>", mapopts)
187map("n", "<leader>fh", "<cmd>Telescope help_tags<cr>", mapopts)
188map("n", "<leader>ft", "<cmd>Telescope treesitter<cr>", mapopts)
189
190-- Lualine
191
192local lsp_status = require('lsp-status')
193lsp_status.config {
194 indicator_errors = "err:",
195 indicator_hint = "hint:",
196 indicator_info = "info:",
197 indicator_ok = "ok",
198 indicator_warnings = "warn:",
199 spinner_frames = {""},
200 status_symbol = "lsp:",
201}
202lsp_status.register_progress()
203
204function LspStatus()
205 if #vim.lsp.buf_get_clients() < 1 then return "" end
206
207 return lsp_status.status()
208end
209
210require("lualine").setup {
211 options = {
212 component_separators = "",
213 icons_enabled = false,
214 section_separators = "",
215 },
216 sections = {
217 lualine_c = {'filename', LspStatus},
218 },
219}
220
221-- Snippets.nvim
222
223require("snippets").use_suggested_mappings()