Created
August 18, 2021 21:44
-
-
Save drogus/0d933967d03a8f4f7c74af4ead9f563f 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
local cmd = vim.cmd -- to execute Vim commands e.g. cmd('pwd') | |
local fn = vim.fn -- to call Vim functions e.g. fn.bufnr() | |
local g = vim.g -- a table to access global variables | |
local opt = vim.opt -- to set options | |
cmd 'packadd paq-nvim' -- load the package manager | |
local paq = require('paq-nvim').paq -- a convenient alias | |
paq {'savq/paq-nvim', opt = true} -- paq-nvim manages itself | |
paq {'junegunn/fzf'} | |
paq {'junegunn/fzf.vim'} -- to enable preview (optional) | |
paq {'ojroques/nvim-lspfuzzy'} | |
paq {'shougo/deoplete-lsp'} | |
paq {'shougo/deoplete.nvim', run = fn['remote#host#UpdateRemotePlugins']} | |
paq {'neovim/nvim-lspconfig'} | |
paq {'neovim/nvim-lspconfig'} | |
paq {'simrat39/rust-tools.nvim'} | |
paq {'nvim-lua/popup.nvim'} | |
paq {'nvim-lua/plenary.nvim'} | |
paq {'nvim-telescope/telescope.nvim'} | |
paq {'mfussenegger/nvim-dap'} | |
paq {'nvim-treesitter/nvim-treesitter'} | |
paq {'nvim-treesitter/nvim-treesitter-textobjects'} | |
paq {'kosayoda/nvim-lightbulb'} | |
paq {'b3nj5m1n/kommentary'} | |
paq {'overcache/NeoSolarized'} | |
g['deoplete#enable_at_startup'] = 1 | |
cmd 'syntax enable' | |
cmd 'set background=light' | |
cmd 'colorscheme NeoSolarized' -- Put your favorite colorscheme here | |
cmd 'set termguicolors' | |
g.solarized_termcolors = '256' | |
opt.completeopt = {'menuone', 'noinsert', 'noselect'} -- Completion options (for deoplete) | |
opt.expandtab = true -- Use spaces instead of tabs | |
opt.hidden = true -- Enable background buffers | |
opt.ignorecase = true -- Ignore case | |
opt.joinspaces = false -- No double spaces with join | |
opt.list = true -- Show some invisible characters | |
opt.number = true -- Show line numbers | |
opt.relativenumber = true -- Relative line numbers | |
opt.scrolloff = 4 -- Lines of context | |
opt.shiftround = true -- Round indent | |
opt.shiftwidth = 2 -- Size of an indent | |
opt.sidescrolloff = 8 -- Columns of context | |
opt.smartcase = true -- Do not ignore case with capitals | |
opt.smartindent = true -- Insert indents automatically | |
opt.splitbelow = true -- Put new windows below current | |
opt.splitright = true -- Put new windows right of current | |
opt.tabstop = 2 -- Number of spaces tabs count for | |
opt.termguicolors = true -- True color support | |
opt.wildmode = {'list', 'longest'} -- Command-line completion mode | |
opt.wrap = false | |
local function map(mode, lhs, rhs, opts) | |
local options = {noremap = true} | |
if opts then options = vim.tbl_extend('force', options, opts) end | |
vim.api.nvim_set_keymap(mode, lhs, rhs, options) | |
end | |
cmd 'let mapleader = ","' | |
map('', '<leader>c', '"+y') -- Copy to clipboard in normal, visual, select and operator modes | |
map('i', '<C-u>', '<C-g>u<C-u>') -- Make <C-u> undo-friendly | |
map('i', '<C-w>', '<C-g>u<C-w>') -- Make <C-w> undo-friendly | |
-- <Tab> to navigate the completion menu | |
map('i', '<S-Tab>', 'pumvisible() ? "\\<C-p>" : "\\<Tab>"', {expr = true}) | |
map('i', '<Tab>', 'pumvisible() ? "\\<C-n>" : "\\<Tab>"', {expr = true}) | |
map('n', '<C-l>', '<cmd>noh<CR>') -- Clear highlights | |
map('n', '<leader>o', 'm`o<Esc>``') -- In | |
local ts = require 'nvim-treesitter.configs' | |
ts.setup {ensure_installed = 'maintained', highlight = {enable = true}} | |
local lsp = require 'lspconfig' | |
local lspfuzzy = require 'lspfuzzy' | |
-- We use the default settings for ccls and pylsp: the option table can stay empty | |
lsp.ccls.setup {} | |
lsp.pylsp.setup {} | |
lspfuzzy.setup {} -- Make the LSP client use FZF instead of the quickfix list | |
map('n', '<space>,', '<cmd>lua vim.lsp.diagnostic.goto_prev()<CR>') | |
map('n', '<space>.', '<cmd>lua vim.lsp.diagnostic.goto_next()<CR>') | |
map('n', '<space>a', '<cmd>lua vim.lsp.buf.code_action()<CR>') | |
map('n', '<space>d', '<cmd>lua vim.lsp.buf.definition()<CR>') | |
map('n', '<space>f', '<cmd>lua vim.lsp.buf.formatting()<CR>') | |
map('n', '<space>h', '<cmd>lua vim.lsp.buf.hover()<CR>') | |
map('n', '<space>m', '<cmd>lua vim.lsp.buf.rename()<CR>') | |
map('n', '<space>r', '<cmd>lua vim.lsp.buf.references()<CR>') | |
map('n', '<space>s', '<cmd>lua vim.lsp.buf.document_symbol()<CR>') | |
-- telescope | |
map('n', '<leader>ff', '<cmd>lua require(\'telescope.builtin\').find_files()<cr>') | |
map('n', '<leader>fg', '<cmd>lua require(\'telescope.builtin\').live_grep()<cr>') | |
map('n', '<leader>b', '<cmd>lua require(\'telescope.builtin\').buffers()<cr>') | |
map('n', '<leader>fh', '<cmd>lua require(\'telescope.builtin\').help_tags()<cr>') | |
cmd 'au TextYankPost * lua vim.highlight.on_yank {on_visual = false}' -- disabled in visual mode | |
require'nvim-treesitter.configs'.setup { | |
textobjects = { | |
swap = { | |
enable = true, | |
swap_next = { | |
["<leader>a"] = "@parameter.inner", | |
}, | |
swap_previous = { | |
["<leader>A"] = "@parameter.inner", | |
}, | |
}, | |
select = { | |
enable = true, | |
-- Automatically jump forward to textobj, similar to targets.vim | |
lookahead = true, | |
keymaps = { | |
-- You can use the capture groups defined in textobjects.scm | |
["af"] = "@function.outer", | |
["if"] = "@function.inner", | |
["ac"] = "@class.outer", | |
["ic"] = "@class.inner", | |
-- Or you can define your own textobjects like this | |
["iF"] = { | |
python = "(function_definition) @function", | |
cpp = "(function_definition) @function", | |
c = "(function_definition) @function", | |
java = "(method_declaration) @function", | |
}, | |
}, | |
}, | |
}, | |
} | |
-- Showing defaults | |
require'nvim-lightbulb'.update_lightbulb { | |
sign = { | |
enabled = true, | |
-- Priority of the gutter sign | |
priority = 10, | |
}, | |
float = { | |
enabled = false, | |
-- Text to show in the popup float | |
text = "💡", | |
-- Available keys for window options: | |
-- - height of floating window | |
-- - width of floating window | |
-- - wrap_at character to wrap at for computing height | |
-- - max_width maximal width of floating window | |
-- - max_height maximal height of floating window | |
-- - pad_left number of columns to pad contents at left | |
-- - pad_right number of columns to pad contents at right | |
-- - pad_top number of lines to pad contents at top | |
-- - pad_bottom number of lines to pad contents at bottom | |
-- - offset_x x-axis offset of the floating window | |
-- - offset_y y-axis offset of the floating window | |
-- - anchor corner of float to place at the cursor (NW, NE, SW, SE) | |
-- - winblend transparency of the window (0-100) | |
win_opts = {}, | |
}, | |
virtual_text = { | |
enabled = false, | |
-- Text to show at virtual text | |
text = "💡", | |
}, | |
status_text = { | |
enabled = false, | |
-- Text to provide when code actions are available | |
text = "💡", | |
-- Text to provide when no actions are available | |
text_unavailable = "" | |
} | |
} | |
local opts = { | |
tools = { -- rust-tools options | |
-- Automatically set inlay hints (type hints) | |
autoSetHints = true, | |
-- Whether to show hover actions inside the hover window | |
-- This overrides the default hover handler | |
hover_with_actions = true, | |
runnables = { | |
-- whether to use telescope for selection menu or not | |
use_telescope = true | |
-- rest of the opts are forwarded to telescope | |
}, | |
debuggables = { | |
-- whether to use telescope for selection menu or not | |
use_telescope = true | |
-- rest of the opts are forwarded to telescope | |
}, | |
-- These apply to the default RustSetInlayHints command | |
inlay_hints = { | |
-- Only show inlay hints for the current line | |
only_current_line = false, | |
-- Event which triggers a refersh of the inlay hints. | |
-- You can make this "CursorMoved" or "CursorMoved,CursorMovedI" but | |
-- not that this may cause higher CPU usage. | |
-- This option is only respected when only_current_line and | |
-- autoSetHints both are true. | |
only_current_line_autocmd = "CursorHold", | |
-- wheter to show parameter hints with the inlay hints or not | |
show_parameter_hints = true, | |
-- prefix for parameter hints | |
parameter_hints_prefix = "<- ", | |
-- prefix for all the other hints (type, chaining) | |
other_hints_prefix = "=> ", | |
-- whether to align to the length of the longest line in the file | |
max_len_align = false, | |
-- padding from the left if max_len_align is true | |
max_len_align_padding = 1, | |
-- whether to align to the extreme right or not | |
right_align = false, | |
-- padding from the right if right_align is true | |
right_align_padding = 7 | |
}, | |
hover_actions = { | |
-- the border that is used for the hover window | |
-- see vim.api.nvim_open_win() | |
border = { | |
{"╭", "FloatBorder"}, {"─", "FloatBorder"}, | |
{"╮", "FloatBorder"}, {"│", "FloatBorder"}, | |
{"╯", "FloatBorder"}, {"─", "FloatBorder"}, | |
{"╰", "FloatBorder"}, {"│", "FloatBorder"} | |
}, | |
-- whether the hover action window gets automatically focused | |
auto_focus = true | |
} | |
}, | |
-- all the opts to send to nvim-lspconfig | |
-- these override the defaults set by rust-tools.nvim | |
-- see https://github.com/neovim/nvim-lspconfig/blob/master/CONFIG.md#rust_analyzer | |
server = {} -- rust-analyer options | |
} | |
require('rust-tools').setup(opts) | |
require('kommentary.config').use_extended_mappings() | |
local function is_WSL2() | |
local f = io.open('/proc/version', "r") | |
if f == nil then | |
return false | |
end | |
local content = f:read("*all") | |
f:close() | |
return string.find(content, "microsoft") | |
end | |
if is_WSL2() then | |
cmd 'set clipboard+=unnamedplus' | |
vim.g.clipboard = { | |
name = "wslclipboard", | |
copy = { | |
["+"] = "win32yank.exe -i --crlf", | |
["*"] = "win32yank.exe -i --crlf" | |
}, | |
paste = { | |
["+"] = "win32yank.exe -o --lf", | |
["*"] = "win32yank.exe -o --lf" | |
}, | |
cache_enabled = true | |
} | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment