summaryrefslogblamecommitdiff
path: root/nvim.init.vim
blob: 2cf7af6e4caf75768ef0b2a133fce1050e7cbc26 (plain) (tree)
1
2
3
4
5
6
7
8
9
                                        

                  
                 
 


                   
 


                                  
 


                                
 




                                                                     
 


                   
 


                               
 


                  
 

               
 




                 
 

                            
 


              
 

             
 
          
 


                             
 








































































































                                                                                                           
 
            
" dotfiles -- nvim.init.vim.experimental
" author: johannst

let mapleader=" "

" -----------------
" Plugins.
" -----------------

call plug#begin('~/.nvim/plugged')
    " Colors.
    Plug 'chriskempson/base16-vim'

    " LSP & Completion.
    Plug 'neovim/nvim-lspconfig'
    Plug 'hrsh7th/nvim-compe'

    " Telescope.
    Plug 'nvim-lua/plenary.nvim'
    Plug 'nvim-telescope/telescope.nvim'
    Plug 'nvim-telescope/telescope-fzf-native.nvim', { 'do': 'make' }
call plug#end()

" -----------------
" Setters.
" -----------------

set termguicolors
set background=dark
colorscheme base16-default-dark

set relativenumber
set number
set signcolumn=yes

set mouse=a
set scrolloff=8

set tabstop=4
set softtabstop=4
set shiftwidth=4
set smartindent
set expandtab

set list
set listchars=tab:>-,trail:-

set hidden
set nobackup
set noswapfile

set hlsearch
set incsearch

set nowrap

if executable('rg')
    set grepprg=rg\ --vimgrep
endif

" -----------------
" LSP & Complete.
" -----------------

"set completeopt=menuone,noinsert,noselect

lua << EOF
local on_attach = function(_client, bufnr)
    -- Install `omnifunc` completion handler, get completion with <C-x><C-o>.
    vim.api.nvim_buf_set_option(bufnr, "omnifunc", "v:lua.vim.lsp.omnifunc")

    -- Key mappings.
    local opts = { noremap=true, silent=true }
    vim.api.nvim_buf_set_keymap(bufnr, "n", "K", "<Cmd>lua vim.lsp.buf.hover()<CR>", opts)
    vim.api.nvim_buf_set_keymap(bufnr, "n", "<C-]>", "<Cmd>lua vim.lsp.buf.definition()<CR>", opts)
    vim.api.nvim_buf_set_keymap(bufnr, "n", "<leader>r", "<Cmd>lua vim.lsp.buf.references()<CR>", opts)
    vim.api.nvim_buf_set_keymap(bufnr, "n", "<leader>i", "<Cmd>lua vim.lsp.buf.implementation()<CR>", opts)
    vim.api.nvim_buf_set_keymap(bufnr, "n", "<leader>f", "<Cmd>lua vim.lsp.buf.formatting()<CR>", opts)
end

-- Setup rust-analyzer.
require'lspconfig'.rust_analyzer.setup {
    on_attach = on_attach,
}

-- Setup clangd.
require'lspconfig'.clangd.setup {
    cmd = { "clangd", "--background-index", "--completion-style=detailed" },
    on_attach = on_attach,
}

-- Setup pyright.
require'lspconfig'.pyright.setup {
    on_attach = on_attach,
}

-- Setup nvim-compe.
require'compe'.setup {
  enabled = true;
  autocomplete = true;
  debug = false;
  min_length = 1;
  preselect = 'enable';
  throttle_time = 80;
  source_timeout = 200;
  incomplete_delay = 400;
  max_abbr_width = 100;
  max_kind_width = 100;
  max_menu_width = 100;
  documentation = true;

  source = {
    path = true;
    buffer = false;
    calc = false;
    nvim_lsp = true;
    nvim_lua = false;
    vsnip = false;
    ultisnips = false;
  };
}

vim.o.completeopt = "menuone,noselect"

vim.api.nvim_set_keymap("i", "<C-Space>", "compe#complete()", {expr = true})
vim.api.nvim_set_keymap("i", "<CR>", "compe#confirm('<CR>')", {expr = true})
vim.api.nvim_set_keymap("i", "<C-e>", "compe#close('<C-e>')", {expr = true})

-- Telescope.
local picker_cfg = { theme = "ivy" }

require('telescope').setup{
  pickers = {
    buffers     = picker_cfg,
    find_files  = picker_cfg,
    man_pages   = picker_cfg,
  },
}
-- Telescope: load fzf-native.
require('telescope').load_extension('fzf')
EOF

" -----------------
" Mappings.
" -----------------

vnoremap <leader>p "_dP

" Telescope
nnoremap <leader>fb  <cmd>Telescope buffers<cr>
nnoremap <leader>ff  <cmd>Telescope find_files<cr>
nnoremap <leader>fe  <cmd>Telescope file_browser<cr>
nnoremap <leader>fg  <cmd>Telescope live_grep<cr>
nnoremap <leader>fm  <cmd>Telescope man_pages sections={"2","3"}<cr>
nnoremap <leader>ft  <cmd>Telescope lsp_document_symbols<cr>
nnoremap <leader>fwt <cmd>Telescope lsp_dynamic_workspace_symbols<cr>

" -----------------
" Autogroups.
" -----------------

augroup AG_highlight_yank
    autocmd!
    autocmd TextYankPost * silent! lua require'vim.highlight'.on_yank({timeout = 300})
augroup END

" vim:ft=vim