init.lua (4839B)
1 require('plugins') 2 3 local g = vim.g -- Global options. 4 local o = vim.o -- Vim options. 5 local A = vim.api -- Vim API. 6 local wo = vim.wo -- Window options. 7 8 local absGrp = A.nvim_create_augroup("AbsoluteGroup", { clear = true }) -- Autocmd group 9 10 -- Editor options. 11 -- Do not save when switching buffers 12 -- o.hidden = true 13 14 -- Decrease update time 15 o.timeoutlen = 500 16 o.updatetime = 200 17 18 -- Show 80'th column. 19 vim.wo.colorcolumn = "80" 20 21 -- TODO this in lua 22 vim.cmd 'hi ColorColumn ctermbg=gray guibg=gray' 23 24 -- Number of screen lines to keep above and below the cursor 25 o.scrolloff = 8 26 o.number = true 27 28 -- Line numbers. 29 o.relativenumber = true 30 o.cursorline = true 31 o.signcolumn = 'yes' 32 33 -- Better editing experience 34 o.expandtab = true 35 -- o.smarttab = true 36 o.cindent = true 37 -- o.autoindent = true 38 o.wrap = true 39 o.textwidth = 300 40 o.tabstop = 4 41 o.shiftwidth = 0 42 o.softtabstop = -1 -- If negative, shiftwidth value is used 43 44 -- Undo and backup options 45 o.backup = false 46 o.writebackup = false 47 o.undofile = true 48 o.swapfile = false 49 50 -- Remember 69 items in commandline history 51 o.history = 69 52 53 -- Better buffer splitting 54 o.splitright = true 55 o.splitbelow = true 56 57 -- Grahics options. 58 o.termguicolors = true 59 60 -- Better whitespace. 61 g.strip_whitespace_on_save=1 62 63 --local ok, _ = pcall(vim.cmd, 'colorscheme sakura') 64 65 -- LSP 66 67 lsp = require 'lspconfig' 68 69 -- Mappings. 70 -- See `:help vim.diagnostic.*` for documentation on any of the below functions 71 local opts = { noremap=true, silent=true } 72 vim.keymap.set('n', '<space>e', vim.diagnostic.open_float, opts) 73 vim.keymap.set('n', '[d', vim.diagnostic.goto_prev, opts) 74 vim.keymap.set('n', ']d', vim.diagnostic.goto_next, opts) 75 vim.keymap.set('n', '<space>q', vim.diagnostic.setloclist, opts) 76 77 -- Use an on_attach function to only map the following keys 78 -- after the language server attaches to the current buffer 79 local on_attach = function(client, bufnr) 80 -- Enable completion triggered by <c-x><c-o> 81 vim.api.nvim_buf_set_option(bufnr, 'omnifunc', 'v:lua.vim.lsp.omnifunc') 82 83 -- Mappings. 84 -- See `:help vim.lsp.*` for documentation on any of the below functions 85 local bufopts = { noremap=true, silent=true, buffer=bufnr } 86 vim.keymap.set('n', 'gD', vim.lsp.buf.declaration, bufopts) 87 vim.keymap.set('n', 'gd', vim.lsp.buf.definition, bufopts) 88 vim.keymap.set('n', 'K', vim.lsp.buf.hover, bufopts) 89 vim.keymap.set('n', 'gi', vim.lsp.buf.implementation, bufopts) 90 vim.keymap.set('n', '<C-k>', vim.lsp.buf.signature_help, bufopts) 91 vim.keymap.set('n', '<space>wa', vim.lsp.buf.add_workspace_folder, bufopts) 92 vim.keymap.set('n', '<space>wr', vim.lsp.buf.remove_workspace_folder, bufopts) 93 vim.keymap.set('n', '<space>wl', function() 94 print(vim.inspect(vim.lsp.buf.list_workspace_folders())) 95 end, bufopts) 96 vim.keymap.set('n', '<space>D', vim.lsp.buf.type_definition, bufopts) 97 vim.keymap.set('n', '<space>rn', vim.lsp.buf.rename, bufopts) 98 vim.keymap.set('n', '<space>ca', vim.lsp.buf.code_action, bufopts) 99 vim.keymap.set('n', 'gr', vim.lsp.buf.references, bufopts) 100 vim.keymap.set('n', '<space>f', vim.lsp.buf.formatting, bufopts) 101 end 102 103 local lsp_flags = { 104 -- This is the default in Nvim 0.7+ 105 debounce_text_changes = 150, 106 } 107 lsp['pyright'].setup{ 108 on_attach = on_attach, 109 flags = lsp_flags, 110 } 111 lsp['tsserver'].setup{ 112 on_attach = on_attach, 113 flags = lsp_flags, 114 } 115 lsp['rust_analyzer'].setup{ 116 on_attach = on_attach, 117 flags = lsp_flags, 118 -- Server-specific settings... 119 settings = { 120 ["rust-analyzer"] = {} 121 } 122 } 123 lsp.clangd.setup{ 124 on_attach = on_attach, 125 flags = lsp_flags, 126 } 127 128 -- YouCompleteMe 129 -- 130 g.ycm_language_server = {{ 131 name = 'c', 132 cmdline = {'/usr/bin/clangd'}, 133 filetypes = {'c'}, 134 project_root_files = {'Makefile', 'compile_commands.json'} 135 }} 136 137 -- Clang-format 138 139 -- Autostart. 140 A.nvim_create_autocmd("FileType", { 141 command = 'ClangFormatAutoEnable', 142 group = absGrp, 143 pattern = 'c,cpp,objc' 144 }) 145 146 147 -- Code formatting. 148 149 -- If nvim version >= 0.7, use native lua functionality to handle autocmd. 150 -------------------------------------- Note: This does not work. --------------------------------- 151 if vim.fn.has "nvim-0.7" then 152 vim.api.nvim_create_autocmd("BufWritePre", { 153 pattern = '.*', 154 callback = function() 155 vim.schedule(AbsCodeFormat) 156 end, 157 }) 158 else 159 vim.cmd "autocmd BufWritePre * lua AbsCodeFormat()" 160 end 161 162 -- Function to format the code in the current buffer. 163 function AbsCodeFormat() 164 local bufnr = vim.api.nvim_get_current_buf() 165 local ft = vim.api.nvim_buf_get_option(bufnr, "filetype") 166 local fname = vim.fn.expand "%:p:t" 167 local keymap_c = {} 168 169 -- if ft == 'c' or ft == 'cpp' or ft == 'objc' then 170 -- ClangFormat() 171 -- end 172 end 173 174 g.user_emmet_leader_key = ',' 175 g.user_emmet_mode = 'n'