Created
December 28, 2021 18:09
-
-
Save Ichbinjoe/17e66e52ea2191a2bbf7634fb87f7f84 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
call plug#begin(stdpath('data') . '/plugged') | |
Plug 'tpope/vim-sensible' | |
" Theme | |
Plug 'nanotech/jellybeans.vim' | |
" NetRW | |
Plug 'tpope/vim-vinegar' | |
let g:netrw_liststyle = 3 | |
" Language / Syntax highlighting | |
Plug 'cespare/vim-toml' | |
Plug 'rust-lang/rust.vim' | |
Plug 'tpope/vim-markdown' | |
" Picker | |
Plug 'nvim-lua/plenary.nvim' | |
Plug 'nvim-telescope/telescope.nvim' | |
Plug 'nvim-telescope/telescope-fzf-native.nvim', { 'do': 'make' } | |
" LSP | |
Plug 'neovim/nvim-lspconfig' | |
Plug 'hrsh7th/cmp-nvim-lsp' | |
Plug 'hrsh7th/cmp-buffer' | |
Plug 'hrsh7th/cmp-path' | |
Plug 'hrsh7th/cmp-cmdline' | |
Plug 'hrsh7th/nvim-cmp' | |
Plug 'hrsh7th/cmp-vsnip' | |
Plug 'hrsh7th/vim-vsnip' | |
" Comments | |
Plug 'tpope/vim-commentary' | |
" Treesitter | |
Plug 'nvim-treesitter/nvim-treesitter', {'do': ':TSUpdate'} " We recommend updating the parsers on update | |
call plug#end() | |
lua << EOF | |
local cmp = require'cmp' | |
cmp.setup { | |
snippet = { | |
expand = function(args) | |
vim.fn["vsnip#anonymous"](args.body) | |
end, | |
}, | |
sources = { | |
{ name = 'nvim_lsp' }, | |
{ name = 'buffer' }, | |
{ name = 'path' }, | |
{ name = 'cmdline' }, | |
{ name = 'vsnip' }, | |
}, | |
mapping = { | |
['<C-b>'] = cmp.mapping(cmp.mapping.scroll_docs(-4), { 'i', 'c' }), | |
['<C-f>'] = cmp.mapping(cmp.mapping.scroll_docs(4), { 'i', 'c' }), | |
['<C-Space>'] = cmp.mapping(cmp.mapping.complete(), { 'i', 'c' }), | |
['<C-y>'] = cmp.config.disable, -- Specify `cmp.config.disable` if you want to remove the default `<C-y>` mapping. | |
['<C-e>'] = cmp.mapping({ | |
i = cmp.mapping.abort(), | |
c = cmp.mapping.close(), | |
}), | |
['<CR>'] = cmp.mapping.confirm({ select = true }), -- Accept currently selected item. Set `select` to `false` to only confirm explicitly selected items. | |
}, | |
} | |
-- Use buffer source for `/` (if you enabled `native_menu`, this won't work anymore). | |
cmp.setup.cmdline('/', { | |
sources = { | |
{ name = 'buffer' } | |
} | |
}) | |
-- Use cmdline & path source for ':' (if you enabled `native_menu`, this won't work anymore). | |
cmp.setup.cmdline(':', { | |
sources = cmp.config.sources({ | |
{ name = 'path' } | |
}, { | |
{ name = 'cmdline' } | |
}) | |
}) | |
local capabilities = vim.lsp.protocol.make_client_capabilities() | |
capabilities = require('cmp_nvim_lsp').update_capabilities(capabilities) | |
-- Use an on_attach function to only map the following keys | |
-- after the language server attaches to the current buffer | |
local on_attach = function(client, bufnr) | |
local function buf_set_keymap(...) vim.api.nvim_buf_set_keymap(bufnr, ...) end | |
local function buf_set_option(...) vim.api.nvim_buf_set_option(bufnr, ...) end | |
-- Enable completion triggered by <c-x><c-o> | |
buf_set_option('omnifunc', 'v:lua.vim.lsp.omnifunc') | |
-- Mappings. | |
local opts = { noremap=true, silent=true } | |
-- See `:help vim.lsp.*` for documentation on any of the below functions | |
buf_set_keymap('n', 'gD', '<cmd>lua vim.lsp.buf.declaration()<CR>', opts) | |
buf_set_keymap('n', 'gd', '<cmd>lua vim.lsp.buf.definition()<CR>', opts) | |
buf_set_keymap('n', 'K', '<cmd>lua vim.lsp.buf.hover()<CR>', opts) | |
buf_set_keymap('n', 'gi', '<cmd>lua vim.lsp.buf.implementation()<CR>', opts) | |
buf_set_keymap('n', '<C-k>', '<cmd>lua vim.lsp.buf.signature_help()<CR>', opts) | |
buf_set_keymap('n', '<space>wa', '<cmd>lua vim.lsp.buf.add_workspace_folder()<CR>', opts) | |
buf_set_keymap('n', '<space>wr', '<cmd>lua vim.lsp.buf.remove_workspace_folder()<CR>', opts) | |
buf_set_keymap('n', '<space>wl', '<cmd>lua print(vim.inspect(vim.lsp.buf.list_workspace_folders()))<CR>', opts) | |
buf_set_keymap('n', '<space>D', '<cmd>lua vim.lsp.buf.type_definition()<CR>', opts) | |
buf_set_keymap('n', '<space>rn', '<cmd>lua vim.lsp.buf.rename()<CR>', opts) | |
buf_set_keymap('n', '<space>ca', '<cmd>lua vim.lsp.buf.code_action()<CR>', opts) | |
buf_set_keymap('n', 'gr', '<cmd>lua vim.lsp.buf.references()<CR>', opts) | |
buf_set_keymap('n', '<space>e', '<cmd>lua vim.diagnostic.open_float()<CR>', opts) | |
buf_set_keymap('n', '[d', '<cmd>lua vim.diagnostic.goto_prev()<CR>', opts) | |
buf_set_keymap('n', ']d', '<cmd>lua vim.diagnostic.goto_next()<CR>', opts) | |
buf_set_keymap('n', '<space>q', '<cmd>lua vim.diagnostic.setloclist()<CR>', opts) | |
buf_set_keymap('n', '<space>f', '<cmd>lua vim.lsp.buf.formatting()<CR>', opts) | |
end | |
local lsp_config = require('lspconfig') | |
local servers = {'clangd', 'pyls', 'rust_analyzer'} | |
for _, lsp in ipairs(servers) do | |
lsp_config[lsp].setup { | |
capabilities = capabilities, | |
on_attach = on_attach, | |
flags = { | |
debounce_text_changes = 150, | |
} | |
} | |
end | |
require'nvim-treesitter.configs'.setup { | |
ensure_installed = "maintained", | |
sync_install = false, | |
highlight = { | |
enable = true, | |
}, | |
indent = { | |
enable = true, | |
}, | |
} | |
EOF | |
set foldmethod=expr | |
set foldexpr=nvim_treesitter#foldexpr() | |
" Expand | |
imap <expr> <C-j> vsnip#expandable() ? '<Plug>(vsnip-expand)' : '<C-j>' | |
smap <expr> <C-j> vsnip#expandable() ? '<Plug>(vsnip-expand)' : '<C-j>' | |
" Expand or jump | |
imap <expr> <C-l> vsnip#available(1) ? '<Plug>(vsnip-expand-or-jump)' : '<C-l>' | |
smap <expr> <C-l> vsnip#available(1) ? '<Plug>(vsnip-expand-or-jump)' : '<C-l>' | |
" Jump forward or backward | |
imap <expr> <Tab> vsnip#jumpable(1) ? '<Plug>(vsnip-jump-next)' : '<Tab>' | |
smap <expr> <Tab> vsnip#jumpable(1) ? '<Plug>(vsnip-jump-next)' : '<Tab>' | |
imap <expr> <S-Tab> vsnip#jumpable(-1) ? '<Plug>(vsnip-jump-prev)' : '<S-Tab>' | |
smap <expr> <S-Tab> vsnip#jumpable(-1) ? '<Plug>(vsnip-jump-prev)' : '<S-Tab>' | |
" Select or cut text to use as $TM_SELECTED_TEXT in the next snippet. | |
" See https://github.com/hrsh7th/vim-vsnip/pull/50 | |
nmap s <Plug>(vsnip-select-text) | |
xmap s <Plug>(vsnip-select-text) | |
nmap S <Plug>(vsnip-cut-text) | |
xmap S <Plug>(vsnip-cut-text) | |
set completeopt=menu,menuone,noselect | |
set hidden | |
set nobackup | |
set nowritebackup | |
set shortmess=asWAcS | |
" colors | |
syntax on | |
set termguicolors | |
colorscheme jellybeans | |
" Numbering | |
set number relativenumber | |
" Column highlighting | |
" set colorcolumn=120 | |
" Always show status bar | |
set laststatus=2 | |
" Expand command size | |
set cmdheight=2 | |
filetype plugin indent on | |
set expandtab | |
set tabstop=4 | |
set shiftwidth=4 | |
" Undo/backup | |
set undofile | |
set undodir=~/.undo/ | |
set undoreload=100 | |
" Disable mouse | |
set mouse= | |
map <ScrollWheelUp> <nop> | |
map <S-ScrollWheelUp> <nop> | |
map <C-ScrollWheelUp> <nop> | |
map <ScrollWheelDown> <nop> | |
map <S-ScrollWheelDown> <nop> | |
map <C-ScrollWheelDown> <nop> | |
" Set language | |
autocmd BufRead,BufNewFile *.md,*.tex,*.txt setlocal spell | |
set spelllang=en_us | |
if has("multi_byte") | |
if &termencoding == "" | |
let &termencoding = &encoding | |
endif | |
set encoding=utf-8 | |
setglobal fileencoding=utf-8 | |
set fileencodings=ucs-bom,utf-8,latin1 | |
endif | |
nnoremap <silent> <Space> @=(foldlevel('.')?'za':"\<Space>")<CR> | |
vnoremap <Space> zf | |
nnoremap tc <cmd>tabnew<cr> | |
nnoremap tn <cmd>tabnext<cr> | |
nnoremap tp <cmd>tabprevious<cr> | |
nnoremap <C-PageUp> <cmd>tabnext<cr> | |
nnoremap <C-PageDown> <cmd>tabprevious<cr> | |
nnoremap tf <cmd>Telescope find_files<cr> | |
nnoremap tg <cmd>Telescope live_grep<cr> | |
nnoremap th <cmd>Telescope help_tags<cr> | |
nnoremap tb <cmd>Telescope buffers<cr> | |
nnoremap td <cmd>Telescope lsp_definitions<cr> | |
nnoremap wt <cmd>Lexplore<cr> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment