call plug#begin('~/.config/nvim/autoload/plugged') Plug 'junegunn/vim-easy-align' Plug 'ntpeters/vim-better-whitespace' Plug 'itchyny/vim-gitbranch' Plug 'airblade/vim-gitgutter' Plug 'junegunn/fzf', { 'do': { -> fzf#install() } } Plug 'junegunn/fzf.vim' Plug 'vim-airline/vim-airline' Plug 'vim-airline/vim-airline-themes' Plug 'kyazdani42/nvim-web-devicons' Plug 'kyazdani42/nvim-tree.lua' Plug 'svermeulen/vimpeccable' Plug 'NoahTheDuke/vim-just' Plug 'dewyze/vim-tada' Plug 'neovim/nvim-lspconfig' Plug 'nvim-treesitter/nvim-treesitter', {'do': 'TSUpdate'} call plug#end() set nocompatible set history=1000 set title set encoding=utf-8 set scrolloff=3 set ttyfast set laststatus=2 set ff=unix set number set tabstop=2 set shiftwidth=2 set softtabstop=2 set nojoinspaces set expandtab set listchars=tab:>-,trail:- set list set noshowmode set hlsearch set incsearch set termguicolors set visualbell set noerrorbells set whichwrap=<,>,[,],b, set backspace=indent,eol,start set number set autoread set nobackup set nowritebackup set nowb set noswapfile set background=light let mapleader = " " " TextEdit might fail if hidden is not set. set hidden " Having longer updatetime (default is 4000 ms = 4 s) leads to noticeable " delays and poor user experience. set updatetime=300 " Don't pass messages to |ins-completion-menu|. set shortmess+=c syntax on filetype on filetype plugin on filetype plugin indent on autocmd FileType make set noexpandtab shiftwidth=8 softtabstop=0 autocmd FileType rust set shiftwidth=4 softtabstop=4 tabstop=4 autocmd FileType terraform set expandtab autocmd FileType html set shiftwidth=4 softtabstop=4 tabstop=4 autocmd FileType javascript set shiftwidth=4 softtabstop=4 tabstop=4 autocmd FileType htmldjango set shiftwidth=4 softtabstop=4 tabstop=4 autocmd FileType just set shiftwidth=4 softtabstop=4 tabstop=4 autocmd BufNewFile,BufRead *.tera set syntax=django " autocmd BufNewFile,BufRead justfile setf make expandtab shiftwidth=8 softtabstop=0 autocmd FileType *.md set expandtab " Center screen when scrolling search results nmap n nzz nmap N Nzz " colorscheme solarized let g:airline_powerline_fonts=1 let g:airline_theme='owo' let g:airline_theme='cobalt2' let g:airline#extensions#tabline#enabled = 1 noremap :bp noremap :bn set pastetoggle= " highlight trailing whitespace highlight ExtraWhitespace ctermbg=lightblue guibg=lightblue match ExtraWhitespace /\s\+$/ autocmd BufWinEnter * match ExtraWhitespace /\s\+$/ autocmd InsertEnter * match ExtraWhitespace /\s\+\%#\@(EasyAlign) " Start interactive EasyAlign for a motion/text object (e.g. gaip) nmap ga (EasyAlign) nnoremap 1 :source ~/.config/nvim/init.vim \| :PlugInstall map s :StripWhitespace nnoremap g :Rg nnoremap f :Files nnoremap l :Buffers nnoremap :call SetNewPassword() function! SetNewPassword() let cur_word = expand('') let cmd = 'pwgen ' . strlen(cur_word) . ' 1' let new_password = system(cmd)[:-2] " Replace current word with a new random password of the same length call setline(line('.'), substitute(getline('.'), cur_word, new_password, "")) endfunction " Relative numbering function! NumberToggle() if(&relativenumber == 1) set nornu set number else set rnu endif endfunc " Toggle between normal and relative numbering. noremap :call NumberToggle() " File Browser nnoremap e :NvimTreeToggle nnoremap r :NvimTreeRefresh let g:fzf_layout = { 'window': { 'width': 0.9, 'height': 0.7 } } lua << EOF require("nvim-tree").setup({ sort_by = "case_sensitive", view = { adaptive_size = true, mappings = { list = { { key = "u", action = "dir_up" }, }, }, }, renderer = { group_empty = true, highlight_git = true, }, filters = { dotfiles = true, }, actions = { open_file = { quit_on_open = true, }, }, }) EOF lua << EOF require('nvim-treesitter.configs').setup { highlight = { enable = true, disable = {}, }, indent = { enable = false, disable = {}, }, ensure_installed = { "tsx", "typescript", "bash", "vim", "json", "yaml", "html", "css", "scss", "lua", "ruby", "rust", } } local parser_config = require "nvim-treesitter.parsers".get_parser_configs() -- parser_config.tsx.parser_to_fil = { "javascript", "typescript.tsx" } EOF lua << EOF local nvim_lsp = require('lspconfig') local protocol = require('vim.lsp.protocol') 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 -- Mappings local opts = { noremap = true, silent = true } buf_set_keymap('n', 'gd', 'lua vim.lsp.buf.definition()', opts) buf_set_keymap('n', 'gD', 'lua vim.lsp.buf.declaration()', opts) buf_set_keymap('n', 'K', 'lua vim.lsp.buf.hover()', opts) buf_set_keymap('n', 'gi', 'lua vim.lsp.buf.implementation()', opts) --buf_set_keymap('i', '', 'lua vim.lsp.buf.signature_help()', opts) buf_set_keymap('n', 'lwa', 'lua vim.lsp.buf.add_workspace_folder()', opts) buf_set_keymap('n', 'lwr', 'lua vim.lsp.buf.remove_workspace_folder()', opts) buf_set_keymap('n', 'lwl', 'lua print(vim.inspect(vim.lsp.buf.list_workspace_folders()))', opts) buf_set_keymap('n', 'rn', 'lua vim.lsp.buf.rename()', opts) buf_set_keymap('n', 'ca', 'lua vim.lsp.buf.code_action()', opts) buf_set_keymap('n', 'gr', 'lua vim.lsp.buf.references()', opts) buf_set_keymap('n', 'd', 'lua vim.lsp.diagnostic.show_line_diagnostics()', opts) --buf_set_keymap('n', '', 'lua vim.lsp.diagnostic.goto_prev()', opts) buf_set_keymap('n', 'lgn', 'lua vim.lsp.diagnostic.goto_next()', opts) buf_set_keymap('n', 'q', 'lua vim.lsp.diagnostic.set_loclist()', opts) buf_set_keymap("n", "f", "lua vim.lsp.buf.formatting()", opts) buf_set_keymap('n', 'td', 'lua vim.lsp.buf.type_definition()', opts) --if client.name == 'tsserver' then -- client.resolved_capabilities.document_formatting = false --end if client.resolved_capabilities.document_formatting then vim.api.nvim_command [[augroup Format]] vim.api.nvim_command [[autocmd! * ]] vim.api.nvim_command [[autocmd BufWritePre lua vim.lsp.buf.formatting_seq_sync()]] vim.api.nvim_command [[augroup END]] end protocol.CompletionItemKind = { '', -- Text '', -- Method '', -- Function '', -- Constructor '', -- Field '', -- Variable '', -- Class 'ﰮ', -- Interface '', -- Module '', -- Property '', -- Unit '', -- Value '', -- Enum '', -- Keyword '﬌', -- Snippet '', -- Color '', -- File '', -- Reference '', -- Folder '', -- EnumMember '', -- Constant '', -- Struct '', -- Event 'ﬦ', -- Operator '', -- TypeParameter } end nvim_lsp.tsserver.setup { on_attach = on_attach, filetypes = { "typescript", "typescriptreact", "typescript.tsx" } } nvim_lsp.solargraph.setup { on_attach = on_attach, flags = { debounce_text_changes = 150, } } EOF