Add neovim configuration
This commit is contained in:
parent
34224deff7
commit
a8c4ea36cc
@ -1,4 +0,0 @@
|
|||||||
setlocal et
|
|
||||||
setlocal ts=2
|
|
||||||
setlocal sts=2
|
|
||||||
setlocal sw=2
|
|
371
.config/nvim/init.vim
Normal file
371
.config/nvim/init.vim
Normal file
@ -0,0 +1,371 @@
|
|||||||
|
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'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
-- 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 = {
|
||||||
|
['<C-b>'] = cmp.mapping(cmp.mapping.scroll_docs(-4), { 'i', 'c' }),
|
||||||
|
['<C-f>'] = cmp.mapping(cmp.mapping.scroll_docs(4), { 'i', 'c' }),
|
||||||
|
['<C-Space>'] = cmp.mapping(cmp.mapping.complete(), { 'i', 'c' }),
|
||||||
|
-- Specify `cmp.config.disable` if you want to remove the default `<C-y>` mapping.
|
||||||
|
['<C-y>'] = cmp.config.disable,
|
||||||
|
['<C-e>'] = cmp.mapping({
|
||||||
|
i = cmp.mapping.abort(),
|
||||||
|
c = cmp.mapping.close(),
|
||||||
|
}),
|
||||||
|
['<CR>'] = 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', '<space>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', '<space>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', '<leader>ff', "<cmd>lua require('telescope.builtin').find_files()<cr>",
|
||||||
|
{ noremap = true, silent = true })
|
||||||
|
vim.api.nvim_set_keymap('n', '<leader>fg', "<cmd>lua require('telescope.builtin').live_grep()<cr>",
|
||||||
|
{ noremap = true, silent = true })
|
||||||
|
vim.api.nvim_set_keymap('n', '<leader>fb', "<cmd>lua require('telescope.builtin').buffers()<cr>",
|
||||||
|
{ noremap = true, silent = true })
|
||||||
|
vim.api.nvim_set_keymap('n', '<leader>fh', "<cmd>lua require('telescope.builtin').help_tags()<cr>",
|
||||||
|
{ noremap = true, silent = true })
|
||||||
|
|
||||||
|
--
|
||||||
|
-- NvimTree
|
||||||
|
--
|
||||||
|
require('nvim-tree').setup {}
|
||||||
|
|
||||||
|
vim.api.nvim_set_keymap('n', '<C-n>', ':NvimTreeToggle<CR>', { noremap = true })
|
||||||
|
vim.api.nvim_set_keymap('n', '<leader>r', ':NvimTreeRefresh<CR>', { noremap = true })
|
||||||
|
vim.api.nvim_set_keymap('n', '<leader>n', ':NvimTreeFindFile<CR>', { 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', '<F5>', function() require('dap').continue() end)
|
||||||
|
vim.keymap.set('n', '<F10>', function() require('dap').step_over() end)
|
||||||
|
vim.keymap.set('n', '<F11>', function() require('dap').step_into() end)
|
||||||
|
vim.keymap.set('n', '<F12>', function() require('dap').step_out() end)
|
||||||
|
vim.keymap.set('n', '<Leader>b', function() require('dap').toggle_breakpoint() end)
|
||||||
|
vim.keymap.set('n', '<Leader>B', function() require('dap').set_breakpoint() end)
|
||||||
|
vim.keymap.set('n', '<Leader>lp', function() require('dap').set_breakpoint(nil, nil, vim.fn.input('Log point message: ')) end)
|
||||||
|
vim.keymap.set('n', '<Leader>dr', function() require('dap').repl.open() end)
|
||||||
|
vim.keymap.set('n', '<Leader>dl', function() require('dap').run_last() end)
|
||||||
|
vim.keymap.set({'n', 'v'}, '<Leader>dh', function()
|
||||||
|
require('dap.ui.widgets').hover()
|
||||||
|
end)
|
||||||
|
vim.keymap.set({'n', 'v'}, '<Leader>dp', function()
|
||||||
|
require('dap.ui.widgets').preview()
|
||||||
|
end)
|
||||||
|
vim.keymap.set('n', '<Leader>df', function()
|
||||||
|
local widgets = require('dap.ui.widgets')
|
||||||
|
widgets.centered_float(widgets.frames)
|
||||||
|
end)
|
||||||
|
vim.keymap.set('n', '<Leader>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,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
EOF
|
40
.config/nvim/lua/lsphelp.lua
Normal file
40
.config/nvim/lua/lsphelp.lua
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
-- Helper function for creating keymaps.
|
||||||
|
function nnoremap(rhs, lhs, desc)
|
||||||
|
local bufopts = { noremap=true, silent=true, buffer=bufnr, desc = desc }
|
||||||
|
|
||||||
|
vim.keymap.set("n", rhs, lhs, bufopts)
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Use an on_attach function to only map the following keys
|
||||||
|
-- after the language server attaches to the current buffer
|
||||||
|
function default_on_attach(client, bufnr)
|
||||||
|
-- Enable completion triggered by <c-x><c-o>
|
||||||
|
vim.api.nvim_buf_set_option(bufnr, 'omnifunc', 'v:lua.vim.lsp.omnifunc')
|
||||||
|
|
||||||
|
-- Mappings.
|
||||||
|
-- See `:help vim.lsp.*` for documentation on any of the below functions
|
||||||
|
nnoremap('gD', vim.lsp.buf.declaration, "Go to declaration")
|
||||||
|
nnoremap('gd', vim.lsp.buf.definition, "Go to definition")
|
||||||
|
nnoremap('K', vim.lsp.buf.hover, "Hover text")
|
||||||
|
nnoremap('gi', vim.lsp.buf.implementation, "Go to implementation")
|
||||||
|
nnoremap('<C-k>', vim.lsp.buf.signature_help, "Show signature")
|
||||||
|
nnoremap('<space>wa', vim.lsp.buf.add_workspace_folder, "Add workspace folder")
|
||||||
|
nnoremap('<space>wr', vim.lsp.buf.remove_workspace_folder, "Remove workspace folder")
|
||||||
|
nnoremap('<space>wl', function()
|
||||||
|
print(vim.inspect(vim.lsp.buf.list_workspace_folders()))
|
||||||
|
end, "List workspace folders")
|
||||||
|
nnoremap('<space>D', vim.lsp.buf.type_definition, "Go to type definition")
|
||||||
|
nnoremap('<space>rn', vim.lsp.buf.rename, "Rename")
|
||||||
|
nnoremap('<space>ca', vim.lsp.buf.code_action, "Code actions")
|
||||||
|
nnoremap('gr', vim.lsp.buf.references, "Find references")
|
||||||
|
nnoremap('<space>f', function() vim.lsp.buf.format { async = true } end, "Format file")
|
||||||
|
end
|
||||||
|
|
||||||
|
function read_configuration()
|
||||||
|
local configuration = {}
|
||||||
|
local chunk, err = loadfile(os.getenv('HOME') .. '/.config/nvim/config', 't', configuration)
|
||||||
|
if chunk then
|
||||||
|
chunk()
|
||||||
|
end
|
||||||
|
return configuration
|
||||||
|
end
|
3
.gitignore
vendored
3
.gitignore
vendored
@ -1 +1,2 @@
|
|||||||
node_modules/
|
.config/nvim/config
|
||||||
|
.config/nvim/plugin/
|
||||||
|
5
.profile
5
.profile
@ -14,6 +14,11 @@ else
|
|||||||
export SSH_AUTH_SOCK=/run/user/1000/keyring/ssh
|
export SSH_AUTH_SOCK=/run/user/1000/keyring/ssh
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ -d /opt/homebrew/opt/php@8.3 ]
|
||||||
|
then
|
||||||
|
PATH="/opt/homebrew/opt/php@8.3/bin:/opt/homebrew/opt/php@8.3/sbin:$PATH"
|
||||||
|
fi
|
||||||
|
|
||||||
if [ -d "$HOME/Android/Sdk" ]
|
if [ -d "$HOME/Android/Sdk" ]
|
||||||
then
|
then
|
||||||
export ANDROID_HOME="$HOME/Android/Sdk"
|
export ANDROID_HOME="$HOME/Android/Sdk"
|
||||||
|
Loading…
Reference in New Issue
Block a user