···
1
1
+
local use = require('packer').use
2
2
+
require('packer').startup(function()
3
3
+
use 'wbthomason/packer.nvim' -- Package manager
4
4
+
use 'neovim/nvim-lspconfig' -- Configurations for Nvim LSP
5
5
+
use 'sainnhe/everforest' -- Colorscheme
6
6
+
7
7
+
-- Very powerful search
8
8
+
use {
9
9
+
'nvim-telescope/telescope.nvim', tag = '0.1.1',
10
10
+
requires = { {'nvim-lua/plenary.nvim', 'BurntSushi/ripgrep'} }
11
11
+
}
12
12
+
end)
13
13
+
14
14
+
vim.cmd('colorscheme everforest') -- solarized, but green
15
15
+
vim.cmd('set termguicolors') -- needed for truecolor support
16
16
+
vim.cmd('set mmp=2000') -- resolves https://github.com/vim/vim/issues/2049
17
17
+
18
18
+
-- Mappings.
19
19
+
-- See `:help vim.diagnostic.*` for documentation on any of the below functions
20
20
+
local opts = { noremap=true, silent=true }
21
21
+
vim.keymap.set('n', '<space>e', vim.diagnostic.open_float, opts)
22
22
+
vim.keymap.set('n', '[d', vim.diagnostic.goto_prev, opts)
23
23
+
vim.keymap.set('n', ']d', vim.diagnostic.goto_next, opts)
24
24
+
vim.keymap.set('n', '<space>q', vim.diagnostic.setloclist, opts)
25
25
+
vim.keymap.set('n', '<space>m', "Go<esc>:put =strftime('%Y-%m-%d')<cr>o============<cr>", opts)
26
26
+
27
27
+
-- auto-format on save
28
28
+
vim.cmd [[autocmd BufWritePre * lua vim.lsp.buf.formatting_sync()]]
29
29
+
30
30
+
-- Use an on_attach function to only map the following keys
31
31
+
-- after the language server attaches to the current buffer
32
32
+
local on_attach = function(client, bufnr)
33
33
+
-- Enable completion triggered by <c-x><c-o>
34
34
+
vim.api.nvim_buf_set_option(bufnr, 'omnifunc', 'v:lua.vim.lsp.omnifunc')
35
35
+
36
36
+
-- Mappings.
37
37
+
-- See `:help vim.lsp.*` for documentation on any of the below functions
38
38
+
local bufopts = { noremap=true, silent=true, buffer=bufnr }
39
39
+
vim.keymap.set('n', 'gD', vim.lsp.buf.declaration, bufopts)
40
40
+
vim.keymap.set('n', 'gd', vim.lsp.buf.definition, bufopts)
41
41
+
vim.keymap.set('n', 'K', vim.lsp.buf.hover, bufopts)
42
42
+
vim.keymap.set('n', 'gi', vim.lsp.buf.implementation, bufopts)
43
43
+
vim.keymap.set('n', '<C-k>', vim.lsp.buf.signature_help, bufopts)
44
44
+
vim.keymap.set('n', '<space>wa', vim.lsp.buf.add_workspace_folder, bufopts)
45
45
+
vim.keymap.set('n', '<space>wr', vim.lsp.buf.remove_workspace_folder, bufopts)
46
46
+
vim.keymap.set('n', '<space>wl', function()
47
47
+
print(vim.inspect(vim.lsp.buf.list_workspace_folders()))
48
48
+
end, bufopts)
49
49
+
vim.keymap.set('n', '<space>D', vim.lsp.buf.type_definition, bufopts)
50
50
+
vim.keymap.set('n', '<space>rn', vim.lsp.buf.rename, bufopts)
51
51
+
vim.keymap.set('n', '<space>ca', vim.lsp.buf.code_action, bufopts)
52
52
+
vim.keymap.set('n', 'gr', vim.lsp.buf.references, bufopts)
53
53
+
vim.keymap.set('n', '<space>f', function() vim.lsp.buf.format { async = true } end, bufopts)
54
54
+
end
55
55
+
56
56
+
---- golang
57
57
+
require('lspconfig')['gopls'].setup{
58
58
+
on_attach = on_attach,
59
59
+
}
60
60
+
-- organize golang imports on save
61
61
+
vim.api.nvim_create_autocmd('BufWritePre', {
62
62
+
pattern = '*.go',
63
63
+
callback = function()
64
64
+
vim.lsp.buf.code_action({ context = { only = { 'source.organizeImports' } }, apply = true })
65
65
+
end
66
66
+
})
···
1
1
-
call plug#begin()
2
2
-
Plug 'junegunn/vim-easy-align'
3
3
-
Plug 'neovim/nvim-lspconfig'
4
4
-
Plug 'nvim-lua/plenary.nvim' " lua funcs i guess
5
5
-
Plug 'hrsh7th/nvim-compe'
6
6
-
Plug 'ctrlpvim/ctrlp.vim'
7
7
-
Plug 'cormacrelf/vim-colors-github'
8
8
-
Plug 'dewyze/vim-tada'
9
9
-
Plug 'tidalcycles/vim-tidal'
10
10
-
call plug#end()
11
11
-
12
12
-
colorscheme github
13
13
-
set termguicolors " required for truecolor support
14
14
-
15
15
-
" idk, this resolved the following weirdness:
16
16
-
" https://github.com/vim/vim/issues/2049
17
17
-
set mmp=2000
18
18
-
19
19
-
lua << EOF
20
20
-
require'lspconfig'.gopls.setup{}
21
21
-
require'lspconfig'.terraformls.setup{}
22
22
-
EOF
23
23
-
24
24
-
" set keybinds for go LSP - warning: disgusting
25
25
-
lua << EOF
26
26
-
local nvim_lsp = require('lspconfig')
27
27
-
28
28
-
-- Use an on_attach function to only map the following keys
29
29
-
-- after the language server attaches to the current buffer
30
30
-
local on_attach = function(client, bufnr)
31
31
-
local function buf_set_keymap(...) vim.api.nvim_buf_set_keymap(bufnr, ...) end
32
32
-
local function buf_set_option(...) vim.api.nvim_buf_set_option(bufnr, ...) end
33
33
-
34
34
-
--Enable completion triggered by <c-x><c-o>
35
35
-
buf_set_option('omnifunc', 'v:lua.vim.lsp.omnifunc')
36
36
-
37
37
-
-- Mappings.
38
38
-
local opts = { noremap=true, silent=true }
39
39
-
40
40
-
-- See `:help vim.lsp.*` for documentation on any of the below functions
41
41
-
buf_set_keymap('n', 'gD', '<Cmd>lua vim.lsp.buf.declaration()<CR>', opts)
42
42
-
buf_set_keymap('n', 'gd', '<Cmd>lua vim.lsp.buf.definition()<CR>', opts)
43
43
-
buf_set_keymap('n', 'K', '<Cmd>lua vim.lsp.buf.hover()<CR>', opts)
44
44
-
buf_set_keymap('n', 'gi', '<cmd>lua vim.lsp.buf.implementation()<CR>', opts)
45
45
-
buf_set_keymap('n', '<C-k>', '<cmd>lua vim.lsp.buf.signature_help()<CR>', opts)
46
46
-
buf_set_keymap('n', '<space>wa', '<cmd>lua vim.lsp.buf.add_workspace_folder()<CR>', opts)
47
47
-
buf_set_keymap('n', '<space>wr', '<cmd>lua vim.lsp.buf.remove_workspace_folder()<CR>', opts)
48
48
-
buf_set_keymap('n', '<space>wl', '<cmd>lua print(vim.inspect(vim.lsp.buf.list_workspace_folders()))<CR>', opts)
49
49
-
buf_set_keymap('n', '<space>D', '<cmd>lua vim.lsp.buf.type_definition()<CR>', opts)
50
50
-
buf_set_keymap('n', '<space>rn', '<cmd>lua vim.lsp.buf.rename()<CR>', opts)
51
51
-
buf_set_keymap('n', '<space>ca', '<cmd>lua vim.lsp.buf.code_action()<CR>', opts)
52
52
-
buf_set_keymap('n', 'gr', '<cmd>lua vim.lsp.buf.references()<CR>', opts)
53
53
-
buf_set_keymap('n', '<space>e', '<cmd>lua vim.lsp.diagnostic.show_line_diagnostics()<CR>', opts)
54
54
-
buf_set_keymap('n', '[d', '<cmd>lua vim.lsp.diagnostic.goto_prev()<CR>', opts)
55
55
-
buf_set_keymap('n', ']d', '<cmd>lua vim.lsp.diagnostic.goto_next()<CR>', opts)
56
56
-
buf_set_keymap('n', '<space>q', '<cmd>lua vim.lsp.diagnostic.set_loclist()<CR>', opts)
57
57
-
buf_set_keymap("n", "<space>f", "<cmd>lua vim.lsp.buf.formatting()<CR>", opts)
58
58
-
end
59
59
-
60
60
-
-- Use a loop to conveniently call 'setup' on multiple servers and
61
61
-
-- map buffer local keybindings when the language server attaches
62
62
-
local servers = { "gopls", "terraformls" }
63
63
-
for _, lsp in ipairs(servers) do
64
64
-
nvim_lsp[lsp].setup { on_attach = on_attach }
65
65
-
end
66
66
-
EOF
67
67
-
68
68
-
" golang imports setup (ugh, sorry)
69
69
-
lua <<EOF
70
70
-
-- …
71
71
-
72
72
-
function go_org_imports(wait_ms)
73
73
-
local params = vim.lsp.util.make_range_params()
74
74
-
params.context = {only = {"source.organizeImports"}}
75
75
-
local result = vim.lsp.buf_request_sync(0, "textDocument/codeAction", params, wait_ms)
76
76
-
for cid, res in pairs(result or {}) do
77
77
-
for _, r in pairs(res.result or {}) do
78
78
-
if r.edit then
79
79
-
local enc = (vim.lsp.get_client_by_id(cid) or {}).offset_encoding or "utf-16"
80
80
-
vim.lsp.util.apply_workspace_edit(r.edit, enc)
81
81
-
end
82
82
-
end
83
83
-
end
84
84
-
end
85
85
-
EOF
86
86
-
87
87
-
autocmd BufWritePre *.go lua go_org_imports()
88
88
-
89
89
-
" tabstops for my langs
90
90
-
autocmd FileType sh setlocal et ts=4 sw=4
91
91
-
autocmd FileType python setlocal et ts=4 sw=4
92
92
-
autocmd FileType go setlocal noet ts=4 sw=4
93
93
-
autocmd FileType ruby setlocal et ts=2 sw=2
94
94
-
autocmd FileType terraform setlocal et ts=2 sw=2
95
95
-
autocmd FileType text setlocal tw=80
96
96
-
autocmd FileType html setlocal et ts=2 sw=2
97
97
-
autocmd FileType yaml setlocal et ts=2 sw=2
98
98
-
autocmd FileType mail setlocal noautoindent
99
99
-
augroup filetypedetect
100
100
-
autocmd BufRead,BufNewFile *mutt-* setfiletype mail
101
101
-
augroup filetypedetect
102
102
-
autocmd FileType json setlocal et ts=2 sw=2
103
103
-
" markdown auto-wrapping per
104
104
-
" https://vi.stackexchange.com/questions/9421/how-to-make-formatoptions-a-useful
105
105
-
autocmd FileType markdown set fo+=aw
106
106
-
autocmd FileType markdown setlocal tw=80 et ts=2 sw=2
107
107
-
108
108
-
" terraform ft detection
109
109
-
" vint: -ProhibitAutocmdWithNoGroup
110
110
-
" By default, Vim associates .tf files with TinyFugue - tell it not to.
111
111
-
silent! autocmd! filetypedetect BufRead,BufNewFile *.tf
112
112
-
autocmd BufRead,BufNewFile *.hcl set filetype=hcl
113
113
-
autocmd BufRead,BufNewFile .terraformrc,terraform.rc set filetype=hcl
114
114
-
autocmd BufRead,BufNewFile *.tf,*.tfvars set filetype=terraform
115
115
-
autocmd BufRead,BufNewFile *.tfstate,*.tfstate.backup set filetype=json
116
116
-
117
117
-
" bindings
118
118
-
let mapleader = ","
119
119
-
nmap <leader>m Go<esc>:put =strftime(\"%Y-%m-%d\")<cr>o----------------<cr><esc>
120
120
-
121
121
-
" use neovim's own terminal instead of tmux:
122
122
-
let g:tidal_target = "terminal"