init.vim 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. " neovim config
  2. " Set up plugin manager
  3. " https://github.com/junegunn/vim-plug/
  4. let data_dir = has('nvim') ? stdpath('data') . '/site' : '~/.vim'
  5. if empty(glob(data_dir . '/autoload/plug.vim'))
  6. silent execute '!curl -fLo '.data_dir.'/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim'
  7. autocmd VimEnter * PlugInstall --sync | source $MYVIMRC
  8. endif
  9. call plug#begin(stdpath('data') . '/plugged')
  10. Plug 'chriskempson/base16-vim'
  11. Plug 'pangloss/vim-javascript'
  12. Plug 'elzr/vim-json'
  13. Plug 'rust-lang/rust.vim'
  14. Plug 'tpope/vim-fugitive'
  15. Plug 'tpope/vim-surround'
  16. Plug 'tpope/vim-characterize'
  17. Plug 'tpope/vim-commentary'
  18. Plug 'tpope/vim-unimpaired'
  19. Plug 'tpope/vim-speeddating'
  20. Plug 'tpope/vim-dadbod'
  21. " Older ale code feedback.
  22. "Plugin 'dense-analysis/ale'
  23. " Newer built-in language server.
  24. Plug 'neovim/nvim-lspconfig'
  25. " Finalize plugin system initialization
  26. call plug#end()
  27. " Hook up language servers
  28. lua << EOF
  29. local nvim_lsp = require('lspconfig')
  30. -- Use an on_attach function to only map the following keys
  31. -- after the language server attaches to the current buffer
  32. local on_attach = function(client, bufnr)
  33. local function buf_set_keymap(...) vim.api.nvim_buf_set_keymap(bufnr, ...) end
  34. local function buf_set_option(...) vim.api.nvim_buf_set_option(bufnr, ...) end
  35. -- Enable completion triggered by <c-x><c-o>
  36. buf_set_option('omnifunc', 'v:lua.vim.lsp.omnifunc')
  37. -- Mappings.
  38. local opts = { noremap=true, silent=true }
  39. -- See `:help vim.lsp.*` for documentation on any of the below functions
  40. buf_set_keymap('n', 'gD', '<cmd>lua vim.lsp.buf.declaration()<CR>', opts)
  41. buf_set_keymap('n', 'gd', '<cmd>lua vim.lsp.buf.definition()<CR>', opts)
  42. buf_set_keymap('n', 'K', '<cmd>lua vim.lsp.buf.hover()<CR>', opts)
  43. buf_set_keymap('n', 'gi', '<cmd>lua vim.lsp.buf.implementation()<CR>', opts)
  44. buf_set_keymap('n', '<C-k>', '<cmd>lua vim.lsp.buf.signature_help()<CR>', opts)
  45. buf_set_keymap('n', '<space>wa', '<cmd>lua vim.lsp.buf.add_workspace_folder()<CR>', opts)
  46. buf_set_keymap('n', '<space>wr', '<cmd>lua vim.lsp.buf.remove_workspace_folder()<CR>', opts)
  47. buf_set_keymap('n', '<space>wl', '<cmd>lua print(vim.inspect(vim.lsp.buf.list_workspace_folders()))<CR>', opts)
  48. buf_set_keymap('n', '<space>D', '<cmd>lua vim.lsp.buf.type_definition()<CR>', opts)
  49. buf_set_keymap('n', '<space>rn', '<cmd>lua vim.lsp.buf.rename()<CR>', opts)
  50. buf_set_keymap('n', '<space>ca', '<cmd>lua vim.lsp.buf.code_action()<CR>', opts)
  51. buf_set_keymap('n', 'gr', '<cmd>lua vim.lsp.buf.references()<CR>', opts)
  52. buf_set_keymap('n', '<space>e', '<cmd>lua vim.lsp.diagnostic.show_line_diagnostics()<CR>', opts)
  53. buf_set_keymap('n', '[d', '<cmd>lua vim.lsp.diagnostic.goto_prev()<CR>', opts)
  54. buf_set_keymap('n', ']d', '<cmd>lua vim.lsp.diagnostic.goto_next()<CR>', opts)
  55. buf_set_keymap('n', '<space>q', '<cmd>lua vim.lsp.diagnostic.set_loclist()<CR>', opts)
  56. buf_set_keymap('n', '<space>f', '<cmd>lua vim.lsp.buf.formatting()<CR>', opts)
  57. end
  58. -- install the C/C++ server with `apt-get install clangd`
  59. -- or `dnf install clang-tools-extra`
  60. -- install the python server with `npm install pyright`
  61. -- Yes, the python language server is in typescript.
  62. -- Use a loop to conveniently call 'setup' on multiple servers and
  63. -- map buffer local keybindings when the language server attaches.
  64. local servers = { 'clangd', 'pyright', 'rust_analyzer' }
  65. for _, lsp in ipairs(servers) do
  66. nvim_lsp[lsp].setup {
  67. on_attach = on_attach,
  68. flags = {
  69. debounce_text_changes = 150,
  70. }
  71. }
  72. end
  73. EOF
  74. "set clipboard+=autoselect
  75. set clipboard+=unnamed
  76. set ruler
  77. set expandtab
  78. set shiftwidth=2
  79. " Spelling
  80. set spelllang=en
  81. autocmd FileType markdown setlocal spell
  82. autocmd FileType gitcommit setlocal spell
  83. set background=dark
  84. " Enable base16 swatch-based colour theme.
  85. set termguicolors
  86. "colorscheme base16-black-metal-bathory
  87. "colorscheme base16-atelier-savanna
  88. "colorscheme base16-3024
  89. "colorscheme base16-twilight
  90. "colorscheme base16-eighties
  91. "colorscheme base16-mocha
  92. "colorscheme base16-nord
  93. colorscheme base16-ia-dark