use 'tpope/vim-rhubarb' -- Fugitive-companion to interact with github
use 'tpope/vim-commentary' -- "gc" to comment visual regions/lines
use 'tpope/vim-surround' -- "gc" to comment visual regions/lines
+ use 'tpope/vim-obsession'
use 'ludovicchabant/vim-gutentags' -- Automatic tags management
use 'tpope/vim-sleuth'
use 'tpope/vim-dispatch'
+
-- UI to select things (files, grep results, open buffers...)
- use {
- 'nvim-telescope/telescope.nvim',
- requires = {
- {'nvim-lua/popup.nvim'},
- {'nvim-lua/plenary.nvim'}
- }
+ use { 'nvim-telescope/telescope.nvim', requires = { 'nvim-lua/plenary.nvim' } }
+ use {
+ 'nvim-telescope/telescope-fzf-native.nvim',
+ run = 'make',
+ requires = { 'nvim-telescope/telescope.nvim' }
}
use 'itchyny/lightline.vim' -- Fancier statusline
+ use 'shaunsingh/nord.nvim'
+
-- Add git related info in the signs columns and popups
use {'lewis6991/gitsigns.nvim', requires = {'nvim-lua/plenary.nvim'} }
use {'nvim-treesitter/nvim-treesitter', run = ':TSUpdate'}
use 'nvim-treesitter/nvim-treesitter-textobjects'
- use 'windwp/nvim-autopairs'
- use 'windwp/nvim-ts-autotag'
- use 'jiangmiao/auto-pairs'
+ use 'romgrk/nvim-treesitter-context'
use 'neovim/nvim-lspconfig' -- Collection of configurations for built-in LSP client
use {
'hrsh7th/nvim-cmp', -- Autocompletion plugin
{'rafamadriz/friendly-snippets'},
}
}
+ use 'rust-lang/rust.vim'
use 'simrat39/rust-tools.nvim'
- use 'mfussenegger/nvim-dap'
+ -- use 'mfussenegger/nvim-dap'
end)
---Incremental live completion
-vim.o.inccommand = "nosplit"
-
--Set highlight on search
vim.o.hlsearch = false
-vim.o.incsearch = true
--Make line numbers default
vim.wo.number = true
--Do not save when switching buffers
vim.o.hidden = true
---Enable mouse mode
--- vim.o.mouse = "a"
-
--Enable break indent
vim.o.breakindent = true
--Save undo history
-vim.cmd[[set undofile]]
+vim.opt.undofile = true
--Case insensitive searching UNLESS /C or capital in search
vim.o.ignorecase = true
vim.o.updatetime = 250
vim.wo.signcolumn="yes"
---Set colorscheme (order is important here)
--- vim.o.termguicolors = true
-vim.cmd[[colorscheme koehler]]
-
--Set statusbar
-vim.g.lightline = {
- -- colorscheme = 'koehler';
- active = { left = { { 'mode', 'paste' }, { 'gitbranch', 'readonly', 'filename', 'modified' } } };
- component_function = { gitbranch = 'fugitive#head', };
-}
-
--Remap space as leader key
vim.api.nvim_set_keymap('', '<Space>', '<Nop>', { noremap = true, silent=true})
vim.g.mapleader = " "
vim.api.nvim_set_keymap('n', 'k', "v:count == 0 ? 'gk' : 'k'", { noremap=true, expr = true, silent = true})
vim.api.nvim_set_keymap('n', 'j', "v:count == 0 ? 'gj' : 'j'", {noremap= true, expr = true, silent = true})
---Remap escape to leave terminal mode
-vim.api.nvim_set_keymap('t', '<Esc>', [[<c-\><c-n>]], {noremap = true})
-
---Add map to enter paste mode
-vim.o.pastetoggle="<F3>"
+-- Highlight on yank
+vim.api.nvim_exec(
+ [[
+ augroup YankHighlight
+ autocmd!
+ autocmd TextYankPost * silent! lua vim.highlight.on_yank()
+ augroup end
+ ]],
+ false
+)
-- Gitsigns
require('gitsigns').setup {
["<C-d>"] = false,
},
},
- generic_sorter = require'telescope.sorters'.get_fzy_sorter,
- file_sorter = require'telescope.sorters'.get_fzy_sorter,
+ -- generic_sorter = require'telescope.sorters'.get_fzf_sorter,
+ -- file_sorter = require'telescope.sorters'.get_fzf_sorter,
}
}
+
+-- Telescope with fzf native
+require('telescope').load_extension('fzf')
+
--Add leader shortcuts
vim.api.nvim_set_keymap('n', '<leader>f', [[<cmd>lua require('telescope.builtin').git_files()<cr>]], { noremap = true, silent = true})
vim.api.nvim_set_keymap('n', '<leader>F', [[<cmd>lua require('telescope.builtin').find_files()<cr>]], { noremap = true, silent = true})
vim.api.nvim_set_keymap('n', '<leader>gp', [[<cmd>lua require('telescope.builtin').git_bcommits()<cr>]], { noremap = true, silent = true})
vim.api.nvim_set_keymap('n', '<leader>ca', [[<cmd>lua require('telescope.builtin').lsp_code_actions()<cr>]], { noremap = true, silent = true})
-vim.api.nvim_set_keymap('s', '<leader>ca', [[<cmd>lua require('telescope.builtin').lsp_range_code_actions()<cr>]], { noremap = true, silent = true})
+vim.api.nvim_set_keymap('v', '<leader>ca', [[<cmd>lua require('telescope.builtin').lsp_range_code_actions()<cr>]], { noremap = true, silent = true})
vim.api.nvim_set_keymap('n', '<leader>gr', [[<cmd>lua require('telescope.builtin').lsp_references()<cr>]], { noremap = true, silent = true})
vim.api.nvim_set_keymap('n', '<leader>gs', [[<cmd>lua require('telescope.builtin').lsp_workspace_symbols()<cr>]], { noremap = true, silent = true})
vim.api.nvim_set_keymap('n', '<leader>gS', [[<cmd>lua require('telescope.builtin').lsp_document_symbols()<cr>]], { noremap = true, silent = true})
vim.api.nvim_set_keymap('n', '<leader>gD', [[<cmd>lua require('telescope.builtin').lsp_document_diagnostics()<cr>]], { noremap = true, silent = true})
vim.api.nvim_set_keymap('n', '<leader>gi', [[<cmd>lua require('telescope.builtin').lsp_definitions()<cr>]], { noremap = true, silent = true})
--- Change preview window location
-vim.g.splitbelow = true
-
--- Highlight on yank
-vim.api.nvim_exec(
- [[
- augroup YankHighlight
- autocmd!
- autocmd TextYankPost * silent! lua vim.highlight.on_yank()
- augroup end
- ]],
- false
-)
-
--- LSP settings
-local nvim_lsp = require('lspconfig')
-
--- 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>e', '<cmd>lua vim.lsp.diagnostic.show_line_diagnostics()<CR>', opts)
- buf_set_keymap('n', '[d', '<cmd>lua vim.lsp.diagnostic.goto_prev()<CR>', opts)
- buf_set_keymap('n', ']d', '<cmd>lua vim.lsp.diagnostic.goto_next()<CR>', opts)
- buf_set_keymap('n', '<space>q', '<cmd>lua vim.lsp.diagnostic.set_loclist()<CR>', opts)
- buf_set_keymap("n", "<space>f", "<cmd>lua vim.lsp.buf.formatting()<CR>", opts)
- buf_set_keymap("n", "<space>dc", "<cmd>Dispatch cargo clippy<CR>", opts)
-
-end
-
--- nvim-cmp supports additional completion capabilities
-local capabilities = vim.lsp.protocol.make_client_capabilities()
-capabilities = require('cmp_nvim_lsp').update_capabilities(capabilities)
-
-
--- Enable the following language servers
--- local servers = { 'clangd', 'rust_analyzer', 'bashls', 'pyright', 'tsserver', "cssls", "html" }
-local servers = { 'clangd', 'pyright', 'bashls', 'tsserver', "cssls", "html" }
-for _, lsp in ipairs(servers) do
- nvim_lsp[lsp].setup {
- on_attach = on_attach,
- capabilities = capabilities,
- flags = {
- debounce_text_changes = 150,
- }
- }
-end
-
-local rustopts = {
- -- see https://github.com/neovim/nvim-lspconfig/blob/master/CONFIG.md#rust_analyzer
- server = {
- on_attach = on_attach,
- flags = {
- debounce_text_changes = 150,
- },
- },
-}
-
-require('rust-tools').setup(rustopts)
+vim.api.nvim_set_keymap('n', '<leader>r', [[<cmd>source $MYVIMRC<cr>]], { noremap = true, silent = true})
--- Treesitter setup
+-- Treesitter configuration
require('nvim-treesitter.configs').setup {
highlight = {
enable = true, -- false will disable the whole extension
},
}
-vim.o.completeopt="menuone,noselect"
+-- set foldmethod=expr
+-- set foldexpr=nvim_treesitter#foldexpr()
+
+-- Set completeopt to have a better completion experience
+vim.o.completeopt="menu,menuone,noselect"
local cmp = require'cmp'
cmp.setup({
['<C-p>'] = cmp.mapping.select_prev_item(),
['<C-n>'] = cmp.mapping.select_next_item(),
-- Add tab support
- ['<S-Tab>'] = cmp.mapping.select_prev_item(),
- ['<Tab>'] = cmp.mapping.select_next_item(),
- ['<C-d>'] = cmp.mapping.scroll_docs(-4),
- ['<C-f>'] = cmp.mapping.scroll_docs(4),
+ -- ['<S-Tab>'] = cmp.mapping.select_prev_item(),
+ -- ['<Tab>'] = cmp.mapping.select_next_item(),
+ ['<C-u>'] = cmp.mapping.scroll_docs(-4),
+ ['<C-d>'] = cmp.mapping.scroll_docs(4),
['<C-Space>'] = cmp.mapping.complete(),
['<C-e>'] = cmp.mapping.close(),
['<CR>'] = cmp.mapping.confirm({
-- autopairs setup
-- require("nvim-autopairs.completion.cmp").setup({
--- check_ts = true,
--- map_cr = false, -- map <CR> on insert mode
+-- map_cr = true, -- map <CR> on insert mode
-- map_complete = true, -- it will auto insert `(` (map_char) after select function or method item
-- auto_select = true, -- automatically select the first item
-- insert = false, -- use insert confirm behavior instead of replace
-- }
-- })
+
+-- LSP settings
+local nvim_lsp = require('lspconfig')
+
+-- 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>e', '<cmd>lua vim.lsp.diagnostic.show_line_diagnostics()<CR>', opts)
+ buf_set_keymap('n', '[d', '<cmd>lua vim.lsp.diagnostic.goto_prev()<CR>', opts)
+ buf_set_keymap('n', ']d', '<cmd>lua vim.lsp.diagnostic.goto_next()<CR>', opts)
+ buf_set_keymap('n', '<space>q', '<cmd>lua vim.lsp.diagnostic.set_loclist()<CR>', opts)
+ buf_set_keymap("n", "<space>f", "<cmd>lua vim.lsp.buf.formatting()<CR>", opts)
+ -- buf_set_keymap("n", "<space>dc", "<cmd>Dispatch cargo clippy<CR>", opts)
+
+end
+
+-- nvim-cmp supports additional completion capabilities
+local capabilities = vim.lsp.protocol.make_client_capabilities()
+
+
+-- Enable the following language servers
+-- local servers = { 'clangd', 'rust_analyzer', 'bashls', 'pyright', 'tsserver', "cssls", "html" }
+local servers = { 'clangd', 'pyright', 'bashls', 'tsserver', "cssls", "html" }
+for _, lsp in ipairs(servers) do
+ nvim_lsp[lsp].setup {
+ on_attach = on_attach,
+ -- capabilities = capabilities,
+ capabilities = require('cmp_nvim_lsp').update_capabilities(capabilities)
+ }
+end
+
+local rustopts = {
+ -- see https://github.com/neovim/nvim-lspconfig/blob/master/CONFIG.md#rust_analyzer
+ server = {
+ on_attach = on_attach,
+ capabilities = require('cmp_nvim_lsp').update_capabilities(capabilities),
+ },
+}
+
+require('rust-tools').setup(rustopts)
+
vim.api.nvim_exec(
[[
autocmd BufWritePre *.rs lua vim.lsp.buf.formatting()
true
)
-
vim.api.nvim_exec([[
" Expand
imap <expr> <C-j> vsnip#expandable() ? '<Plug>(vsnip-expand)' : '<C-j>'
nmap S <Plug>(vsnip-cut-text)
xmap S <Plug>(vsnip-cut-text)
]], true)
+
+if vim.env.TERM == 'screen' or vim.env.TERM == 'linux' then
+ vim.cmd[[colorscheme koehler]]
+ vim.g.lightline = {
+ active = { left = { { 'mode', 'paste' }, { 'gitbranch', 'readonly', 'filename', 'modified' } } };
+ component_function = { gitbranch = 'fugitive#head', };
+ }
+end
+
+if vim.env.TERM == 'screen-256color' or vim.env.TERM == 'xterm-256color' then
+ vim.o.termguicolors = true
+ vim.g.nord_disable_background = true
+ require('nord').set()
+ vim.api.nvim_exec([[
+ let g:lightline = {
+ \ 'colorscheme': 'nord',
+ \ 'active': {
+ \ 'left': [ ['mode', 'paste'],
+ \ ['fugitive', 'readonly', 'filename', 'modified'] ],
+ \ },
+ \ 'component': {
+ \ 'readonly': '%{&filetype=="help"?"":&readonly?"\ue0a2":""}',
+ \ 'modified': '%{&filetype=="help"?"":&modified?"\ue0a0":&modifiable?"":"-"}',
+ \ 'fugitive': '%{exists("*fugitive#head")?fugitive#head():""}'
+ \ },
+ \ 'component_visible_condition': {
+ \ 'readonly': '(&filetype!="help"&& &readonly)',
+ \ 'modified': '(&filetype!="help"&&(&modified||!&modifiable))',
+ \ 'fugitive': '(exists("*fugitive#head") && ""!=fugitive#head())'
+ \ },
+ \ 'separator': { 'left': "\ue0b0", 'right': "\ue0b2" },
+ \ 'subseparator': { 'left': "\ue0b1", 'right': "\ue0b3" }
+ \ }
+ ]], true)
+end
+
+