From 0c446121ba1f1653a0d984068209429e8cc453fb Mon Sep 17 00:00:00 2001 From: Alec Goncharow Date: Fri, 24 Feb 2023 23:20:34 -0600 Subject: out of the frying pan into the fire --- .config/nvim/init.lua | 6 + .config/nvim/init.vim | 361 -------------------------------------- .config/nvim/lua/autocomplete.lua | 22 +++ .config/nvim/lua/lsp.lua | 47 +++++ .config/nvim/lua/mappings.lua | 60 +++++++ .config/nvim/lua/plugins.lua | 78 ++++++++ .config/nvim/lua/powerline.lua | 47 +++++ .config/nvim/lua/settings.lua | 88 ++++++++++ 8 files changed, 348 insertions(+), 361 deletions(-) create mode 100644 .config/nvim/init.lua delete mode 100644 .config/nvim/init.vim create mode 100644 .config/nvim/lua/autocomplete.lua create mode 100644 .config/nvim/lua/lsp.lua create mode 100644 .config/nvim/lua/mappings.lua create mode 100644 .config/nvim/lua/plugins.lua create mode 100644 .config/nvim/lua/powerline.lua create mode 100644 .config/nvim/lua/settings.lua diff --git a/.config/nvim/init.lua b/.config/nvim/init.lua new file mode 100644 index 0000000..549285c --- /dev/null +++ b/.config/nvim/init.lua @@ -0,0 +1,6 @@ +require('plugins') +require('settings') +require('mappings') +require('lsp') +require('autocomplete') +require('powerline') diff --git a/.config/nvim/init.vim b/.config/nvim/init.vim deleted file mode 100644 index 64ae501..0000000 --- a/.config/nvim/init.vim +++ /dev/null @@ -1,361 +0,0 @@ -set nocompatible " be iMproved, required -" auto-install vim-plug -if empty(glob('~/.config/nvim/autoload/plug.vim')) - silent !curl -fLo ~/.config/nvim/autoload/plug.vim --create-dirs \ - https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim - autocmd VimEnter * PlugInstall -endif -call plug#begin('~/.config/nvim/plugged') - -Plug 'neoclide/coc.nvim', {'branch': 'release'} -" rust lang -Plug 'rust-lang/rust.vim' -" go -Plug 'fatih/vim-go', { 'do': ':GoUpdateBinaries' } -" linting -" Plug 'dense-analysis/ale' -"C++ Highlighting -Plug 'octol/vim-cpp-enhanced-highlight' -"GLSL -Plug 'tikhomirov/vim-glsl' -" latex -Plug 'lervag/vimtex' -Plug 'morhetz/gruvbox' - -Plug 'psliwka/vim-smoothie' - -Plug 'vim-airline/vim-airline' -Plug 'vim-airline/vim-airline-themes' - -Plug 'edkolev/tmuxline.vim' - -" make searching less annoying -Plug 'romainl/vim-cool' - -" :) -Plug 'jasonccox/vim-wayland-clipboard' -Plug 'lambdalisue/suda.vim' - - -call plug#end() - -filetype plugin indent on " required -" To ignore plugin indent changes, instead use: -"filetype plugin on -" -" Brief help -" :PluginList - lists configured plugins -" :PluginInstall - installs plugins; append `!` to update or just :PluginUpdate -" :PluginSearch foo - searches for foo; append `!` to refresh local cache -" :PluginClean - confirms removal of unused plugins; append `!` to auto-approve removal -" -" see :h vundle for more details or wiki for FAQ -" Put your non-Plugin stuff after this line -" -colorscheme gruvbox - -hi clear SignColumn - -set textwidth=80 -au BufRead,BufNewFile *.html,*.py,*.json,*.yaml set textwidth=0 - -set clipboard+=unnamedplus -" " Copy to clipboard -vnoremap y "+y -nnoremap Y "+yg_ -nnoremap y "+y -nnoremap yy "+yy - -" " Paste from clipboard -nnoremap p "+p -nnoremap P "+P -vnoremap p "+p -vnoremap P "+P - -"python with virtualenv support -py3 << EOF -import os -import sys -if 'VIRTUAL_ENV' in os.environ: - project_base_dir = os.environ['VIRTUAL_ENV'] - activate_this = os.path.join(project_base_dir, 'bin/activate_this.py') - execfile(activate_this, dict(__file__=activate_this)) -EOF - -" ##################################################################### -" ##################################################################### -" ##################################################################### -" ########################## COC STUFF ################################ -" ##################################################################### -" ##################################################################### -" ##################################################################### - -" Use tab for trigger completion with characters ahead and navigate. -" NOTE: There's always complete item selected by default, you may want to enable -" no select by `"suggest.noselect": true` in your configuration file. -" NOTE: Use command ':verbose imap ' to make sure tab is not mapped by -" other plugin before putting this into your config. -inoremap - \ coc#pum#visible() ? coc#pum#next(1) : - \ CheckBackspace() ? "\" : - \ coc#refresh() -inoremap coc#pum#visible() ? coc#pum#prev(1) : "\" - -" Make to accept selected completion item or notify coc.nvim to format -" u breaks current undo, please make your own choice. -inoremap coc#pum#visible() ? coc#pum#confirm() - \: "\u\\=coc#on_enter()\" - -function! CheckBackspace() abort - let col = col('.') - 1 - return !col || getline('.')[col - 1] =~# '\s' -endfunction - -" Use to trigger completion. -if has('nvim') - inoremap coc#refresh() -else - inoremap coc#refresh() -endif - -" Use `[g` and `]g` to navigate diagnostics -" Use `:CocDiagnostics` to get all diagnostics of current buffer in location list. -nmap [g (coc-diagnostic-prev) -nmap ]g (coc-diagnostic-next) - -" GoTo code navigation. -nmap gd (coc-definition) -nmap gy (coc-type-definition) -nmap gi (coc-implementation) -nmap gr (coc-references) - -" Use K to show documentation in preview window. -nnoremap K :call ShowDocumentation() - -function! ShowDocumentation() - if CocAction('hasProvider', 'hover') - call CocActionAsync('doHover') - else - call feedkeys('K', 'in') - endif -endfunction - -" Highlight the symbol and its references when holding the cursor. -autocmd CursorHold * silent call CocActionAsync('highlight') - -" Symbol renaming. -nmap rn (coc-rename) - -" Formatting selected code. -xmap f (coc-format-selected) -nmap f (coc-format-selected) - -augroup mygroup - autocmd! - " Setup formatexpr specified filetype(s). - autocmd FileType typescript,json setl formatexpr=CocAction('formatSelected') - " Update signature help on jump placeholder. - autocmd User CocJumpPlaceholder call CocActionAsync('showSignatureHelp') -augroup end - -" Applying code actions to the selected code block. -" Example: `aap` for current paragraph -xmap a (coc-codeaction-selected) -nmap a (coc-codeaction-selected) - -" Remap keys for apply code actions at the cursor position. -nmap ac (coc-codeaction-cursor) -" Remap keys for apply code actions affect whole buffer. -nmap as (coc-codeaction-source) -" Apply the most preferred quickfix action to fix diagnostic on the current line. -nmap qf (coc-fix-current) - -" Remap keys for apply refactor code actions. -nmap re (coc-codeaction-refactor) -xmap r (coc-codeaction-refactor-selected) -nmap r (coc-codeaction-refactor-selected) - -" Run the Code Lens action on the current line. -nmap cl (coc-codelens-action) - -" Map function and class text objects -" NOTE: Requires 'textDocument.documentSymbol' support from the language server. -xmap if (coc-funcobj-i) -omap if (coc-funcobj-i) -xmap af (coc-funcobj-a) -omap af (coc-funcobj-a) -xmap ic (coc-classobj-i) -omap ic (coc-classobj-i) -xmap ac (coc-classobj-a) -omap ac (coc-classobj-a) - -" Remap and for scroll float windows/popups. -if has('nvim-0.4.0') || has('patch-8.2.0750') - nnoremap coc#float#has_scroll() ? coc#float#scroll(1) : "\" - nnoremap coc#float#has_scroll() ? coc#float#scroll(0) : "\" - inoremap coc#float#has_scroll() ? "\=coc#float#scroll(1)\" : "\" - inoremap coc#float#has_scroll() ? "\=coc#float#scroll(0)\" : "\" - vnoremap coc#float#has_scroll() ? coc#float#scroll(1) : "\" - vnoremap coc#float#has_scroll() ? coc#float#scroll(0) : "\" -endif - -" Use CTRL-S for selections ranges. -" Requires 'textDocument/selectionRange' support of language server. -nmap (coc-range-select) -xmap (coc-range-select) - -" Add `:Format` command to format current buffer. -command! -nargs=0 Format :call CocActionAsync('format') - -" Add `:Fold` command to fold current buffer. -command! -nargs=? Fold :call CocAction('fold', ) - -" Add `:OR` command for organize imports of the current buffer. -command! -nargs=0 OR :call CocActionAsync('runCommand', 'editor.action.organizeImport') - -" Add (Neo)Vim's native statusline support. -" NOTE: Please see `:h coc-status` for integrations with external plugins that -" provide custom statusline: lightline.vim, vim-airline. -set statusline^=%{coc#status()}%{get(b:,'coc_current_function','')} -let g:airline#extensions#coc#enabled = 1 - -" Mappings for CoCList -" Show all diagnostics. -nnoremap a :CocList diagnostics -" Manage extensions. -nnoremap e :CocList extensions -" Show commands. -nnoremap c :CocList commands -" Find symbol of current document. -nnoremap o :CocList outline -" Search workspace symbols. -nnoremap s :CocList -I symbols -" Do default action for next item. -nnoremap j :CocNext -" Do default action for previous item. -nnoremap k :CocPrev -" Resume latest coc list. -nnoremap p :CocListResume -inoremap - \ coc#pum#visible() ? coc#pum#next(1) : - \ CheckBackspace() ? "\" : - \ coc#refresh() -inoremap coc#pum#visible() ? coc#pum#prev(1) : "\" - -" use for trigger completion -inoremap coc#refresh() - - -" ##################################################################### -" ##################################################################### -" ##################################################################### -" ##################################################################### -" ##################################################################### -" ##################################################################### - -set laststatus=2 - -map :set hlsearch! - -"nnoremap :tabprevious -"nnoremap :tabnext - -nnoremap :ls:b - -fun! TrimWhitespace() - let l:save = winsaveview() - keeppatterns %s/\s\+$//e - call winrestview(l:save) -endfun - -noremap :call TrimWhitespace() - -set hlsearch -set incsearch - -set mouse=a - -" regex by default -set magic -set smarttab - -let g:enable_bold_font = 1 - - -"------------Start Python PEP 8 stuff---------------- -" Number of spaces that a pre-existing tab is equal to. -"au BufRead,BufNewFile *.go,*.html,*py,*pyw,*.c,*.h,*.js,*.tex,*.glsl,*.java,*.ts,*.tsx,*.c,*.cpp,*.h,*.hpp set tabstop=4 - -"spaces for indents -"au BufRead,BufNewFile *.go,*.html,*.py,*.pyw,*.js,*.tex,*.glsl,*.java,*.ts,*.tsx,*.c,*.cpp,*.h,*.hpp set shiftwidth=4 -"au BufRead,BufNewFile *.go,*.html,*.py,*.pyw,*.js,*.tex,*.glsl,*.java,*.ts,*.tsx,*.c,*.cpp,*.h,*.hpp set expandtab -"au BufRead,BufNewFile *.go,*.html,*.py,*.js,*.tex,*.glsl,*.java,*.ts,*.tsx,*.c,*.cpp,*.h,*.hpp set softtabstop=4 - -au BufRead,BufNewFile * set tabstop=4 -au BufRead,BufNewFile * set shiftwidth=4 -au BufRead,BufNewFile * set expandtab -au BufRead,BufNewFile * set softtabstop=4 - -au BufRead,BufNewFile *.yaml set tabstop=2 -au BufRead,BufNewFile *.yaml set shiftwidth=2 -au BufRead,BufNewFile *.yaml set softtabstop=2 - -" Use the below highlight group when displaying bad whitespace is desired. -highlight BadWhitespace ctermbg=red guibg=red - -" Display tabs at the beginning of a line in Python mode as bad. -au BufRead,BufNewFile *.py,*.pyw match BadWhitespace /^\t\+/ -" Make trailing whitespace be flagged as bad. -au BufRead,BufNewFile *.py,*.pyw,*.c,*.h match BadWhitespace /\s\+$/ - -" Wrap text after a certain number of characters -au BufRead,BufNewFile *.py,*.pyw, set textwidth=100 - -" Use UNIX (\n) line endings. -au BufNewFile *.py,*.pyw,*.c,*.h set fileformat=unix - -" Set the default file encoding to UTF-8: -set encoding=utf-8 - -" Number of spaces that a pre-existing tab is equal to. -au BufRead,BufNewFile *.css set tabstop=2 - -"spaces for indents -au BufRead,BufNewFile *.css set shiftwidth=2 -au BufRead,BufNewFile *.css set expandtab -au BufRead,BufNewFile *.css set softtabstop=2 - -au BufRead,BufNewFile *.tex set syntax=context -set ai "auto indent -set si "smart indent -set nu - -let g:python3_host_prog = '/usr/bin/python3' -syntax on -highlight LineNr ctermfg=grey - -set backspace=indent,eol,start - -" Rust -let g:rustfmt_autosave = 1 - -let g:airline#extensions#tabline#enabled = 1 -let g:airline_powerline_fonts = 1 - -let g:go_fmt_command = "gofmt" - -let g:smoothie_experimental_mappings = 1 - -let g:airline_theme='base16_gruvbox_dark_hard' - - -" ### Transparency ### -hi Normal guibg=none ctermbg=none -hi LineNr guibg=none ctermbg=none -hi Folded guibg=none ctermbg=none -hi NonText guibg=none ctermbg=none -hi SpecialKey guibg=none ctermbg=none -hi VertSplit guibg=none ctermbg=none -hi SignColumn guibg=none ctermbg=none -hi EndOfBuffer guibg=none ctermbg=none -" #################### diff --git a/.config/nvim/lua/autocomplete.lua b/.config/nvim/lua/autocomplete.lua new file mode 100644 index 0000000..5213258 --- /dev/null +++ b/.config/nvim/lua/autocomplete.lua @@ -0,0 +1,22 @@ +local cmp = require("cmp") + +cmp.setup({ + mapping = cmp.mapping.preset.insert({ -- Preset: ^n, ^p, ^y, ^e, you know the drill.. + [""] = cmp.mapping.scroll_docs(-4), + [""] = cmp.mapping.scroll_docs(4), + }), + snippet = { + expand = function(args) + require("luasnip").lsp_expand(args.body) + end, + }, + sources = cmp.config.sources({ + { name = "nvim_lsp" }, + { name = "nvim_lsp_signature_help" }, + { name = "nvim_lua" }, + { name = "luasnip" }, + { name = "path" }, + }, { + { name = "buffer", keyword_length = 3 }, + }), +}) diff --git a/.config/nvim/lua/lsp.lua b/.config/nvim/lua/lsp.lua new file mode 100644 index 0000000..65eaedc --- /dev/null +++ b/.config/nvim/lua/lsp.lua @@ -0,0 +1,47 @@ +-- See `:help vim.diagnostic.*` for documentation on any of the below functions +local opts = { noremap=true, silent=true } +vim.keymap.set('n', 'e', vim.diagnostic.open_float, opts) +vim.keymap.set('n', '[d', vim.diagnostic.goto_prev, opts) +vim.keymap.set('n', ']d', vim.diagnostic.goto_next, opts) +vim.keymap.set('n', 'q', vim.diagnostic.setloclist, opts) + +-- 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) + -- Enable completion triggered by + vim.api.nvim_buf_set_option(bufnr, "formatexpr", "v:lua.vim.lsp.formatexpr()") + vim.api.nvim_buf_set_option(bufnr, "omnifunc", "v:lua.vim.lsp.omnifunc") + vim.api.nvim_buf_set_option(bufnr, "tagfunc", "v:lua.vim.lsp.tagfunc") + + -- Mappings. + -- See `:help vim.lsp.*` for documentation on any of the below functions + local bufopts = { noremap=true, silent=true, buffer=bufnr } + vim.keymap.set('n', 'gD', vim.lsp.buf.declaration, bufopts) + vim.keymap.set('n', 'gd', vim.lsp.buf.definition, bufopts) + vim.keymap.set('n', 'K', vim.lsp.buf.hover, bufopts) + vim.keymap.set('n', 'gi', vim.lsp.buf.implementation, bufopts) + vim.keymap.set('n', '', vim.lsp.buf.signature_help, bufopts) + vim.keymap.set('n', 'wa', vim.lsp.buf.add_workspace_folder, bufopts) + vim.keymap.set('n', 'wr', vim.lsp.buf.remove_workspace_folder, bufopts) + vim.keymap.set('n', 'wl', function() + print(vim.inspect(vim.lsp.buf.list_workspace_folders())) + end, bufopts) + vim.keymap.set('n', 'D', vim.lsp.buf.type_definition, bufopts) + vim.keymap.set('n', 'rn', vim.lsp.buf.rename, bufopts) + vim.keymap.set('n', 'ca', vim.lsp.buf.code_action, bufopts) + vim.keymap.set('n', 'gr', vim.lsp.buf.references, bufopts) + vim.keymap.set('n', 'f', function() vim.lsp.buf.format { async = true } end, bufopts) +end +-- Setup buffer-local keymaps / options for LSP buffers +local capabilities = require("cmp_nvim_lsp").default_capabilities() +-- Setup rust_analyzer via rust-tools.nvim +require("rust-tools").setup({ + server = { + capabilities = capabilities, + on_attach = on_attach, + } +}) + + +-- local autocmd = vim.api.nvim_create_autocmd +-- autocmd({ "BufLeave" }, { pattern = { "*" }, command = "if &buftype == 'quickfix'|q|endif" }) diff --git a/.config/nvim/lua/mappings.lua b/.config/nvim/lua/mappings.lua new file mode 100644 index 0000000..5a0050f --- /dev/null +++ b/.config/nvim/lua/mappings.lua @@ -0,0 +1,60 @@ +-- https://github.com/arnvald/viml-to-lua/blob/main/lua/mappings.lua +vim.cmd('noremap :noh:call clearmatches()') -- clear matches Ctrl+b + +function map(mode, shortcut, command) + vim.api.nvim_set_keymap(mode, shortcut, command, { noremap = true, silent = true }) +end + +function nmap(shortcut, command) + map('n', shortcut, command) +end + +function imap(shortcut, command) + map('i', shortcut, command) +end + +function vmap(shortcut, command) + map('v', shortcut, command) +end + +function cmap(shortcut, command) + map('c', shortcut, command) +end + +function tmap(shortcut, command) + map('t', shortcut, command) +end + + +-- PLUGINS +-- Keymaps for Luasnip +local ls = require("luasnip") +vim.keymap.set({ "i", "s" }, "", function() + if ls.expand_or_jumpable() then + ls.expand_or_jump() + end +end, { silent = true }) + +vim.keymap.set({ "i", "s" }, "", function() + if ls.jumpable(-1) then + ls.jump(-1) + end +end, { silent = true }) + +vim.keymap.set("i", "", function() + if ls.choice_active() then + ls.change_choice(1) + end +end) + +-- Find files using Telescope command-line sugar. +nmap("", "Telescope find_files") +nmap("f", "Telescope live_grep") +nmap("bb", "Telescope buffers") +nmap("hh", "Telescope help_tags") + +-- LSP +nmap('K', 'Lspsaga hover_doc') +imap('', 'Lspsaga hover_doc') +nmap('gh', 'Lspsaga lsp_finder') +nmap('', 'Lspsaga show_line_diagnostics') diff --git a/.config/nvim/lua/plugins.lua b/.config/nvim/lua/plugins.lua new file mode 100644 index 0000000..165139e --- /dev/null +++ b/.config/nvim/lua/plugins.lua @@ -0,0 +1,78 @@ +-- sourced from https://github.com/arnvald/viml-to-lua/blob/main/lua/plugins.lua + +return require('packer').startup(function() + use 'wbthomason/packer.nvim' + + use 'morhetz/gruvbox' + use 'psliwka/vim-smoothie' + use 'edkolev/tmuxline.vim' + use 'romainl/vim-cool' + + -- common + use 'tpope/vim-fugitive' -- Git commands + use { + 'nvim-lualine/lualine.nvim', + requires = { 'kyazdani42/nvim-web-devicons', opt = true } + } + use 'rhysd/vim-grammarous' -- grammar check + use 'andymass/vim-matchup' -- matching parens and more + use 'rhysd/git-messenger.vim' + + + -- better quickfix buffer + use {'kevinhwang91/nvim-bqf', + ft = 'qf', + config = function() + require("bqf").setup { + -- your configuration comes here + -- or leave it empty to use the default settings + -- refer to the configuration section below + } + end + } + + + -- general dev + use 'neovim/nvim-lspconfig' + use 'kabouzeid/nvim-lspinstall' + use 'glepnir/lspsaga.nvim' + use 'hrsh7th/nvim-cmp' + use 'hrsh7th/cmp-buffer' + use 'hrsh7th/cmp-nvim-lua' + use 'hrsh7th/cmp-nvim-lsp' + use 'hrsh7th/cmp-nvim-lsp-signature-help' + use "hrsh7th/cmp-path" + use 'L3MON4D3/LuaSnip' + use { 'nvim-treesitter/nvim-treesitter', run = ':TSUpdate' } + use 'scrooloose/nerdcommenter' -- commenting shortcuts + use { + "folke/which-key.nvim", + config = function() + vim.o.timeout = true + vim.o.timeoutlen = 300 + require("which-key").setup { + -- your configuration comes here + -- or leave it empty to use the default settings + -- refer to the configuration section below + } + end +} + + -- search + use { 'nvim-telescope/telescope.nvim', requires = {{'nvim-lua/popup.nvim'}, {'nvim-lua/plenary.nvim'}} } + use 'tpope/vim-eunuch' -- wrappers UNIX commands + use 'tpope/vim-surround' -- surround characters shortcuts + use 'tpope/vim-vinegar' -- file browser + use 'kyazdani42/nvim-web-devicons' -- icons when searching + + -- go + use 'fatih/vim-go' + + -- rust + use 'rust-lang/rust.vim' + use 'simrat39/rust-tools.nvim' + + -- debugging + use 'nvim-lua/plenary.nvim' + use 'mfussenegger/nvim-dap' +end) diff --git a/.config/nvim/lua/powerline.lua b/.config/nvim/lua/powerline.lua new file mode 100644 index 0000000..5bee6be --- /dev/null +++ b/.config/nvim/lua/powerline.lua @@ -0,0 +1,47 @@ +require('lualine').setup { + options = { + icons_enabled = true, + theme = 'gruvbox_dark', + component_separators = { left = '', right = ''}, + section_separators = { left = '', right = ''}, + disabled_filetypes = { + statusline = {}, + winbar = {}, + }, + ignore_focus = {}, + always_divide_middle = true, + globalstatus = false, + refresh = { + statusline = 1000, + tabline = 1000, + winbar = 1000, + } + }, + sections = { + lualine_a = {'mode'}, + lualine_b = {'branch', 'diff', 'diagnostics'}, + lualine_c = {'filename'}, + lualine_x = {'encoding', 'fileformat', 'filetype'}, + lualine_y = {'progress'}, + lualine_z = {'location'} + }, + inactive_sections = { + lualine_a = {}, + lualine_b = {}, + lualine_c = {'filename'}, + lualine_x = {'location'}, + lualine_y = {}, + lualine_z = {} + }, + tabline = { + lualine_a = {'buffers'}, + lualine_b = {'branch'}, + lualine_c = {}, + lualine_x = {}, + lualine_y = {}, + lualine_z = {'tabs'} + }, + winbar = {}, + inactive_winbar = {}, + extensions = {} +} diff --git a/.config/nvim/lua/settings.lua b/.config/nvim/lua/settings.lua new file mode 100644 index 0000000..cae0968 --- /dev/null +++ b/.config/nvim/lua/settings.lua @@ -0,0 +1,88 @@ +HOME = os.getenv("HOME") + +vim.g.mapleader = ' ' + +-- basic settings +vim.o.encoding = "utf-8" +vim.o.backspace = "indent,eol,start" -- backspace works on every char in insert mode +vim.o.completeopt = 'menuone,noselect' +vim.o.history = 1000 +vim.o.dictionary = '/usr/share/dict/words' +vim.o.startofline = true + +-- Mapping waiting time +vim.o.timeout = false +vim.o.ttimeout = true +vim.o.ttimeoutlen = 100 + +-- Display +vim.o.showmatch = true -- show matching brackets +vim.o.scrolloff = 3 -- always show 3 rows from edge of the screen +vim.o.synmaxcol = 300 -- stop syntax highlight after x lines for performance +vim.o.laststatus = 2 -- always show status line + +vim.o.list = false -- do not display white characters +vim.o.foldenable = false +vim.o.foldlevel = 4 -- limit folding to 4 levels +vim.o.foldmethod = 'syntax' -- use language syntax to generate folds +vim.o.wrap = false --do not wrap lines even if very long +vim.o.eol = false -- show if there's no eol char +vim.o.showbreak= '↪' -- character to show when line is broken + +-- Sidebar +vim.o.number = true -- line number on the left +vim.o.numberwidth = 3 -- always reserve 3 spaces for line number +vim.o.signcolumn = 'yes' -- keep 1 column for coc.vim check +vim.o.modelines = 0 +vim.o.showcmd = true -- display command in bottom bar + +-- Search +vim.o.incsearch = true -- starts searching as soon as typing, without enter needed +vim.o.ignorecase = true -- ignore letter case when searching +vim.o.smartcase = true -- case insentive unless capitals used in search + +vim.o.matchtime = 2 -- delay before showing matching paren +vim.o.mps = vim.o.mps .. ",<:>" + +-- White characters +vim.o.autoindent = true +vim.o.smartindent = true +vim.o.tabstop = 2 -- 1 tab = 2 spaces +vim.o.shiftwidth = 2 -- indentation rule +vim.o.formatoptions = 'qnj1' -- q - comment formatting; n - numbered lists; j - remove comment when joining lines; 1 - don't break after one-letter word +vim.o.expandtab = true -- expand tab to spaces + +-- Backup files +vim.o.backup = true -- use backup files +vim.o.writebackup = false +vim.o.swapfile = false -- do not use swap file +vim.o.undodir = HOME .. '/.vim/tmp/undo//' -- undo files +vim.o.backupdir = HOME .. '/.vim/tmp/backup//' -- backups +vim.o.directory = '/.vim/tmp/swap//' -- swap files + +vim.cmd([[ + + + au FileType python set ts=4 sw=4 + au BufRead,BufNewFile *.md set ft=mkd tw=80 syntax=markdown + au BufRead,BufNewFile *.ppmd set ft=mkd tw=80 syntax=markdown + au BufRead,BufNewFile *.markdown set ft=mkd tw=80 syntax=markdown + au BufRead,BufNewFile *.slimbars set syntax=slim +]]) + +vim.cmd('colorscheme gruvbox') +vim.cmd([[ +" ### Transparency ### +hi Normal guibg=none ctermbg=none +hi LineNr guibg=none ctermbg=none +hi Folded guibg=none ctermbg=none +hi NonText guibg=none ctermbg=none +hi SpecialKey guibg=none ctermbg=none +hi VertSplit guibg=none ctermbg=none +hi SignColumn guibg=none ctermbg=none +hi EndOfBuffer guibg=none ctermbg=none +]]) + +-- Commands mode +vim.o.wildmenu = true -- on TAB, complete options for system command +vim.o.wildignore = 'deps,.svn,CVS,.git,.hg,*.o,*.a,*.class,*.mo,*.la,*.so,*.obj,*.swp,*.jpg,*.png,*.xpm,*.gif,.DS_Store,*.aux,*.out,*.toc' -- cgit v1.2.3-70-g09d2