diff options
author | Minijackson <minijackson@riseup.net> | 2021-05-12 20:54:32 +0200 |
---|---|---|
committer | Minijackson <minijackson@riseup.net> | 2021-05-12 20:56:46 +0200 |
commit | 13bbcd5a5feffa4a91f4e4068e68e9baf2f90223 (patch) | |
tree | 8d5937668be0f3b28c11f5ce3f35d2ad8fd85318 /dotfiles/vim.lua | |
parent | 829f633426f4a775dbb20c29d0bfbd791608cb6c (diff) | |
download | nixos-config-reborn-13bbcd5a5feffa4a91f4e4068e68e9baf2f90223.tar.gz nixos-config-reborn-13bbcd5a5feffa4a91f4e4068e68e9baf2f90223.zip |
vim: better config with lua, with some dev config
Diffstat (limited to 'dotfiles/vim.lua')
-rw-r--r-- | dotfiles/vim.lua | 223 |
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 | |||
4 | vim.o.undofile = true | ||
5 | vim.o.backup = true | ||
6 | vim.cmd "set backupdir-=." | ||
7 | |||
8 | vim.o.mouse = "a" | ||
9 | |||
10 | vim.o.ignorecase = true | ||
11 | vim.o.smartcase = true | ||
12 | |||
13 | vim.o.smartindent = true | ||
14 | |||
15 | vim.o.tabstop = 4 | ||
16 | vim.o.shiftwidth = 4 | ||
17 | |||
18 | vim.o.inccommand = "split" | ||
19 | |||
20 | vim.o.scrolloff = 1 | ||
21 | vim.o.sidescrolloff = 5 | ||
22 | |||
23 | vim.o.colorcolumn = "80" | ||
24 | vim.o.cursorline = true | ||
25 | |||
26 | vim.o.title = true | ||
27 | |||
28 | vim.o.wildmode = "longest:full,full" | ||
29 | vim.o.completeopt = "menu,menuone,preview,noinsert,noselect" | ||
30 | |||
31 | -- Use ripgrep | ||
32 | vim.o.grepprg = vim.g.ripgrep_path .. " --vimgrep --smart-case" | ||
33 | vim.o.grepformat = "%f:%l:%c:%m" .. vim.o.grepformat | ||
34 | |||
35 | vim.o.termguicolors = true | ||
36 | vim.o.background = "dark" | ||
37 | |||
38 | -- Mode already shown by the status line | ||
39 | vim.o.showmode = false | ||
40 | |||
41 | -- Do not set "trail:-" because it messes up the highlighting | ||
42 | vim.o.listchars = "tab:│ ,extends:>,precedes:<,nbsp:+" | ||
43 | vim.wo.list = true | ||
44 | vim.o.fillchars = "fold:─,vert:│" | ||
45 | |||
46 | -- Leaders | ||
47 | ---------- | ||
48 | |||
49 | vim.g.maplocalleader = "," | ||
50 | vim.g.mapleader = ";" | ||
51 | |||
52 | -- Misc | ||
53 | ------- | ||
54 | |||
55 | -- From neovim#14420 | ||
56 | -- Restores the position of previously opened files | ||
57 | vim.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 | ||
65 | vim.cmd "autocmd TextYankPost * silent! lua vim.highlight.on_yank()" | ||
66 | |||
67 | vim.g.tex_flavor = "latex" | ||
68 | |||
69 | vim.cmd "colorscheme gruvbox" | ||
70 | |||
71 | -- Mappings | ||
72 | ----------- | ||
73 | |||
74 | local map = vim.api.nvim_set_keymap | ||
75 | local mapopts = { noremap = true, silent = true } | ||
76 | |||
77 | vim.fn["camelcasemotion#CreateMotionMappings"] "<LocalLeader>" | ||
78 | |||
79 | map("n", "=of", [[:set <C-R>=(&formatoptions =~ "a") ? 'formatoptions-=a' : 'formatoptions+=a'<CR><CR>]], mapopts) | ||
80 | |||
81 | -- Plugins | ||
82 | ---------- | ||
83 | |||
84 | -- Gitsigns | ||
85 | |||
86 | require('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 | |||
110 | require('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 | |||
163 | vim.o.foldmethod = 'expr' | ||
164 | vim.o.foldexpr = 'nvim_treesitter#foldexpr()' | ||
165 | |||
166 | -- Completion-nvim | ||
167 | |||
168 | vim.g.completion_chain_complete_list = { | ||
169 | default = { | ||
170 | { | ||
171 | complete_items = { 'lsp', 'ts', 'path', 'snippet', 'buffers', 'tmux', }, | ||
172 | } | ||
173 | }, | ||
174 | } | ||
175 | |||
176 | vim.cmd [[autocmd BufEnter * lua require'completion'.on_attach()]] | ||
177 | |||
178 | local map = vim.api.nvim_set_keymap | ||
179 | |||
180 | vim.g.completion_enable_snippet = "snippets.nvim" | ||
181 | |||
182 | -- Telescope | ||
183 | |||
184 | map("n", "<leader>fb", "<cmd>Telescope buffers<cr>", mapopts) | ||
185 | map("n", "<leader>ff", "<cmd>Telescope find_files<cr>", mapopts) | ||
186 | map("n", "<leader>fg", "<cmd>Telescope live_grep<cr>", mapopts) | ||
187 | map("n", "<leader>fh", "<cmd>Telescope help_tags<cr>", mapopts) | ||
188 | map("n", "<leader>ft", "<cmd>Telescope treesitter<cr>", mapopts) | ||
189 | |||
190 | -- Lualine | ||
191 | |||
192 | local lsp_status = require('lsp-status') | ||
193 | lsp_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 | } | ||
202 | lsp_status.register_progress() | ||
203 | |||
204 | function LspStatus() | ||
205 | if #vim.lsp.buf_get_clients() < 1 then return "" end | ||
206 | |||
207 | return lsp_status.status() | ||
208 | end | ||
209 | |||
210 | require("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 | |||
223 | require("snippets").use_suggested_mappings() | ||