local opt = vim.opt -- ---------------------------------------- -- SETTINGS -- ---------------------------------------- -- system opt.shell = "/usr/bin/bash" opt.fileencodings = "utf-8,ucs-bom,gb18030,gbk,gb2312,cp936" opt.fileformats = "unix" opt.swapfile = false opt.backup = false opt.updatetime = 300 opt.timeoutlen = 200 vim.g.BASH_Ctrl_j = "off" vim.g.BASH_Ctrl_l = "off" -- looks opt.termguicolors = true opt.cmdheight = 2 opt.background = "dark" opt.listchars = "tab:→ ,trail:·,extends:↷,precedes:↶,nbsp:+,eol:↵" opt.list = true -- Show listchars opt.showtabline = 2 -- undo opt.undodir = "/home/hjalmarlucius/.cache/vim/undo" opt.undofile = true opt.undolevels = 1000 opt.undoreload = 10000 -- window opt.splitbelow = true -- Put new windows below current opt.splitright = true -- Put new windows right of current -- buffer opt.hidden = true -- Enable background buffers opt.wrap = false -- Disable line wrap opt.number = true -- Show line numbers opt.relativenumber = true -- Relative line numbers opt.cursorline = false -- Highlight current line opt.switchbuf = "useopen" -- Use existing window if buffer is already open opt.colorcolumn = "88" -- tabs opt.expandtab = true -- Use spaces instead of tabs opt.smartindent = false -- Avoid fucking with comment indents opt.shiftround = true -- Round indent opt.tabstop = 2 -- Number of spaces tabs count for opt.shiftwidth = 2 -- Size of an indent -- search opt.ignorecase = true -- Ignore case opt.smartcase = true -- Do not ignore case with capitals opt.wildmode = {"list:longest"} -- Command-line completion mode opt.wildignorecase = true opt.wildignore = opt.wildignore + {"*swp", "*.class", "*.pyc", "*.png", "*.jpg", "*.gif", "*.zip", "*/tmp/*", "*.o", ".obj", "*.so"} -- cursor opt.scrolloff = 5 -- Lines of context opt.scrolljump = 1 -- Lines to scroll when cursor leaves screen opt.sidescrolloff = 4 -- Columns of context opt.showmatch = true -- Show matching brackets / parentheses -- editing opt.joinspaces = false -- No double spaces with join opt.timeoutlen = 500 -- How long to wait during key combo opt.langmap = "å(,¨),Å{,^},Ø\\;,ø:,æ^,+$" opt.clipboard = opt.clipboard + {"unnamedplus"} -- folding (also see treesitter) -- zm/M zr/R increase/increase foldlevel (max) -- zo/O zc/C open / close fold (max) -- za zA switch fold (small/full) -- zi toggle folds -- zi zj move to next / prev fold opt.foldenable = false opt.foldmethod = "expr" -- ---------------------------------------- -- AUTOCOMMANDS -- ---------------------------------------- -- highlight on yank local cmd = vim.cmd vim.api.nvim_command [[augroup MYAU]] vim.api.nvim_command [[autocmd!]] vim.api.nvim_command [[autocmd BufWritePre * %s/\s\+$//e]] vim.api.nvim_command [[autocmd BufWritePre *.py execute ":Black"]] vim.api.nvim_command [[autocmd BufReadPost quickfix nmap ]] vim.api.nvim_command [[autocmd TextYankPost * "lua vim.highlight.on_yank {on_visual = false}"]] vim.api.nvim_command [[augroup END]] -- ---------------------------------------- -- MAPS -- ---------------------------------------- -- leader/local leader vim.g.mapleader = " " vim.g.maplocalleader = "," local map = vim.api.nvim_set_keymap map("n", "Q", "", {noremap = true}) map("n", "q:", "", {noremap = true}) map("n", "E", [[:so ~/.config/nvim/init.lua:PackerInstall:PackerCompile]], { noremap = true }) map("n", "e", [[:vnew ~/dotfiles/nvim/init.lua]], { noremap = true }) map("n", "nt", [[:vnew ~/notes/todos.md]], { noremap = true }) map("n", "nc", [[:vnew ~/notes/cheatsheet.md]], { noremap = true }) map("n", "nl", [[:vnew ~/notes/libs.md]], { noremap = true }) map("n", "nu", [[:vnew ~/notes/urls.md]], { noremap = true }) map("n", "nn", [[:Explore ~/notes]], { noremap = true }) map("n", "ww", [[:cd %:p:h]], { noremap = true }) map("n", "", ":noh", { silent = true, noremap = true } ) -- to navigate the completion menu map("i", "", [[pumvisible() ? "\" : "\"]], { expr = true, noremap = true }) map("i", "", [[pumvisible() ? "\" : "\"]], { expr = true, noremap = true }) -- CURSOR -- stay visual when indenting map("n", "-", "_", { noremap = true }) map("v", "v", "", { noremap = true }) map("v", "", ">gv", { noremap = true }) map("v", "", "o", "m`o``", { noremap = true }) -- Insert a newline in normal mode -- WINDOWS / BUFFERS -- make splits and tabs map("n", "", ":vnew", { noremap = true }) map("n", "", ":new", { noremap = true }) map("n", "", ":vsplit", { noremap = true }) map("n", "", ":split", { noremap = true }) map("n", "", ":tabe %", { noremap = true }) map("n", "", ":tabnew", { noremap = true }) -- buffers and tabs map("n", "", ":bprev", { noremap = true }) map("n", "", ":bnext", { noremap = true }) map("n", "", ":tabprev", { noremap = true }) map("n", "", ":tabnext", { noremap = true }) -- resize windows with hjkl map("n", "", "<", { noremap = true }) map("n", "", "-", { noremap = true }) map("n", "", "+", { noremap = true }) map("n", "", ">", { noremap = true }) -- quickfix window map("n", "", ":cp", { noremap = true }) map("n", "", ":cn", { noremap = true }) -- remove buffer map("n", "", ":bprev:bd#", { noremap = true }) map("n", "", ":bprev:bd!#", { noremap = true }) map("n", "", ":vimgrep TODO **/*:copen", { noremap = true }) map("n", "", ":checkt", { noremap = true }) -- ---------------------------------------- -- PACKER -- ---------------------------------------- local install_path = vim.fn.stdpath("data").."/site/pack/packer/start/packer.nvim" if vim.fn.empty(vim.fn.glob(install_path)) > 0 then vim.fn.system({"git", "clone", "https://github.com/wbthomason/packer.nvim", install_path}) vim.api.nvim_command "packadd packer.nvim" end require("packer").startup {function(use) use {"wbthomason/packer.nvim"} -- tpope use {"tpope/vim-sensible"} -- sensible default use {"tpope/vim-commentary"} -- comment out stuff use {"tpope/vim-surround"} use {"tpope/vim-repeat"} -- repeat vim-surround with . use {"tpope/vim-eunuch"} -- Move, Rename etc use {"farmergreg/vim-lastplace"} -- keep location upon reopening -- smooth scrolling use {"psliwka/vim-smoothie"} -- tables use {"dhruvasagar/vim-table-mode"} -- git use {"tpope/vim-fugitive", config = function() local map = vim.api.nvim_set_keymap map("", "", ":vertical Git:vertical resize 60", {}) end } use { "lewis6991/gitsigns.nvim", requires = {"nvim-lua/plenary.nvim"}, config = function() require("gitsigns").setup{ numhl = false, linehl = false, keymaps = { -- Default keymap options noremap = true, buffer = true, ["n "] = { expr = true, [[&diff ? "]c" : "lua require('gitsigns.actions').next_hunk()"]]}, ["n "] = { expr = true, [[&diff ? "[c" : "lua require('gitsigns.actions').prev_hunk()"]]}, ["n gs"] = [[lua require("gitsigns").stage_hunk()]], ["v gs"] = [[lua require("gitsigns").stage_hunk({vim.fn.line("."), vim.fn.line("v")})]], ["n gu"] = [[lua require("gitsigns").undo_stage_hunk()]], ["n gx"] = [[lua require("gitsigns").reset_hunk()]], ["v gx"] = [[lua require("gitsigns").reset_hunk({vim.fn.line("."), vim.fn.line("v")})]], ["n gi"] = [[lua require("gitsigns").preview_hunk()]], ["n gb"] = [[lua require("gitsigns").blame_line(true)]], -- Text objects ["o ih"] = [[:lua require("gitsigns.actions").select_hunk()]], ["x ih"] = [[:lua require("gitsigns.actions").select_hunk()]] }, word_diff = false, } end } -- folder tree use {"kyazdani42/nvim-tree.lua", requires = {"kyazdani42/nvim-web-devicons"}, config = function() vim.g.nvim_tree_auto_open = 0 vim.g.nvim_tree_disable_netrw = 0 local map = vim.api.nvim_set_keymap map("n", "", ":NvimTreeToggle", {noremap = true}) map("n", "", ":NvimTreeRefresh", {noremap = true}) map("n", "", ":NvimTreeFindFile", {noremap = true}) end } -- theme use {"folke/tokyonight.nvim", config = function() vim.g.tokyonight_style = "night" end } use {"sonph/onehalf", rtp = "vim", } use {"tomasr/molokai", } use {"morhetz/gruvbox", } use {"jnurmine/Zenburn", } use {"nanotech/jellybeans.vim", } use {"mhartington/oceanic-next", } use {"NLKNguyen/papercolor-theme", } use {"drewtempelmeyer/palenight.vim", } use {"altercation/vim-colors-solarized", } use {"rakr/vim-one", config = function() vim.g.one_allow_italics = 1 end } use {"ayu-theme/ayu-vim", config = function() -- vim.g.ayucolor = "light" -- vim.g.ayucolor = "mirage" vim.g.ayucolor = "dark" end } use {"skbolton/embark", config = function() vim.g.embark_terminal_italics = 1 end } use {"arcticicestudio/nord-vim", config = function() end } use {"junegunn/seoul256.vim", config = function() vim.g.seoul256_background = 235 end } vim.cmd "colorscheme zenburn" -- coloring of colornames use {"rrethy/vim-hexokinase", run = "cd /home/hjalmarlucius/.local/share/nvim/site/pack/packer/start/vim-hexokinase && make hexokinase", config = function() vim.g.Hexokinase_highlighters = {"backgroundfull"} end } -- flashing cursor on move use {"danilamihailov/beacon.nvim", setup = function() vim.api.nvim_exec( [[highlight Beacon guibg=white ctermbg=15]], false) end, config = function() vim.g.beacon_size = 40 vim.g.beacon_minimal_jump = 10 vim.g.beacon_shrink = 1 end } -- indentation guides use {"lukas-reineke/indent-blankline.nvim", config = function() vim.g.indent_blankline_char = "|" vim.g.indent_blankline_use_treesitter = true end } use {"haya14busa/vim-asterisk", config = function() vim.g["asterisk#keeppos"] = 1 local map = vim.api.nvim_set_keymap map("", "*", "(asterisk-z*)", {}) map("", "#", "(asterisk-z#)", {}) map("", "g*", "(asterisk-gz*)", {}) map("", "g#", "(asterisk-gz#)", {}) end } use {"christoomey/vim-tmux-navigator", config = function() vim.g.tmux_navigator_no_mappings = 1 vim.g.tmux_navigator_disable_when_zoomed = 1 local map = vim.api.nvim_set_keymap opts = { silent = true, noremap = true } map("n", "", ":TmuxNavigateLeft", opts) map("n", "", ":TmuxNavigateDown", opts) map("n", "", ":TmuxNavigateUp", opts) map("n", "", ":TmuxNavigateRight", opts) end } use {"dkarter/bullets.vim", config = function() vim.g.bullets_outline_levels = {"ROM", "ABC", "num", "abc", "rom", "std-", "std*"} vim.g.bullets_enabled_file_types = {"markdown", "text", "gitcommit"} end } use {"mbbill/undotree", config = function() local map = vim.api.nvim_set_keymap map("", "", ":UndotreeToggle:UndotreeFocus", { noremap = true }) end } use {"iamcco/markdown-preview.nvim", -- requires yarn run = "cd /home/hjalmarlucius/.local/share/nvim/site/pack/packer/start/markdown-preview && yarn install", config = function() vim.g.mkdp_auto_start = 0 -- auto start on moving into vim.g.mkdp_auto_close = 0 -- auto close on moving away vim.g.mkdp_open_to_the_world = 0 -- available to others vim.g.mkdp_open_ip = "" -- use custom IP to open preview page end } use {"hoob3rt/lualine.nvim", requires = {"kyazdani42/nvim-web-devicons"}, config = function() require("lualine").setup { options = { theme = "auto", }, extensions = { "fugitive", }, sections = { lualine_a = {"mode"}, lualine_b = {"branch"}, lualine_c = {{"filename", file_status = true, path = 1}, {"diff", colored=false}, { "diagnostics", sources = {"nvim_lsp"}}}, lualine_x = {"encoding", "fileformat", "filetype"}, lualine_y = {"progress"}, lualine_z = {"location"} }, inactive_sections = { lualine_a = {}, lualine_b = {}, lualine_c = {{"filename", file_status = true, path = 1}}, lualine_x = {"location"}, lualine_y = {"progress"}, lualine_z = {} }, } end } use {"akinsho/nvim-bufferline.lua", requires = {"kyazdani42/nvim-web-devicons"}, config = function() require("bufferline").setup{ options = { diagnostics = "nvim_lsp", } } local map = vim.api.nvim_set_keymap map("n", "", ":BufferLineCyclePrev", { noremap = true, silent=true }) map("n", "", ":BufferLineCycleNext", { noremap = true, silent=true }) map("n", "", ":BufferLineMovePrev", { noremap = true, silent=true }) map("n", "", ":BufferLineMoveNext", { noremap = true, silent=true }) end } use {"numtostr/FTerm.nvim", config = function() require("FTerm").setup{} local map = vim.api.nvim_set_keymap local opts = { noremap = true, silent = true } map("n", "", [[lua require("FTerm").toggle()]], opts) map("t", "", [[lua require("FTerm").toggle()]], opts) end } use {"psf/black"} -- treesitter use {"nvim-treesitter/nvim-treesitter", run = ":TSUpdate", config = function() require("nvim-treesitter.configs").setup { ensure_installed = "all", } vim.opt.foldexpr = "nvim_treesitter#foldexpr()" end } use {"nvim-telescope/telescope.nvim", requires = {"nvim-lua/popup.nvim", "nvim-lua/plenary.nvim"}, config = function() -- TODO grep with regex local map = vim.api.nvim_set_keymap local opts = { noremap = true } local actions = require("telescope.actions") map("n", "", "Telescope find_files", opts ) map("n", "", "Telescope git_files", opts ) map("n", "", "Telescope live_grep", opts ) map("n", "", "Telescope buffers", opts ) -- map("n", "", "Telescope filetypes", opts ) map("n", "", "Telescope colorscheme", opts ) map("n", "la", "Telescope lsp_code_actions", opts ) map("v", "la", "Telescope lsp_range_code_actions", opts ) map("n", "ld", "Telescope lsp_document_diagnostics", opts ) map("n", "lD", "Telescope lsp_workspace_diagnostics", opts ) map("n", "gg", "Telescope git_status", opts ) map("n", "gc", "Telescope git_commits", opts ) map("n", "gC", "Telescope git_bcommits", opts ) map("n", "", "Telescope", opts ) require("telescope").setup{ defaults = { vimgrep_arguments = { "rg", "--color=never", "--no-heading", -- "--with-filename", "--line-number", "--column", "--smart-case" }, mappings = { i = { [""] = actions.close, [""] = actions.move_selection_next, [""] = actions.move_selection_previous, [""] = actions.preview_scrolling_up, [""] = actions.preview_scrolling_down, [""] = actions.select_default + actions.center, [""] = actions.select_horizontal, [""] = actions.select_vertical, [""] = actions.select_tab, [""] = actions.toggle_selection + actions.move_selection_worse, [""] = actions.toggle_selection + actions.move_selection_better, [""] = actions.send_to_qflist + actions.open_qflist, [""] = actions.send_selected_to_qflist + actions.open_qflist, [""] = actions.complete_tag }, }, file_ignore_patterns = {}, set_env = { ["COLORTERM"] = "truecolor" }, }, } end } -- debugging -- use {"mfussenegger/nvim-dap-python", -- requires = {"mfussenegger/nvim-dap"}, -- config = function() -- require("dap-python").setup("/usr/bin/python") -- local map = vim.api.nvim_set_keymap -- local opts = { noremap = true, silent = true } -- map("n", "", [[:lua require("dap").continue()]], opts) -- map("n", "", [[:lua require("dap").step_over()]], opts) -- map("n", "", [[:lua require("dap").step_into()]], opts) -- map("n", "", [[:lua require("dap").step_out()]], opts) -- map("n", "", [[:lua require("dap").toggle_breakpoint()]], opts) -- map("n", "", [[:lua require("dap").set_breakpoint(vim.fn.input('Breakpoint condition: '))]], opts) -- map("n", "", [[:lua require("dap").set_breakpoint(nil, nil, vim.fn.input('Log point message: '))]], opts) -- map("n", "", [[:lua require("dap").repl.open()]], opts) -- map("n", "vl", [[:lua require("dap").repl.run_last()`]], opts) -- map("n", "vt", [[:lua require('dap-python').test_method()]], opts) -- map("v", "vs", [[:lua require('dap-python').debug_selection()]], opts) -- end -- } -- use {"nvim-telescope/telescope-dap.nvim", -- requires = {"mfussenegger/nvim-dap", "nvim-telescope/telescope.nvim"}, -- config = function() -- require("telescope").load_extension("dap") -- local map = vim.api.nvim_set_keymap -- local opts = { noremap = true, silent = true } -- map("n", "", [[:lua require("telescope").extensions.dap.commands{}]], opts) -- map("n", "", [[:lua require("telescope").extensions.dap.configurations{}]], opts) -- map("n", "", [[:lua require("telescope").extensions.dap.list_breakpoints{}]], opts) -- map("n", "", [[:lua require("telescope").extensions.dap.variables{}]], opts) -- end -- } -- autocompletion use {"hrsh7th/nvim-compe", config = function() vim.opt.completeopt = "menuone,noselect" require("compe").setup { source = { nvim_lsp = true, path = true, buffer = true, calc = true, nvim_lua = true, }, } local map = vim.api.nvim_set_keymap local opts = { noremap = true, silent = true, expr = true } map("i", "", [[compe#complete()]], opts) map("i", "", [[compe#confirm("")]], opts) map("i", "", [[compe#close("")]], opts) -- TODO don't seem useful? -- map("i", "", [[compe#scroll({ "delta": +4 })]], opts) -- map("i", "", [[compe#scroll({ "delta": -4 })]], opts) end } use { "folke/trouble.nvim", requires = "kyazdani42/nvim-web-devicons", config = function() require("trouble").setup { position = "right", -- position of the list can be: bottom, top, left, right height = 10, -- height of the trouble list when position is top or bottom width = 60, -- width of the list when position is left or right icons = true, -- use devicons for filenames mode = "lsp_workspace_diagnostics", -- "lsp_workspace_diagnostics", "lsp_document_diagnostics", "quickfix", "lsp_references", "loclist" fold_open = "", -- icon used for open folds fold_closed = "", -- icon used for closed folds action_keys = { -- key mappings for actions in the trouble list close = "q", -- close the list cancel = "", -- cancel the preview and get back to your last window / buffer / cursor refresh = "r", -- manually refresh jump = {"", ""}, -- jump to the diagnostic or open / close folds open_split = { "" }, -- open buffer in new split open_vsplit = { "" }, -- open buffer in new vsplit open_tab = { "" }, -- open buffer in new tab jump_close = {"o"}, -- jump to the diagnostic and close the list toggle_mode = "m", -- toggle between "workspace" and "document" diagnostics mode toggle_preview = "P", -- toggle auto_preview hover = "K", -- opens a small popup with the full multiline message preview = "p", -- preview the diagnostic location close_folds = {"zM", "zm"}, -- close all folds open_folds = {"zR", "zr"}, -- open all folds toggle_fold = {"zA", "za"}, -- toggle fold of current file previous = "k", -- preview item next = "j" -- next item }, indent_lines = true, -- add an indent guide below the fold icons auto_open = false, -- automatically open the list when you have diagnostics auto_close = false, -- automatically close the list when you have no diagnostics auto_preview = true, -- automatically preview the location of the diagnostic. to close preview and go back to last window auto_fold = false, -- automatically fold a file trouble list at creation } local map = vim.api.nvim_set_keymap local opts = { noremap = true } map("n", "", ":Trouble", opts) end } use {"folke/todo-comments.nvim", requires = {"nvim-lua/plenary.nvim"}, config = function() require("todo-comments").setup { signs = true, -- show icons in the signs column sign_priority = 8, -- sign priority -- keywords recognized as todo comments keywords = { FIX = { icon = " ", color = "error", alt = { "FIXME", "BUG", "FIXIT", "ISSUE" } }, TODO = { icon = " ", color = "info" }, HACK = { icon = " ", color = "warning" }, WARN = { icon = " ", color = "warning", alt = { "WARNING", "XXX" } }, PERF = { icon = " ", alt = { "OPTIM", "PERFORMANCE", "OPTIMIZE" } }, NOTE = { icon = " ", color = "hint", alt = { "INFO" } }, }, merge_keywords = true, -- when true, custom keywords will be merged with the defaults colors = { error = { "LspDiagnosticsDefaultError", "ErrorMsg", "#DC2626" }, warning = { "LspDiagnosticsDefaultWarning", "WarningMsg", "#FBBF24" }, info = { "LspDiagnosticsDefaultInformation", "#10B981" }, hint = { "LspDiagnosticsDefaultHint", "#7C3AED" }, default = { "Identifier", "#2563EB" }, }, } local map = vim.api.nvim_set_keymap local opts = { noremap = true } map("n", "", ":TodoTrouble", opts) end } use {"glepnir/lspsaga.nvim", requires = {"neovim/nvim-lspconfig"}, run = ":TSUpdate", config = function() -- see https://github.com/lukas-reineke/dotfiles/blob/master/vim/lua/lsp/init.lua on_attach = function (client, bufnr) local bmap = vim.api.nvim_buf_set_keymap local opts = { noremap = true } vim.api.nvim_buf_set_option(bufnr, "omnifunc", "v:lua.vim.lsp.omnifunc") vim.lsp.set_log_level("error") -- workspaces bmap(bufnr, "n", "wa", "lua vim.lsp.buf.add_workspace_folder()", opts) bmap(bufnr, "n", "wr", "lua vim.lsp.buf.remove_workspace_folder()", opts) bmap(bufnr, "n", "wl", "lua print(vim.inspect(vim.lsp.buf.list_workspace_folders()))", opts) -- jump bmap(bufnr, "n", "gl", "lua vim.lsp.diagnostic.set_loclist({severity_limit='Warning'})", opts) bmap(bufnr, "n", "", "lua vim.lsp.diagnostic.show_line_diagnostics({show_header=false})", opts) bmap(bufnr, "n", "", "lua vim.lsp.diagnostic.goto_next({severity_limit='Warning', popup_opts={show_header=false}})", opts) bmap(bufnr, "n", "", "lua vim.lsp.diagnostic.goto_prev({severity_limit='Warning', popup_opts={show_header=false}})", opts) -- popups bmap(bufnr, "n", "", "lua vim.lsp.buf.signature_help()", opts) bmap(bufnr, "i", "", "lua vim.lsp.buf.signature_help()", opts) bmap(bufnr, "n", "", "lua require('lspsaga.action').smart_scroll_with_saga(1)", opts) bmap(bufnr, "n", "", "lua require('lspsaga.action').smart_scroll_with_saga(-1)", opts) -- other if client.resolved_capabilities.goto_definition then bmap(bufnr, "n", "gd", ":Lspsaga preview_definition", opts) bmap(bufnr, "n", "gD", ":lua vim.lsp.buf.definition()", opts) end if client.resolved_capabilities.find_references then bmap(bufnr, "n", "gr", ":Lspsaga lsp_finder", opts) end if client.resolved_capabilities.hover then bmap(bufnr, "n", "K", ":Lspsaga hover_doc", opts) end if client.resolved_capabilities.rename then bmap(bufnr, "n", "", ":Lspsaga rename", opts) end end use_saga_diagnostic_sign = true require("lspsaga").init_lsp_saga { max_preview_lines = 20, finder_action_keys = { quit = {"", "C-c"}, open = "", vsplit = "v", split = "s", scroll_down = "", scroll_up = "" }, code_action_keys = { quit = {"", "C-c"}, exec = "" }, rename_action_keys = { quit = {"", "C-c"}, exec = "" }, } local nvim_lsp = require("lspconfig") -- sudo npm install -g typescript typescript-language-server nvim_lsp.tsserver.setup{} -- sudo npm install -g yaml-language-server nvim_lsp.yamlls.setup{ on_attach = on_attach } -- sudo npm install -g pyright nvim_lsp.pyright.setup{ on_attach = on_attach, settings = { python = { analysis = { diagnosticMode = "workspace", logLevel = "Warning", typeCheckingMode = "strict", } } } } local prettier = { formatCommand = ([[prettier ${--config-precedence:configPrecedence} ${--tab-width:tabWidth} ${--single-quote:singleQuote} ${--trailing-comma:trailingComma}]]) } nvim_lsp.efm.setup{ on_attach = on_attach, init_options = { documentFormatting = true }, filetypes = { "python", "markdown", "yaml", "lua", "javascript" }, root_dir = vim.loop.cwd, settings = { rootMarkers = { ".git/" }, languages = { python = { -- { -- lintCommand = "flake8 --max-line-length 88 --format '%(path)s:%(row)d:%(col)d: %(code)s %(code)s %(text)s' --stdin-display-name ${INPUT} -", -- lintStdin = true, -- lintIgnoreExitCode = true, -- lintFormats = {"%f:%l:%c: %t%n%n%n %m"}, -- lintSource = "flake8" -- }, { formatCommand = "isort --stdout --profile black --force-single-line-imports -", formatStdin = true }, }, javascript = {prettier, eslint}, yaml = {prettier}, markdown = {prettier}, }, }, } end } end }