Created
October 26, 2022 15:27
-
-
Save wseaton/46162b0e9423b2c940b34ee526adad7a to your computer and use it in GitHub Desktop.
init.vim
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
set shell=/bin/zsh | |
let mapleader = "\<Space>" | |
" ============================================================================= | |
" # PLUGINS | |
" ============================================================================= | |
" Load vundle | |
set nocompatible | |
filetype off | |
call plug#begin() | |
" Load plugins | |
" VIM enhancements | |
Plug 'lifepillar/vim-gruvbox8' | |
Plug 'joshdick/onedark.vim' | |
Plug 'ciaranm/securemodelines' | |
Plug 'editorconfig/editorconfig-vim' | |
Plug 'justinmk/vim-sneak' | |
" GUI enhancements | |
Plug 'machakann/vim-highlightedyank' | |
Plug 'andymass/vim-matchup' | |
" Vim Script | |
Plug 'folke/which-key.nvim' | |
Plug 'ekalinin/Dockerfile.vim' | |
" Fuzzy finder | |
Plug 'airblade/vim-rooter' | |
Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': { -> fzf#install() } } | |
Plug 'junegunn/fzf.vim' | |
Plug 'neovim/nvim-lspconfig' | |
Plug 'hrsh7th/cmp-nvim-lsp' | |
Plug 'hrsh7th/nvim-cmp' | |
Plug 'hrsh7th/cmp-path' | |
Plug 'hrsh7th/cmp-buffer' | |
Plug 'windwp/nvim-autopairs' | |
Plug 'j-hui/fidget.nvim' | |
Plug 'simrat39/rust-tools.nvim' | |
" Debugging | |
Plug 'nvim-lua/plenary.nvim' | |
Plug 'mfussenegger/nvim-dap' | |
Plug 'weilbith/nvim-code-action-menu' | |
Plug 'nvim-treesitter/nvim-treesitter', {'do': ':TSUpdate'} | |
Plug 'nvim-lua/popup.nvim' | |
Plug 'nvim-telescope/telescope.nvim' | |
Plug 'nvim-telescope/telescope-ui-select.nvim' | |
Plug 'nvim-lua/lsp_extensions.nvim' | |
Plug 'ray-x/lsp_signature.nvim' | |
Plug 'HallerPatrick/py_lsp.nvim' | |
Plug 'https://git.sr.ht/~whynothugo/lsp_lines.nvim' | |
" Syntactic language support | |
Plug 'cespare/vim-toml' | |
Plug 'stephpy/vim-yaml' | |
Plug 'rhysd/vim-clang-format' | |
"Plug 'fatih/vim-go' | |
Plug 'dag/vim-fish' | |
Plug 'godlygeek/tabular' | |
Plug 'plasticboy/vim-markdown' | |
Plug 'nvim-neo-tree/neo-tree.nvim' | |
Plug 'kyazdani42/nvim-web-devicons' | |
Plug 'MunifTanjim/nui.nvim' | |
Plug 'lewis6991/gitsigns.nvim' | |
Plug 'feline-nvim/feline.nvim' | |
Plug 'stevearc/dressing.nvim' | |
call plug#end() | |
if has('nvim') | |
set guicursor=n-v-c:block-Cursor/lCursor-blinkon0,i-ci:ver25-Cursor/lCursor,r-cr:hor20-Cursor/lCursor | |
set inccommand=nosplit | |
noremap <C-q> :confirm qall<CR> | |
end | |
set termguicolors | |
set background=dark | |
let base16colorspace=256 | |
" Completion | |
" Better display for messages | |
set cmdheight=2 | |
" You will have bad experience for diagnostic messages when it's default 4000. | |
set updatetime=300 | |
filetype plugin indent on | |
set autoindent | |
set timeoutlen=300 " http://stackoverflow.com/questions/2158516/delay-before-o-opens-a-new-line | |
set encoding=utf-8 | |
set scrolloff=2 | |
set noshowmode | |
set hidden | |
set nowrap | |
set nojoinspaces | |
let g:sneak#s_next = 1 | |
let g:vim_markdown_new_list_item_indent = 0 | |
let g:vim_markdown_auto_insert_bullets = 0 | |
let g:vim_markdown_frontmatter = 1 | |
set printfont=:h10 | |
set printencoding=utf-8 | |
set printoptions=paper:letter | |
" Always draw sign column. Prevent buffer moving when adding/deleting sign. | |
set signcolumn=yes | |
" ============================================================================= | |
" # GUI settings | |
" ============================================================================= | |
"set guioptions-=T " Remove toolbar | |
set vb t_vb= " No more beeps | |
set backspace=2 " Backspace over newlines | |
set nofoldenable | |
set ttyfast | |
" https://github.com/vim/vim/issues/1735#issuecomment-383353563 | |
set lazyredraw | |
set synmaxcol=500 | |
set laststatus=2 | |
set relativenumber " Relative line numbers | |
set number " Also show current absolute line | |
set diffopt+=iwhite " No whitespace in vimdiff | |
" Make diffing better: https://vimways.org/2018/the-power-of-diff/ | |
set diffopt+=algorithm:patience | |
set diffopt+=indent-heuristic | |
set colorcolumn=100 " and give me a colored column | |
set showcmd " Show (partial) command in status line. | |
set mouse=a " Enable mouse usage (all modes) in terminals | |
set shortmess+=c " don't give |ins-completion-menu| messages. | |
" Show those damn hidden characters | |
" Verbose: set listchars=nbsp:¬,eol:¶,extends:»,precedes:«,trail:• | |
set listchars=nbsp:¬,extends:»,precedes:«,trail:• | |
syntax on | |
colorscheme gruvbox8 | |
" Set completeopt to have a better completion experience | |
" :help completeopt | |
" menuone: popup even when there's only one match | |
" noinsert: Do not insert text until a selection is made | |
" noselect: Do not select, force user to select one from the menu | |
set completeopt=menuone,noinsert,noselect | |
" Avoid showing extra messages when using completion | |
set shortmess+=c | |
" Configure LSP through rust-tools.nvim plugin. | |
" rust-tools will configure and enable certain LSP features for us. | |
" See https://github.com/simrat39/rust-tools.nvim#configuration | |
lua <<END | |
require('nvim-autopairs').setup{} | |
require'feline'.setup { | |
} | |
require('nvim-web-devicons').setup() | |
require('gitsigns').setup{} | |
local lspconfig = require('lspconfig') | |
lspconfig.tsserver.setup { | |
on_attach = on_attach, | |
} | |
require('py_lsp').setup{} | |
require("lsp_lines").setup{} | |
-- from https://github.com/simrat39/rust-tools.nvim | |
require('rust-tools').setup { | |
tools = { | |
autoSetHints = true, | |
hover_with_actions = true, | |
inlay_hints = { | |
only_current_line = true, | |
only_current_line_autocmd = "CursorHold", | |
show_parameter_hints = true, | |
show_variable_name = true, | |
parameter_hints_prefix = "<- ", | |
other_hints_prefix = "=> ", | |
max_len_align = false, | |
max_len_align_padding = 1, | |
right_align = false, | |
right_align_padding = 7, | |
highlight = "Comment", | |
}, | |
}, | |
server = { | |
on_attach = on_attach, | |
flags = { | |
debounce_text_changes = 150, | |
}, | |
capabilities = require('cmp_nvim_lsp').update_capabilities(vim.lsp.protocol.make_client_capabilities()), | |
settings = { | |
["rust-analyzer"] = { | |
cargo = { | |
allFeatures = true, | |
autoreload = true, | |
runBuildScripts = true, | |
}, | |
checkOnSave = { | |
command = "clippy", | |
enable = true, | |
}, | |
completion = { | |
autoimport = { | |
enable = true, | |
}, | |
postfix = { | |
enable = false, | |
}, | |
}, | |
diagnostics = { | |
disabled = {"macro-error"}, | |
}, | |
procMacro = { | |
enable = true, | |
}, | |
rustcSource = "discover", | |
updates = { | |
channel = "nightly", | |
}, | |
}, | |
}, | |
} | |
} | |
require('dressing').setup({ | |
input = { | |
-- Set to false to disable the vim.ui.input implementation | |
enabled = true, | |
-- Default prompt string | |
default_prompt = "Input:", | |
-- Can be 'left', 'right', or 'center' | |
prompt_align = "left", | |
-- When true, <Esc> will close the modal | |
insert_only = true, | |
-- These are passed to nvim_open_win | |
anchor = "SW", | |
border = "rounded", | |
-- 'editor' and 'win' will default to being centered | |
relative = "cursor", | |
-- These can be integers or a float between 0 and 1 (e.g. 0.4 for 40%) | |
prefer_width = 40, | |
width = nil, | |
-- min_width and max_width can be a list of mixed types. | |
-- min_width = {20, 0.2} means "the greater of 20 columns or 20% of total" | |
max_width = { 140, 0.9 }, | |
min_width = { 20, 0.2 }, | |
-- Window transparency (0-100) | |
winblend = 10, | |
-- Change default highlight groups (see :help winhl) | |
winhighlight = "", | |
override = function(conf) | |
-- This is the config that will be passed to nvim_open_win. | |
-- Change values here to customize the layout | |
return conf | |
end, | |
-- see :help dressing_get_config | |
get_config = nil, | |
}, | |
select = { | |
-- Set to false to disable the vim.ui.select implementation | |
enabled = true, | |
-- Priority list of preferred vim.select implementations | |
backend = { "telescope", "fzf_lua", "fzf", "builtin", "nui" }, | |
-- Options for telescope selector | |
-- These are passed into the telescope picker directly. Can be used like: | |
-- telescope = require('telescope.themes').get_ivy({...}) | |
telescope = nil, | |
-- Options for fzf selector | |
fzf = { | |
window = { | |
width = 0.5, | |
height = 0.4, | |
}, | |
}, | |
-- Options for fzf_lua selector | |
fzf_lua = { | |
winopts = { | |
width = 0.5, | |
height = 0.4, | |
}, | |
}, | |
-- Options for nui Menu | |
nui = { | |
position = "50%", | |
size = nil, | |
relative = "editor", | |
border = { | |
style = "rounded", | |
}, | |
max_width = 80, | |
max_height = 40, | |
}, | |
-- Options for built-in selector | |
builtin = { | |
-- These are passed to nvim_open_win | |
anchor = "NW", | |
border = "rounded", | |
-- 'editor' and 'win' will default to being centered | |
relative = "editor", | |
-- Window transparency (0-100) | |
winblend = 10, | |
-- Change default highlight groups (see :help winhl) | |
winhighlight = "", | |
-- These can be integers or a float between 0 and 1 (e.g. 0.4 for 40%) | |
-- the min_ and max_ options can be a list of mixed types. | |
-- max_width = {140, 0.8} means "the lesser of 140 columns or 80% of total" | |
width = nil, | |
max_width = { 140, 0.8 }, | |
min_width = { 40, 0.2 }, | |
height = nil, | |
max_height = 0.9, | |
min_height = { 10, 0.2 }, | |
override = function(conf) | |
-- This is the config that will be passed to nvim_open_win. | |
-- Change values here to customize the layout | |
return conf | |
end, | |
}, | |
-- Used to override format_item. See :help dressing-format | |
format_item_override = {}, | |
-- see :help dressing_get_config | |
get_config = nil, | |
}, | |
}) | |
-- This is your opts table | |
require("telescope").setup { | |
extensions = { | |
["ui-select"] = { | |
require("telescope.themes").get_dropdown { | |
-- even more opts | |
} | |
-- pseudo code / specification for writing custom displays, like the one | |
-- for "codeactions" | |
-- specific_opts = { | |
-- [kind] = { | |
-- make_indexed = function(items) -> indexed_items, width, | |
-- make_displayer = function(widths) -> displayer | |
-- make_display = function(displayer) -> function(e) | |
-- make_ordinal = function(e) -> string | |
-- }, | |
-- -- for example to disable the custom builtin "codeactions" display | |
-- do the following | |
-- codeactions = false, | |
-- } | |
} | |
} | |
} | |
-- To get ui-select loaded and working with telescope, you need to call | |
-- load_extension, somewhere after setup function: | |
require("telescope").load_extension("ui-select") | |
END | |
" Setup Completion | |
" See https://github.com/hrsh7th/nvim-cmp#basic-configuration | |
lua <<EOF | |
local cmp = require'cmp' | |
cmp.setup({ | |
-- Enable LSP snippets | |
snippet = { | |
expand = function(args) | |
vim.fn["vsnip#anonymous"](args.body) | |
end, | |
}, | |
mapping = { | |
['<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), | |
['<C-Space>'] = cmp.mapping.complete(), | |
['<C-e>'] = cmp.mapping.close(), | |
['<CR>'] = cmp.mapping.confirm({ | |
behavior = cmp.ConfirmBehavior.Insert, | |
select = true, | |
}) | |
}, | |
-- Installed sources | |
sources = { | |
{ name = 'nvim_lsp' }, | |
{ name = 'vsnip' }, | |
{ name = 'path' }, | |
{ name = 'buffer' }, | |
}, | |
}) | |
EOF | |
function! PasteFromSystemClipboard() | |
let os = system("uname") | |
if os == "Linux" | |
read !xclip -selection clipboard -out | |
else | |
execute "normal! \<esc>o\<esc>\"+]p" | |
end | |
endfunction | |
nnoremap <leader>p :call PasteFromSystemClipboard()<cr> | |
nnoremap <leader>pc :PlugClean<cr> | |
nnoremap <leader>pi :PlugInstall<cr> | |
nnoremap <leader>pu :PlugUpdate<cr> | |
nnoremap <leader>ro :split<cr>:RustOpenCargo<cr> | |
" Find files using Telescope command-line sugar. | |
nnoremap <leader>ff <cmd>Telescope find_files<cr> | |
nnoremap <leader>fg <cmd>Telescope live_grep<cr> | |
nnoremap <leader>fb <cmd>Telescope buffers<cr> | |
nnoremap <leader>fh <cmd>Telescope help_tags<cr> | |
nnoremap <leader>ld <cmd>Telescope diagnostics<cr> | |
nnoremap <leader>ls <cmd>Telescope lsp_dynamic_workspace_symbols<cr> | |
nnoremap <leader>la <cmd>lua vim.lsp.buf.code_action()<cr> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment