set ts=4 set sw=4 set noet set ignorecase set smartcase set ruler set nobackup set number set colorcolumn=120 set exrc set secure set hidden "set completeopt=menuone,noinsert,noselect set completeopt=menu,menuone,noselect set shortmess+=c " Having longer updatetime (default is 4000 ms = 4 s) leads to noticeable " delays and poor user experience. set updatetime=300 " Always show the signcolumn, otherwise it would shift the text each time " diagnostics appear/become resolved. " Recently vim can merge signcolumn and number column into one set signcolumn=yes set mouse=a " Enable mouse in all modes. lua << EOF require'lsphelp' -- -- Packer -- vim.cmd [[packadd packer.nvim]] require('packer').startup(function() -- Packer can manage itself use 'wbthomason/packer.nvim' use 'mfussenegger/nvim-dap' use 'airblade/vim-gitgutter' use 'neovim/nvim-lspconfig' use 'dense-analysis/ale' use 'liuchengxu/vista.vim' -- Tag bar. -- Git. use 'tpope/vim-fugitive' use { 'sindrets/diffview.nvim', requires = {'nvim-lua/plenary.nvim'} } -- File browser. use { 'kyazdani42/nvim-tree.lua', requires = {'nvim-tree/nvim-web-devicons'} -- optional, for file icon } use { 'nvim-telescope/telescope.nvim', requires = {'nvim-lua/plenary.nvim'} } use 'nvim-telescope/telescope-ui-select.nvim' use { 'kevinhwang91/nvim-ufo', requires = {'kevinhwang91/promise-async'} } -- Theme. use 'EdenEast/nightfox.nvim' -- Status line. use { 'nvim-lualine/lualine.nvim', requires = {'nvim-tree/nvim-web-devicons'} -- optional, for status line icons } -- Syntax. use 'leafOfTree/vim-vue-plugin' use 'mfussenegger/nvim-jdtls' use 'hhsnopek/vim-sugarss' use 'dart-lang/dart-vim-plugin' use { 'akinsho/flutter-tools.nvim', requires = { 'nvim-lua/plenary.nvim' } } use 'vim-vdebug/vdebug' -- nvim-cmp use 'dcampos/nvim-snippy' use 'hrsh7th/cmp-nvim-lsp' use 'hrsh7th/nvim-cmp' use 'dcampos/cmp-snippy' use 'hrsh7th/cmp-path' use 'hrsh7th/cmp-buffer' end) local configuration = read_configuration() -- -- ALE -- -- Run linters only on save vim.g.ale_lint_on_text_changed = 'never' vim.g.ale_lint_on_insert_leave = 0 -- Include the linter name (e.g. 'hack' or 'hhast'), code, and message in errors vim.g.ale_echo_msg_format = '[%linter%] %s' vim.g.ale_linters = { hack = {'hack', 'hhast'}, haskell = {"hlint"}, javascript = {'eslint'}, d = {'dmd'}, php = {'phpcs', 'phpstan'}, ruby = {'rubocop'}, cpp = {}, } vim.g.ale_ruby_rubocop_executable = 'bundle' vim.g.ale_cpp_cc_options = '-std=c++17 -Wall' vim.g.ale_open_list = 1 vim.g.ale_disable_lsp = 1 -- -- nvim-cmp -- local cmp = require'cmp' cmp.setup({ snippet = { -- REQUIRED - you must specify a snippet engine expand = function(args) require'snippy'.expand_snippet(args.body) end, }, mapping = { [''] = cmp.mapping(cmp.mapping.scroll_docs(-4), { 'i', 'c' }), [''] = cmp.mapping(cmp.mapping.scroll_docs(4), { 'i', 'c' }), [''] = cmp.mapping(cmp.mapping.complete(), { 'i', 'c' }), -- Specify `cmp.config.disable` if you want to remove the default `` mapping. [''] = cmp.config.disable, [''] = cmp.mapping({ i = cmp.mapping.abort(), c = cmp.mapping.close(), }), [''] = cmp.mapping.confirm({ select = false }), }, sources = cmp.config.sources({ { name = 'nvim_lsp' }, { name = 'snippy' }, }, { { name = 'path' }, }, { { name = 'buffer' }, }), view = { entries = 'native', }, }) -- Setup lspconfig. local capabilities = require('cmp_nvim_lsp').default_capabilities(vim.lsp.protocol.make_client_capabilities()) capabilities.textDocument.foldingRange = { dynamicRegistration = false, lineFoldingOnly = true } -- -- LSPConfig -- local nvim_lsp = require('lspconfig') -- Mappings. -- 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) nvim_lsp['hls'].setup { on_attach = default_on_attach, capabilities = capabilities, flags = { debounce_text_changes = 150, }, settings = { haskell = { plugin = { stan = { globalOn = false } } } } } nvim_lsp['intelephense'].setup { on_attach = default_on_attach, flags = { debounce_text_changes = 150, }, init_options = { licenceKey = configuration.intelephenseKey, storagePath = '/tmp/intelephense', }, capabilities = capabilities, settings = { intelephense = { environment = { phpVersion = '8.2.0' } } } } nvim_lsp['clangd'].setup { on_attach = default_on_attach, capabilities = capabilities } require("flutter-tools").setup { outline = { open_cmd = "Vista" }, lsp = { on_attach = default_on_attach, capabilities = capabilities } } nvim_lsp['twiggy_language_server'].setup { on_attach = default_on_attach, capabilities = capabilities, settings = { twiggy = { framework = 'symfony', phpExecutable = '/usr/bin/php', symfonyConsolePath = 'bin/console', diagnostics = { twigCsFixer = false } } } } vim.g.vim_vue_plugin_config = { syntax = { template = {'html'}, script = {'javascript'}, style = {'css'}, }, full_syntax = {}, initial_indent = {}, attribute = 0, keyword = 0, foldexpr = 0, debug = 0 } -- -- Telescope -- require('telescope').setup { extensions = { ["ui-select"] = { require("telescope.themes").get_dropdown { } } } } require("telescope").load_extension("ui-select") vim.api.nvim_set_keymap('n', 'ff', "lua require('telescope.builtin').find_files()", { noremap = true, silent = true }) vim.api.nvim_set_keymap('n', 'fg', "lua require('telescope.builtin').live_grep()", { noremap = true, silent = true }) vim.api.nvim_set_keymap('n', 'fb', "lua require('telescope.builtin').buffers()", { noremap = true, silent = true }) vim.api.nvim_set_keymap('n', 'fh', "lua require('telescope.builtin').help_tags()", { noremap = true, silent = true }) -- -- NvimTree -- require('nvim-tree').setup {} vim.api.nvim_set_keymap('n', '', ':NvimTreeToggle', { noremap = true }) vim.api.nvim_set_keymap('n', 'r', ':NvimTreeRefresh', { noremap = true }) vim.api.nvim_set_keymap('n', 'n', ':NvimTreeFindFile', { noremap = true }) -- -- Theme -- vim.cmd('colorscheme duskfox') vim.opt.termguicolors = true -- -- Lualine -- require('lualine').setup { options = { theme = 'codedark' }, extensions = {'quickfix', 'nvim-tree', 'fugitive'}, sections = { lualine_c = { 'filename' } } } -- -- Diffview.nvim -- require('diffview').setup {} -- -- Vista -- vim.g.vista_default_executive = 'nvim_lsp' -- -- nvim-ufo -- vim.wo.foldcolumn = '1' vim.wo.foldlevel = 99 -- feel free to decrease the value vim.wo.foldenable = true require('ufo').setup() -- -- nvim-dap -- vim.keymap.set('n', '', function() require('dap').continue() end) vim.keymap.set('n', '', function() require('dap').step_over() end) vim.keymap.set('n', '', function() require('dap').step_into() end) vim.keymap.set('n', '', function() require('dap').step_out() end) vim.keymap.set('n', 'b', function() require('dap').toggle_breakpoint() end) vim.keymap.set('n', 'B', function() require('dap').set_breakpoint() end) vim.keymap.set('n', 'lp', function() require('dap').set_breakpoint(nil, nil, vim.fn.input('Log point message: ')) end) vim.keymap.set('n', 'dr', function() require('dap').repl.open() end) vim.keymap.set('n', 'dl', function() require('dap').run_last() end) vim.keymap.set({'n', 'v'}, 'dh', function() require('dap.ui.widgets').hover() end) vim.keymap.set({'n', 'v'}, 'dp', function() require('dap.ui.widgets').preview() end) vim.keymap.set('n', 'df', function() local widgets = require('dap.ui.widgets') widgets.centered_float(widgets.frames) end) vim.keymap.set('n', 'ds', function() local widgets = require('dap.ui.widgets') widgets.centered_float(widgets.scopes) end) local dap = require("dap") dap.adapters.gdb = { type = "executable", command = "gdb", args = { "-i", "dap" } } dap.configurations.cpp = { { name = "Launch", type = "gdb", request = "launch", program = function() return vim.fn.input('Path to executable: ', vim.fn.getcwd() .. '/', 'file') end, cwd = "${workspaceFolder}", stopAtBeginningOfMainSubprogram = false, }, } -- -- Vdebug -- vim.g.vdebug_options = { port = '9000' } EOF