From 03d3e82120afd3f5137babb77a558a9e5b4bef02 Mon Sep 17 00:00:00 2001 From: nazrin Date: Fri, 6 Dec 2024 02:50:46 +0000 Subject: [PATCH] init --- .gitignore | 6 ++ coc-settings.json | 50 ++++++++++ init.lua | 8 ++ keys.lua | 55 +++++++++++ options.lua | 40 ++++++++ plugins.lua | 231 ++++++++++++++++++++++++++++++++++++++++++++++ theme.lua | 54 +++++++++++ 7 files changed, 444 insertions(+) create mode 100644 .gitignore create mode 100644 coc-settings.json create mode 100644 init.lua create mode 100644 keys.lua create mode 100644 options.lua create mode 100644 plugins.lua create mode 100644 theme.lua diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1f92fe2 --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +after +backup +old +~ +after +spell diff --git a/coc-settings.json b/coc-settings.json new file mode 100644 index 0000000..4e70a34 --- /dev/null +++ b/coc-settings.json @@ -0,0 +1,50 @@ +{ + "suggest.enablePreselect": false, + "suggest.noselect": true, + "languageserver": { + "ccls": { + "command": "ccls", + "filetypes": [ + "c", + "cpp", + "objc", + "objcpp" + ], + "rootPatterns": [ + ".ccls", + "compile_commands.json", + ".vim/", + ".git/", + ".hg/" + ], + "initializationOptions": { + "cache": { + "directory": "/tmp/ccls" + } + } + }, + "julia": { + "command": "/usr/bin/julia", + "args" : [ + "--startup-file=no", "--history-file=no", "-e", + "using LanguageServer; using Pkg; import StaticLint; import SymbolServer; env_path = dirname(Pkg.Types.Context().env.project_file); server = LanguageServer.LanguageServerInstance(stdin, stdout, env_path, \"\"); server.runlinter = true; run(server);" + ], + "filetypes": ["julia"] + }, + "lua": { + "command": "lua-language-server", + "args": [], + "rootPatterns": [".git"], + "filetypes": ["lua"] + } + }, + "d.servedPath": "/usr/local/bin/serve-d", + "d.dcdServerPath": "/home/eiko/.local/share/code-d/bin/dcd-server", + "d.dcdClientPath": "/home/eiko/.local/share/code-d/bin/dcd-client", + "dscanner.ignoredKeys": [ + "dscanner.suspicious.unused_parameter", + "dscanner.style.long_line", + "dscanner.style.phobos_naming_convention", + "dscanner.style.number_literals" + ] +} diff --git a/init.lua b/init.lua new file mode 100644 index 0000000..b787a0f --- /dev/null +++ b/init.lua @@ -0,0 +1,8 @@ + +package.path = package.path .. (";%s/.config/nvim/?.lua"):format(os.getenv("HOME")) + +require "plugins" +require "options" +require "keys" +require "theme" + diff --git a/keys.lua b/keys.lua new file mode 100644 index 0000000..471dff5 --- /dev/null +++ b/keys.lua @@ -0,0 +1,55 @@ + +vim.cmd([[ + +digraphs de 916 + +nnoremap h :noh +nnoremap y "+y +nnoremap y% gg"+yG +nnoremap t :tabe +nnoremap T :tabe +nnoremap o :tabe . +vnoremap eas :'<,'>EasyAlign \ +vnoremap eae :'<,'>EasyAlign = +vnoremap eac :'<,'>EasyAlign , +vnoremap eaas :'<,'>EasyAlign *\ +vnoremap eaae :'<,'>EasyAlign *= +vnoremap eaac :'<,'>EasyAlign *, +map w + +noremap :w +inoremap :wa + +noremap gtn :tabnew +noremap gto :tabedit +noremap gtc :tabclose +noremap gT +noremap gt +noremap :tabm - +noremap :tabm + +nnoremap 1gt +nnoremap 2gt +nnoremap 3gt +nnoremap 4gt +nnoremap 5gt +nnoremap 6gt +nnoremap 7gt +nnoremap 8gt +nnoremap 9gt +nnoremap 10gt + +nnoremap ZZ :q +nnoremap ZQ :q + +noremap Y y$ + +" improve indenting +nnoremap > +onoremap > +vnoremap >gv +vnoremap < >gv + +"nnoremap gt :NvimTreeOpen +]]) + diff --git a/options.lua b/options.lua new file mode 100644 index 0000000..b02750c --- /dev/null +++ b/options.lua @@ -0,0 +1,40 @@ +vim.g.loaded_netrw = 1 +vim.g.loaded_netrwPlugin = 1 + +vim.g.mapleader = "," +vim.g.maplocalleader = ",," + +vim.opt.encoding = "utf-8" +vim.opt.nu = true +vim.opt.relativenumber = true +vim.opt.expandtab = false +vim.opt.numberwidth = 1 +vim.opt.tabstop = 4 +vim.opt.shiftwidth = 4 +vim.opt.termguicolors = true +vim.opt.splitbelow = true +vim.opt.splitright = true +vim.opt.confirm = true +vim.opt.ignorecase = true +vim.opt.smartcase = true +vim.opt.listchars = "tab:│ " +vim.opt.list = true +vim.opt.undofile = true +vim.opt.undodir = os.getenv("HOME").."/.local/nvim/undo" +vim.opt.hidden = true +-- vim.opt.formatoptions-=cro +vim.opt.foldmethod = "indent" +vim.opt.foldlevelstart = 20 +vim.opt.swapfile = false +-- vim.opt.omnifunc=syntaxcomplete#Complete +-- vim.opt.completeopt+=preview +vim.opt.cmdheight = 2 +vim.opt.updatetime = 300 +vim.opt.mouse = "" + + +vim.cmd([[ +autocmd BufRead,BufNewFile * set autoindent noexpandtab tabstop=4 shiftwidth=4 +]]) + + diff --git a/plugins.lua b/plugins.lua new file mode 100644 index 0000000..445fa0d --- /dev/null +++ b/plugins.lua @@ -0,0 +1,231 @@ + +local Plug = vim.fn["plug#"] +vim.call("plug#begin") + Plug("RRethy/vim-illuminate") + Plug("Shirk/vim-gas") + Plug("Sirsireesh/vim-dlang-phobos-highlighter") + Plug("airblade/vim-gitgutter") + Plug("frazrepo/vim-rainbow") + Plug("vim-airline/vim-airline") + Plug("vim-airline/vim-airline-themes") + Plug("junegunn/vim-easy-align") + Plug("junegunn/vim-peekaboo") + Plug("michaeljsmith/vim-indent-object") + Plug("neoclide/coc.nvim", { ['do'] = vim.fn['coc#util#install()']}) + Plug("sheerun/vim-polyglot") + Plug("tikhomirov/vim-glsl") + Plug("tomasr/molokai") + Plug("tpope/vim-commentary") + Plug("tpope/vim-eunuch") + Plug("tpope/vim-repeat") + Plug("tpope/vim-surround") + Plug("tpope/vim-fugitive") + Plug("tbastos/vim-lua") + Plug("godlygeek/tabular") + Plug("yuezk/vim-js") + Plug("ctrlpvim/ctrlp.vim") + Plug("ryanoasis/vim-webdevicons") + Plug("kylelaker/riscv.vim") + Plug("dart-lang/dart-vim-plugin") + Plug("JuliaEditorSupport/julia-vim") +vim.call("plug#end") + +vim.g["airline#extensions#tabline#enabled"] = 0 +vim.g["airline#extensions#tabline#show_close_button"] = 0 +vim.g["airline#extensions#tabline#tabs_label"] = "" +vim.g["airline#extensions#tabline#buffers_label"] = "" +vim.g["airline#extensions#tabline#formatter"] = "unique_tail_improved" +vim.g.airline_theme = "bubblegum" +vim.g.airline_powerline_fonts = 1 +vim.g.airline_skip_empty_sections = 1 +vim.g.airline_section_z = "%l:%c/%L %p%%" + +vim.g.rainbow_guifgs = { "#dddddd", "#bbbbbb", "#cccccc", "#aaaaaa" } + +do -- COC + -- Some servers have issues with backup files, see #649 + vim.opt.backup = false + vim.opt.writebackup = false + + -- Having longer updatetime (default is 4000 ms = 4s) leads to noticeable + -- delays and poor user experience + vim.opt.updatetime = 300 + + -- Always show the signcolumn, otherwise it would shift the text each time + -- diagnostics appeared/became resolved + vim.opt.signcolumn = "yes" + + local keyset = vim.keymap.set + -- Autocomplete + function _G.check_back_space() + local col = vim.fn.col('.') - 1 + return col == 0 or vim.fn.getline('.'):sub(col, col):match('%s') ~= nil + end + + -- Use Tab for trigger completion with characters ahead and navigate + -- NOTE: There's always a completion item selected by default, you may want to enable + -- no select by setting `"suggest.noselect": true` in your configuration file + -- NOTE: Use command ':verbose imap ' to make sure Tab is not mapped by + -- other plugins before putting this into your config + local opts = {silent = true, noremap = true, expr = true, replace_keycodes = false} + keyset("i", "", 'coc#pum#visible() ? coc#pum#next(1) : v:lua.check_back_space() ? "" : coc#refresh()', opts) + keyset("i", "", [[coc#pum#visible() ? coc#pum#prev(1) : "\"]], opts) + + -- Make to accept selected completion item or notify coc.nvim to format + -- u breaks current undo, please make your own choice + keyset("i", "", [[coc#pum#visible() ? coc#pum#confirm() : "\u\\=coc#on_enter()\"]], opts) + + -- Use to trigger snippets + keyset("i", "", "(coc-snippets-expand-jump)") + -- Use to trigger completion + keyset("i", "", "coc#refresh()", {silent = true, expr = true}) + + -- Use `[g` and `]g` to navigate diagnostics + -- Use `:CocDiagnostics` to get all diagnostics of current buffer in location list + keyset("n", "[g", "(coc-diagnostic-prev)", {silent = true}) + keyset("n", "]g", "(coc-diagnostic-next)", {silent = true}) + + -- GoTo code navigation + keyset("n", "gd", "(coc-definition)", {silent = true}) + keyset("n", "gy", "(coc-type-definition)", {silent = true}) + keyset("n", "gi", "(coc-implementation)", {silent = true}) + keyset("n", "gr", "(coc-references)", {silent = true}) + + + -- Use K to show documentation in preview window + function _G.show_docs() + local cw = vim.fn.expand('') + if vim.fn.index({'vim', 'help'}, vim.bo.filetype) >= 0 then + vim.api.nvim_command('h ' .. cw) + elseif vim.api.nvim_eval('coc#rpc#ready()') then + vim.fn.CocActionAsync('doHover') + else + vim.api.nvim_command('!' .. vim.o.keywordprg .. ' ' .. cw) + end + end + keyset("n", "K", 'lua _G.show_docs()', {silent = true}) + + + -- Highlight the symbol and its references on a CursorHold event(cursor is idle) + vim.api.nvim_create_augroup("CocGroup", {}) + vim.api.nvim_create_autocmd("CursorHold", { + group = "CocGroup", + command = "silent call CocActionAsync('highlight')", + desc = "Highlight symbol under cursor on CursorHold" + }) + + + -- Symbol renaming + keyset("n", "rn", "(coc-rename)", {silent = true}) + + + -- Formatting selected code + keyset("x", "f", "(coc-format-selected)", {silent = true}) + keyset("n", "f", "(coc-format-selected)", {silent = true}) + + + -- Setup formatexpr specified filetype(s) + vim.api.nvim_create_autocmd("FileType", { + group = "CocGroup", + pattern = "typescript,json", + command = "setl formatexpr=CocAction('formatSelected')", + desc = "Setup formatexpr specified filetype(s)." + }) + + -- Update signature help on jump placeholder + vim.api.nvim_create_autocmd("User", { + group = "CocGroup", + pattern = "CocJumpPlaceholder", + command = "call CocActionAsync('showSignatureHelp')", + desc = "Update signature help on jump placeholder" + }) + + -- Apply codeAction to the selected region + -- Example: `aap` for current paragraph + local opts = {silent = true, nowait = true} + keyset("x", "a", "(coc-codeaction-selected)", opts) + keyset("n", "a", "(coc-codeaction-selected)", opts) + + -- Remap keys for apply code actions at the cursor position. + keyset("n", "ac", "(coc-codeaction-cursor)", opts) + -- Remap keys for apply source code actions for current file. + keyset("n", "as", "(coc-codeaction-source)", opts) + -- Apply the most preferred quickfix action on the current line. + keyset("n", "qf", "(coc-fix-current)", opts) + + -- Remap keys for apply refactor code actions. + keyset("n", "re", "(coc-codeaction-refactor)", { silent = true }) + keyset("x", "r", "(coc-codeaction-refactor-selected)", { silent = true }) + keyset("n", "r", "(coc-codeaction-refactor-selected)", { silent = true }) + + -- Run the Code Lens actions on the current line + keyset("n", "cl", "(coc-codelens-action)", opts) + + + -- Map function and class text objects + -- NOTE: Requires 'textDocument.documentSymbol' support from the language server + keyset("x", "if", "(coc-funcobj-i)", opts) + keyset("o", "if", "(coc-funcobj-i)", opts) + keyset("x", "af", "(coc-funcobj-a)", opts) + keyset("o", "af", "(coc-funcobj-a)", opts) + keyset("x", "ic", "(coc-classobj-i)", opts) + keyset("o", "ic", "(coc-classobj-i)", opts) + keyset("x", "ac", "(coc-classobj-a)", opts) + keyset("o", "ac", "(coc-classobj-a)", opts) + + + -- Remap and to scroll float windows/popups + ---@diagnostic disable-next-line: redefined-local + local opts = {silent = true, nowait = true, expr = true} + keyset("n", "", 'coc#float#has_scroll() ? coc#float#scroll(1) : ""', opts) + keyset("n", "", 'coc#float#has_scroll() ? coc#float#scroll(0) : ""', opts) + keyset("i", "", + 'coc#float#has_scroll() ? "=coc#float#scroll(1)" : ""', opts) + keyset("i", "", + 'coc#float#has_scroll() ? "=coc#float#scroll(0)" : ""', opts) + keyset("v", "", 'coc#float#has_scroll() ? coc#float#scroll(1) : ""', opts) + keyset("v", "", 'coc#float#has_scroll() ? coc#float#scroll(0) : ""', opts) + + + -- Use CTRL-S for selections ranges + -- Requires 'textDocument/selectionRange' support of language server + keyset("n", "", "(coc-range-select)", {silent = true}) + keyset("x", "", "(coc-range-select)", {silent = true}) + + + -- Add `:Format` command to format current buffer + vim.api.nvim_create_user_command("Format", "call CocAction('format')", {}) + + -- " Add `:Fold` command to fold current buffer + vim.api.nvim_create_user_command("Fold", "call CocAction('fold', )", {nargs = '?'}) + + -- Add `:OR` command for organize imports of the current buffer + vim.api.nvim_create_user_command("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 + -- vim.opt.statusline:prepend("%{coc#status()}%{get(b:,'coc_current_function','')}") + + -- Mappings for CoCList + -- code actions and coc stuff + ---@diagnostic disable-next-line: redefined-local + local opts = {silent = true, nowait = true} + -- Show all diagnostics + keyset("n", "a", ":CocList diagnostics", opts) + -- Manage extensions + keyset("n", "e", ":CocList extensions", opts) + -- Show commands + keyset("n", "c", ":CocList commands", opts) + -- Find symbol of current document + keyset("n", "o", ":CocList outline", opts) + -- Search workspace symbols + keyset("n", "s", ":CocList -I symbols", opts) + -- Do default action for next item + keyset("n", "j", ":CocNext", opts) + -- Do default action for previous item + keyset("n", "k", ":CocPrev", opts) + -- Resume latest coc list + keyset("n", "p", ":CocListResume", opts) +end + diff --git a/theme.lua b/theme.lua new file mode 100644 index 0000000..45eb24b --- /dev/null +++ b/theme.lua @@ -0,0 +1,54 @@ +vim.cmd([[ + +function! AdaptColorscheme() + highlight clear CursorLine + highlight Normal guibg=none ctermbg=none + highlight LineNr guibg=none ctermbg=none + highlight Folded guibg=none ctermbg=none + highlight NonText guibg=none ctermbg=none + highlight SpecialKey guibg=none ctermbg=none + highlight VertSplit guibg=none ctermbg=none + highlight SignColumn guibg=none ctermbg=none +endfunction +autocmd ColorScheme * call AdaptColorscheme() + +colorscheme molokai + +hi LineNr guifg=#aaaaaa +hi Visual guibg=#555555 +hi Folded guibg=NONE guifg=#aaaaaa + +hi Identifier guifg=#eeeeee + +highlight ExtraWhitespace guibg=grey +match ExtraWhitespace /\s\+$/ + +" Agnostic +syntax match AgnosticMath /[!+-?=%*^><]/ +hi def link AgnosticMath Include +syntax match AgnosticPunct /[,.;._]/ +hi def link AgnosticPunct Operator +syntax match AgnosticBrackets /[{}()]/ +hi def link AgnosticBrackets Define +syntax match AgnosticQuote /["'`]/ +hi def link AgnosticQuote String +syntax match AgnosticNumber /[0-9]/ +hi def link AgnosticNumber Number +syntax region MyString start="'" end="'" +highlight link MyString String +syntax region MyString2 start="\"" end="\"" +highlight link MyString2 String + + +" plugins + +hi illuminatedWord cterm=underline gui=underline + +highlight GitGutterDelete guifg=#ff2222 ctermfg=1 +highlight GitGutterChange guifg=#bbbb00 ctermfg=3 +highlight GitGutterAdd guifg=#009900 ctermfg=2 + +let g:lightline = {'colorscheme': 'wombat'} + +]]) +