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 | |
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')
-rw-r--r-- | dotfiles/vim-dev.lua | 61 | ||||
-rw-r--r-- | dotfiles/vim.lua | 223 | ||||
-rw-r--r-- | dotfiles/vimrc.vim | 139 |
3 files changed, 284 insertions, 139 deletions
diff --git a/dotfiles/vim-dev.lua b/dotfiles/vim-dev.lua new file mode 100644 index 0000000..6b78022 --- /dev/null +++ b/dotfiles/vim-dev.lua | |||
@@ -0,0 +1,61 @@ | |||
1 | local lspconfig = require("lspconfig") | ||
2 | |||
3 | function on_attach(client, bufnr) | ||
4 | local function buf_set_keymap(...) | ||
5 | vim.api.nvim_buf_set_keymap(bufnr, ...) | ||
6 | end | ||
7 | |||
8 | local opts = { noremap = true, silent = true } | ||
9 | |||
10 | buf_set_keymap('n', 'gD', '<Cmd>lua vim.lsp.buf.declaration()<CR>', opts) | ||
11 | buf_set_keymap('n', 'gd', '<Cmd>lua vim.lsp.buf.definition()<CR>', opts) | ||
12 | buf_set_keymap('n', 'K', '<Cmd>lua vim.lsp.buf.hover()<CR>', opts) | ||
13 | |||
14 | buf_set_keymap('n', 'gr', '<cmd>lua vim.lsp.buf.references()<CR>', opts) | ||
15 | |||
16 | buf_set_keymap('n', '<leader>sa', '<cmd>lua vim.lsp.buf.code_action()<CR>', opts) | ||
17 | buf_set_keymap('n', '<leader>se', '<cmd>lua vim.lsp.diagnostic.show_line_diagnostics()<CR>', opts) | ||
18 | buf_set_keymap('n', '<leader>sl', '<cmd>lua vim.lsp.diagnostic.set_loclist()<CR>', opts) | ||
19 | buf_set_keymap('n', '<leader>sr', '<cmd>lua vim.lsp.buf.rename()<CR>', opts) | ||
20 | |||
21 | buf_set_keymap('n', '[d', '<cmd>lua vim.lsp.diagnostic.goto_prev()<CR>', opts) | ||
22 | buf_set_keymap('n', ']d', '<cmd>lua vim.lsp.diagnostic.goto_next()<CR>', opts) | ||
23 | |||
24 | -- Capability specific | ||
25 | |||
26 | -- print(vim.inspect(client.resolved_capabilities)) | ||
27 | |||
28 | if client.resolved_capabilities.document_formatting then | ||
29 | buf_set_keymap("n", "<leader>sf", "<cmd>lua vim.lsp.buf.formatting()<CR>", opts) | ||
30 | end | ||
31 | if client.resolved_capabilities.document_range_formatting then | ||
32 | buf_set_keymap("v", "<leader>sf", "<cmd>lua vim.lsp.buf.range_formatting()<CR>", opts) | ||
33 | end | ||
34 | |||
35 | -- Rust specific | ||
36 | buf_set_keymap("n", "<leader>sh", "<cmd>RustToggleInlayHints<CR>", opts) | ||
37 | |||
38 | require("completion").on_attach() | ||
39 | end | ||
40 | |||
41 | function setup_lsp_with(servers) | ||
42 | for _, server in ipairs(servers) do | ||
43 | lspconfig[server].setup { | ||
44 | cmd = { vim.g[server .. "_path"] }, | ||
45 | on_attach = on_attach, | ||
46 | } | ||
47 | end | ||
48 | end | ||
49 | |||
50 | setup_lsp_with { | ||
51 | "clangd", | ||
52 | "elixirls", | ||
53 | "pyls", | ||
54 | } | ||
55 | |||
56 | require("rust-tools").setup { | ||
57 | server = { | ||
58 | cmd = { vim.g.rust_analyzer_path }, | ||
59 | on_attach = on_attach, | ||
60 | } | ||
61 | } | ||
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() | ||
diff --git a/dotfiles/vimrc.vim b/dotfiles/vimrc.vim deleted file mode 100644 index a0451c6..0000000 --- a/dotfiles/vimrc.vim +++ /dev/null | |||
@@ -1,139 +0,0 @@ | |||
1 | " Some global variables are defined in ../vim.nix | ||
2 | |||
3 | " Better default options {{{ | ||
4 | |||
5 | set undofile | ||
6 | set backup | ||
7 | set backupdir-=. | ||
8 | |||
9 | set mouse=a | ||
10 | |||
11 | set ignorecase | ||
12 | set smartcase | ||
13 | |||
14 | set smartindent | ||
15 | set tabstop=4 | ||
16 | set shiftwidth=4 | ||
17 | |||
18 | set inccommand=split | ||
19 | |||
20 | set scrolloff=1 | ||
21 | set sidescrolloff=5 | ||
22 | |||
23 | set colorcolumn=80 | ||
24 | set cursorline | ||
25 | |||
26 | set modeline | ||
27 | |||
28 | set title | ||
29 | |||
30 | set wildmode=longest:full,full | ||
31 | |||
32 | let g:maplocalleader = ',' | ||
33 | let g:mapleader = ';' | ||
34 | |||
35 | " If previously opened jump to the last position in the file | ||
36 | au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif | ||
37 | |||
38 | let &grepprg = g:ripgrep_path . ' --vimgrep $*' | ||
39 | let &grepformat = '%f:%l:%c:%m,' . &grepformat | ||
40 | |||
41 | let g:tex_flavor = 'latex' | ||
42 | |||
43 | " }}} | ||
44 | |||
45 | " Colors, Statusline, Tabline, Code display {{{ | ||
46 | |||
47 | set termguicolors | ||
48 | let g:gruvbox_contrast_dark = 'soft' | ||
49 | let g:gruvbox_italic = 1 | ||
50 | set background=dark | ||
51 | colorscheme gruvbox | ||
52 | |||
53 | " Doesn't do anything because the tabline gets overwritten by lightline | ||
54 | "exe 'hi! TabLineSel guifg=' . g:dominant_color | ||
55 | |||
56 | let g:lightline = { | ||
57 | \ 'colorscheme': 'gruvbox', | ||
58 | \ 'subseparator': { 'left': '|', 'right': '|' }, | ||
59 | \ 'tab_linesubseparator': { 'left': '|', 'right': '|' }, | ||
60 | \ } | ||
61 | |||
62 | set noshowmode | ||
63 | |||
64 | " Do not set "trail:-" because it messes up the highlighting | ||
65 | set listchars=tab:│\ ,extends:>,precedes:<,nbsp:+ | ||
66 | set list | ||
67 | |||
68 | set fillchars=fold:─,vert:│ | ||
69 | |||
70 | highlight ExtraWhitespace term=inverse cterm=inverse gui=inverse | ||
71 | " Show trailing whitespace and spaces before tabs: | ||
72 | autocmd Syntax * syn match ExtraWhitespace /\s\+$\| \+\ze\t/ containedin=ALL | ||
73 | |||
74 | " }}} | ||
75 | |||
76 | " Mappings {{{ | ||
77 | |||
78 | call camelcasemotion#CreateMotionMappings(g:maplocalleader) | ||
79 | |||
80 | nmap =of :set <C-R>=(&formatoptions =~ "a") ? 'formatoptions-=a' : 'formatoptions+=a'<CR><CR> | ||
81 | |||
82 | " }}} | ||
83 | |||
84 | set completefunc=syntaxcomplete#Complete | ||
85 | set completeopt+=noinsert,noselect | ||
86 | |||
87 | " Deoplete {{{ | ||
88 | |||
89 | let g:deoplete#enable_at_startup = 1 | ||
90 | |||
91 | " }}} | ||
92 | |||
93 | " Neosnippets {{{ | ||
94 | |||
95 | imap <C-k> <Plug>(neosnippet_expand_or_jump) | ||
96 | smap <C-k> <Plug>(neosnippet_expand_or_jump) | ||
97 | xmap <C-k> <Plug>(neosnippet_expand_target) | ||
98 | |||
99 | set conceallevel=2 | ||
100 | set concealcursor=nv | ||
101 | |||
102 | " }}} | ||
103 | |||
104 | " CtrlP {{{ | ||
105 | let g:ctrlp_user_command = g:fd_path . ' --type f --color never "" %s' | ||
106 | let g:ctrlp_use_caching = 0 | ||
107 | " }}} | ||
108 | |||
109 | " LanguageClient {{{ | ||
110 | let g:LanguageClient_loggingFile = stdpath('data') . '/LanguageClient.log' | ||
111 | let g:LanguageClient_serverStderr = stdpath('data') . '/LanguageServer.log' | ||
112 | " }}} | ||
113 | |||
114 | " VimWiki {{{ | ||
115 | " {'path': '~/Documents/Wiki', 'path_html': '~/Documents/Wiki/html'} \ | ||
116 | let g:vimwiki_list = [ | ||
117 | \ {'path': '~/Documents/Wiki/personal', | ||
118 | \ 'path_html': '~/Documents/Wiki/personal/html', | ||
119 | \ 'auto_tags': 1}, | ||
120 | \ {'path': '~/Documents/Wiki/science', 'path_html': '~/Documents/Wiki/science/html', 'auto_tags': 1}, | ||
121 | \ {'path': '~/Documents/Wiki/work', 'path_html': '~/Documents/Wiki/work/html', 'auto_tags': 1}, | ||
122 | \ ] | ||
123 | |||
124 | let g:vimwiki_global_ext = 0 | ||
125 | |||
126 | let g:vimwiki_auto_header = 1 | ||
127 | let g:vimwiki_hl_headers = 1 | ||
128 | let g:vimwiki_hl_cb_checked = 1 | ||
129 | let g:vimwiki_html_header_numbering = 2 | ||
130 | let g:vimwiki_html_header_numbering_sym = '.' | ||
131 | |||
132 | let g:vimwiki_links_header_level = 2 | ||
133 | let g:vimwiki_tags_header_level = 2 | ||
134 | let g:vimwiki_toc_header_level = 2 | ||
135 | |||
136 | call deoplete#custom#var('omni', 'input_patterns', { 'vimwiki': '\[\[\w*|\:\w+' }) | ||
137 | " }}} | ||
138 | |||
139 | " vim: fdm=marker | ||