commit
6a934ff6c6
9 changed files with 615 additions and 150 deletions
|
@ -52,9 +52,8 @@ scoop import .\bin\windows\scoop_apps\scoop_minimal_apps.json
|
|||
# make symbolic links
|
||||
# neovim
|
||||
New-Item -ItemType SymbolicLink -Path ~\AppData\Local\nvim\init.lua -Target (Resolve-Path .\dotfiles\neovim\init.lua) -Force
|
||||
New-Item -ItemType SymbolicLink -Path ~\AppData\Local\nvim\lua\plugins.lua -Target (Resolve-Path .\dotfiles\neovim\lua\plugins.lua) -Force
|
||||
New-Item -ItemType SymbolicLink -Path ~\AppData\Local\nvim\lua\lualine_setup.lua -Target (Resolve-Path .\dotfiles\neovim\lua\lualine_setup.lua) -Force
|
||||
New-Item -ItemType SymbolicLink -Path ~\AppData\Local\nvim\lua\lsp_client_config.lua -Target (Resolve-Path .\dotfiles\neovim\lua\lsp_client_config.lua) -Force
|
||||
New-Item -ItemType SymbolicLink -Path ~\AppData\Local\nvim\lua\lspconfig\server_configurations\satysfi_ls.lua -Target (Resolve-Path .\dotfiles\neovim\lua\lspconfig\server_configurations\satysfi_ls.lua) -Force
|
||||
# pwsh
|
||||
New-Item -ItemType SymbolicLink -Path $PROFILE -Target (Resolve-Path .\dotfiles\pwsh\powershell_profile.ps1) -Force
|
||||
New-Item -ItemType SymbolicLink -Path ~\.config\powershell\chezmoi_completion.ps1 -Target (Resolve-Path .\dotfiles\pwsh\chezmoi_completion.ps1) -Force
|
||||
|
|
|
@ -22,6 +22,15 @@ ln -sf $(pwd)/dotfiles/tmux.conf ~/.tmux.conf
|
|||
mkdir -p ~/.config/nvim
|
||||
ln -sf $(pwd)/dotfiles/neovim/init.lua ~/.config/nvim/init.lua
|
||||
mkdir -p ~/.config/nvim/lua
|
||||
ln -sf $(pwd)/dotfiles/neovim/lua/plugins.lua ~/.config/nvim/lua/plugins.lua
|
||||
ln -sf $(pwd)/dotfiles/neovim/lua/lualine_setup.lua ~/.config/nvim/lua/lualine_setup.lua
|
||||
mkdir -p ~/.config/nvim/lua/lspconfig/server_configurations
|
||||
ln -sf $(pwd)/dotfiles/neovim/lua/lspconfig/server_configurations/satysfi_ls.lua ~/.config/nvim/lua/lspconfig/server_configurations/satysfi_ls.lua
|
||||
ln -sf $(pwd)/dotfiles/neovim/lua/lspconfig/server_configurations/jetls.lua ~/.config/nvim/lua/lspconfig/server_configurations/jetls.lua
|
||||
mkdir -p ~/.config/nvim/after/ftplugin
|
||||
ln -sf $(pwd)/dotfiles/neovim/after/ftplugin/satysfi.lua ~/.config/nvim/after/ftplugin/satysfi.lua
|
||||
ln -sf $(pwd)/dotfiles/neovim/after/ftplugin/tex.lua ~/.config/nvim/after/ftplugin/tex.lua
|
||||
mkdir -p ~/.config/nvim/after/queries/satysfi
|
||||
curl -o ~/.config/nvim/after/queries/satysfi/highlights.scm https://raw.githubusercontent.com/monaqa/tree-sitter-satysfi/master/queries/highlights.scm
|
||||
curl -o ~/.config/nvim/after/queries/satysfi/indents.scm https://raw.githubusercontent.com/monaqa/tree-sitter-satysfi/master/queries/indents.scm
|
||||
curl -o ~/.config/nvim/after/queries/satysfi/matchup.scm https://raw.githubusercontent.com/monaqa/tree-sitter-satysfi/master/queries/matchup.scm
|
||||
|
||||
|
|
7
dotfiles/neovim/after/ftplugin/satysfi.lua
Normal file
7
dotfiles/neovim/after/ftplugin/satysfi.lua
Normal file
|
@ -0,0 +1,7 @@
|
|||
-- filetype plugin for satysfi
|
||||
-- loaded after
|
||||
|
||||
-- tab
|
||||
vim.o.tabstop = 2
|
||||
vim.o.shiftwidth = 2
|
||||
|
23
dotfiles/neovim/after/ftplugin/tex.lua
Normal file
23
dotfiles/neovim/after/ftplugin/tex.lua
Normal file
|
@ -0,0 +1,23 @@
|
|||
-- restore completion order of nvim-cmp
|
||||
-- source from `:help vimtex-complete-nvim-cmp`
|
||||
local cmp = require'cmp'
|
||||
cmp.setup.buffer {
|
||||
formatting = {
|
||||
format = function(entry, vim_item)
|
||||
vim_item.menu = ({
|
||||
omni = (vim.inspect(vim_item.menu):gsub('%"', "")),
|
||||
buffer = "[Buffer]",
|
||||
-- formatting for other sources
|
||||
})[entry.source.name]
|
||||
return vim_item
|
||||
end,
|
||||
},
|
||||
sources = cmp.config.sources{
|
||||
{ name = 'omni' },
|
||||
{ name = 'buffer' },
|
||||
-- { name = 'nvim_lsp' },
|
||||
{ name = 'luasnip' },
|
||||
{ name = 'buffer' },
|
||||
{ name = 'path' },
|
||||
},
|
||||
}
|
|
@ -1,4 +1,133 @@
|
|||
--print("init.lua loaded")
|
||||
-----------------------------------------------------------
|
||||
-- Installing plugin manager 'lazy.nvim'
|
||||
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
|
||||
if not vim.loop.fs_stat(lazypath) then
|
||||
vim.fn.system({
|
||||
"git",
|
||||
"clone",
|
||||
"--filter=blob:none",
|
||||
"https://github.com/folke/lazy.nvim.git",
|
||||
"--branch=stable", -- latest stable release
|
||||
lazypath,
|
||||
})
|
||||
end
|
||||
vim.opt.rtp:prepend(lazypath)
|
||||
|
||||
-- Installing plugins
|
||||
require('lazy').setup({
|
||||
{ "catppuccin/nvim", name = "catppuccin" }, -- Color scheme
|
||||
{
|
||||
'folke/which-key.nvim',
|
||||
config = function()
|
||||
vim.o.timeout = true
|
||||
vim.o.timeoutlen = 300
|
||||
require('which-key').setup {
|
||||
|
||||
}
|
||||
end,
|
||||
},
|
||||
{ 'RRethy/vim-illuminate', }, -- highlight keywords under cursor
|
||||
{ -- comment
|
||||
'numToStr/Comment.nvim',
|
||||
config = function ()
|
||||
require('Comment').setup()
|
||||
end,
|
||||
},
|
||||
{ -- auto pair
|
||||
'windwp/nvim-autopairs',
|
||||
config = function()
|
||||
require('nvim-autopairs').setup {
|
||||
check_ts = true, -- use treesitter
|
||||
}
|
||||
end,
|
||||
event = "InsertEnter",
|
||||
},
|
||||
{ -- lualine(statusline)
|
||||
'nvim-lualine/lualine.nvim',
|
||||
dependencies = { 'kyazdani42/nvim-web-devicons', lazy = true }
|
||||
},
|
||||
{
|
||||
'lervag/vimtex',
|
||||
ft = { 'tex', 'latex' },
|
||||
},
|
||||
{
|
||||
-- 'kdheepak/JET.nvim',
|
||||
'qwjyh/JET.nvim',
|
||||
dir = '~/work/julia/JET.nvim',
|
||||
dev = false, -- set true to use dir
|
||||
lazy = true,
|
||||
dependencies = {
|
||||
'jose-elias-alvarez/null-ls.nvim',
|
||||
},
|
||||
config = function()
|
||||
require("jet").setup {
|
||||
timeout = 15000,
|
||||
-- disable setup since null-ls doesn't support lspconfig
|
||||
-- https://github.com/jose-elias-alvarez/null-ls.nvim/commit/656e5cb554fed1eb2f398f325511601fab988ce0
|
||||
setup_lspconfig = false,
|
||||
debug = true,
|
||||
}
|
||||
end,
|
||||
-- build process(make environments and add JET.jl)
|
||||
build = [[mkdir -p ~/.julia/environments/nvim-null-ls && julia --startup-file=no --project=~/.julia/environments/nvim-null-ls -e 'using Pkg; Pkg.add("JET")']],
|
||||
-- ft = { 'julia', },
|
||||
},
|
||||
{
|
||||
'hkupty/iron.nvim',
|
||||
ft = { 'julia', 'python', 'ruby', },
|
||||
},
|
||||
{ 'lewis6991/gitsigns.nvim', },
|
||||
'neovim/nvim-lspconfig',
|
||||
{
|
||||
'hrsh7th/nvim-cmp',
|
||||
event = "InsertEnter",
|
||||
dependencies = {
|
||||
'hrsh7th/cmp-nvim-lsp', -- LSP
|
||||
'L3MON4D3/LuaSnip', -- snippets
|
||||
'saadparwaiz1/cmp_luasnip', -- nvim-cmp source for LuaSnip
|
||||
'hrsh7th/cmp-buffer', -- nvim-cmp source for buffer words
|
||||
'hrsh7th/cmp-path', -- nvim-cmp source for filesystem paths
|
||||
'hrsh7th/cmp-cmdline', -- command line
|
||||
'hrsh7th/cmp-omni', -- source for omnifunc
|
||||
'hrsh7th/cmp-nvim-lua', -- nvim lua
|
||||
},
|
||||
},
|
||||
{
|
||||
'kdheepak/cmp-latex-symbols', -- latex math
|
||||
ft = { 'julia', },
|
||||
},
|
||||
{
|
||||
"nvim-treesitter/nvim-treesitter",
|
||||
build = ":TSUpdate",
|
||||
dependencies = {
|
||||
"nvim-treesitter/nvim-treesitter-textobjects",
|
||||
},
|
||||
},
|
||||
{
|
||||
'nvim-telescope/telescope.nvim',
|
||||
dependencies = {
|
||||
'nvim-lua/plenary.nvim'
|
||||
},
|
||||
},
|
||||
{
|
||||
'folke/trouble.nvim',
|
||||
-- config = function
|
||||
},
|
||||
})
|
||||
|
||||
-----------------------------------------------------------
|
||||
-- Adding filetype 'satysfi'
|
||||
vim.filetype.add {
|
||||
extension = {
|
||||
saty = 'satysfi',
|
||||
satyh = 'satysfi',
|
||||
satyg = 'satysfi',
|
||||
},
|
||||
pattern = {
|
||||
['.*%.satyh%-%a+'] = 'satysfi',
|
||||
},
|
||||
}
|
||||
|
||||
-----------------------------------------------------------
|
||||
-- basic configurations
|
||||
vim.o.number = true
|
||||
|
@ -19,8 +148,26 @@ highlight cursorcolumn ctermbg=235
|
|||
]])
|
||||
vim.o.mouse = 'a'
|
||||
vim.o.signcolumn = 'yes'
|
||||
vim.o.ignorecase = true
|
||||
vim.o.ignorecase = true -- keep signcolumn on
|
||||
vim.o.smartcase = true
|
||||
vim.o.errorbells = true
|
||||
-- vim.o.visualbell = false -- this is default
|
||||
vim.opt.undofile = true -- Save undo history
|
||||
vim.o.completeopt = 'menuone,noselect' -- for better completion experience
|
||||
vim.o.termguicolors = true
|
||||
|
||||
-- color scheme
|
||||
require('catppuccin').setup({
|
||||
transparent_background = true,
|
||||
})
|
||||
vim.cmd.colorscheme "catppuccin"
|
||||
|
||||
-----------------------------------------------------------
|
||||
-- some terminalmode settings
|
||||
vim.keymap.set('t', '<C-w>h', '<C-\\><C-N><C-w>h', { noremap = true, desc = "Exit terminal-mode and move to left window."})
|
||||
vim.keymap.set('t', '<C-w>j', '<C-\\><C-N><C-w>j', { noremap = true, desc = "Exit terminal-mode and move to down window."})
|
||||
vim.keymap.set('t', '<C-w>k', '<C-\\><C-N><C-w>k', { noremap = true, desc = "Exit terminal-mode and move to up window."})
|
||||
vim.keymap.set('t', '<C-w>l', '<C-\\><C-N><C-w>l', { noremap = true, desc = "Exit terminal-mode and move to right window."})
|
||||
|
||||
-----------------------------------------------------------
|
||||
-- to use PowerShell on Windows
|
||||
|
@ -40,118 +187,342 @@ if vim.fn.has('win32') == 1 then
|
|||
vim.opt.shellxquote = ''
|
||||
end
|
||||
|
||||
-----------------------------------------------------------
|
||||
-- comment setting for satysfi
|
||||
local ft = require('Comment.ft')
|
||||
ft.set('satysfi', '%%s')
|
||||
|
||||
-----------------------------------------------------------
|
||||
-- Plugins
|
||||
require 'plugins'
|
||||
vim.cmd [[autocmd BufWritePost plugins.lua PackerCompile]]
|
||||
|
||||
|
||||
-- LSP
|
||||
-- https://zenn.dev/botamotch/articles/21073d78bc68bf
|
||||
-- 1. LSP Sever management
|
||||
--require('mason').setup()
|
||||
--require('mason-lspconfig').setup_handlers({ function(server)
|
||||
-- local opt = {
|
||||
-- -- -- Function executed when the LSP server startup
|
||||
-- -- on_attach = function(client, bufnr)
|
||||
-- -- local opts = { noremap=true, silent=true }
|
||||
-- -- vim.api.nvim_buf_set_keymap(bufnr, 'n', 'K', '<cmd>lua vim.lsp.buf.hover()<CR>', opts)
|
||||
-- -- vim.cmd 'autocmd BufWritePre * lua vim.lsp.buf.formatting_sync(nil, 1000)'
|
||||
-- -- end,
|
||||
-- capabilities = require('cmp_nvim_lsp').update_capabilities(
|
||||
-- vim.lsp.protocol.make_client_capabilities()
|
||||
-- )
|
||||
-- }
|
||||
-- require('lspconfig')[server].setup(opt)
|
||||
--end })
|
||||
--
|
||||
---- 2. build-in LSP function
|
||||
---- keyboard shortcut
|
||||
--vim.keymap.set('n', 'K', '<cmd>lua vim.lsp.buf.hover()<CR>')
|
||||
--vim.keymap.set('n', 'gf', '<cmd>lua vim.lsp.buf.formatting()<CR>')
|
||||
--vim.keymap.set('n', 'gr', '<cmd>lua vim.lsp.buf.references()<CR>')
|
||||
--vim.keymap.set('n', 'gd', '<cmd>lua vim.lsp.buf.definition()<CR>')
|
||||
--vim.keymap.set('n', 'gD', '<cmd>lua vim.lsp.buf.declaration()<CR>')
|
||||
--vim.keymap.set('n', 'gi', '<cmd>lua vim.lsp.buf.implementation()<CR>')
|
||||
--vim.keymap.set('n', 'gt', '<cmd>lua vim.lsp.buf.type_definition()<CR>')
|
||||
--vim.keymap.set('n', 'gn', '<cmd>lua vim.lsp.buf.rename()<CR>')
|
||||
--vim.keymap.set('n', 'ga', '<cmd>lua vim.lsp.buf.code_action()<CR>')
|
||||
--vim.keymap.set('n', 'ge', '<cmd>lua vim.diagnostic.open_float()<CR>')
|
||||
--vim.keymap.set('n', 'g]', '<cmd>lua vim.diagnostic.goto_next()<CR>')
|
||||
--vim.keymap.set('n', 'g[', '<cmd>lua vim.diagnostic.goto_prev()<CR>')
|
||||
---- LSP handlers
|
||||
--vim.lsp.handlers["textDocument/publishDiagnostics"] = vim.lsp.with(
|
||||
-- vim.lsp.diagnostic.on_publish_diagnostics, { virtual_text = false }
|
||||
--)
|
||||
---- Reference highlight
|
||||
--vim.cmd [[
|
||||
--set updatetime=500
|
||||
--highlight LspReferenceText cterm=underline ctermfg=1 ctermbg=8 gui=underline guifg=#A00000 guibg=#104040
|
||||
--highlight LspReferenceRead cterm=underline ctermfg=1 ctermbg=8 gui=underline guifg=#A00000 guibg=#104040
|
||||
--highlight LspReferenceWrite cterm=underline ctermfg=1 ctermbg=8 gui=underline guifg=#A00000 guibg=#104040
|
||||
--augroup lsp_document_highlight
|
||||
-- autocmd!
|
||||
-- autocmd CursorHold,CursorHoldI * lua vim.lsp.buf.document_highlight()
|
||||
-- autocmd CursorMoved,CursorMovedI * lua vim.lsp.buf.clear_references()
|
||||
--augroup END
|
||||
--]]
|
||||
--
|
||||
---- 3. completion (hrsh7th/nvim-cmp)
|
||||
--local cmp = require("cmp")
|
||||
--cmp.setup({
|
||||
-- snippet = {
|
||||
-- expand = function(args)
|
||||
-- vim.fn["vsnip#anonymous"](args.body)
|
||||
-- end,
|
||||
-- },
|
||||
-- sources = {
|
||||
-- { name = "nvim_lsp" },
|
||||
-- -- { name = "buffer" },
|
||||
-- -- { name = "path" },
|
||||
-- },
|
||||
-- mapping = cmp.mapping.preset.insert({
|
||||
-- ["<C-p>"] = cmp.mapping.select_prev_item(),
|
||||
-- ["<C-n>"] = cmp.mapping.select_next_item(),
|
||||
-- ['<C-l>'] = cmp.mapping.complete(),
|
||||
-- ['<C-e>'] = cmp.mapping.abort(),
|
||||
-- ["<CR>"] = cmp.mapping.confirm { select = true },
|
||||
-- }),
|
||||
-- experimental = {
|
||||
-- ghost_text = true,
|
||||
-- },
|
||||
--})
|
||||
---- cmp.setup.cmdline('/', {
|
||||
---- mapping = cmp.mapping.preset.cmdline(),
|
||||
---- sources = {
|
||||
---- { name = 'buffer' }
|
||||
---- }
|
||||
---- })
|
||||
---- cmp.setup.cmdline(":", {
|
||||
---- mapping = cmp.mapping.preset.cmdline(),
|
||||
---- sources = {
|
||||
---- { name = "path" },
|
||||
---- { name = "cmdline" },
|
||||
---- },
|
||||
---- })
|
||||
|
||||
-- satysfi language server
|
||||
--require('lspconfig')['satysfi-ls'].setup{
|
||||
-- autostart = true
|
||||
--}
|
||||
-- vimtex
|
||||
vim.g.vimtex_view_method = 'general' -- which is installed on both win and linux
|
||||
|
||||
-----------------------------------------------------------
|
||||
-- Ctrl + P to invoke fzf file search
|
||||
vim.api.nvim_set_keymap('n', '<c-P>',
|
||||
"<cmd>lua require('fzf-lua').files()<CR>",
|
||||
{ noremap = true, silent = true })
|
||||
-- iron (repl)
|
||||
local iron = require('iron.core')
|
||||
iron.setup {
|
||||
config = {
|
||||
scratch_repl = true, -- repl should be discarded
|
||||
repl_definition = {
|
||||
fish = {
|
||||
command = { 'fish' },
|
||||
},
|
||||
julia = {
|
||||
command = { 'julia', },
|
||||
},
|
||||
shell = {
|
||||
command = { 'sh', },
|
||||
},
|
||||
},
|
||||
repl_open_cmd = require('iron.view').split.botright('30%'), -- repl view config
|
||||
},
|
||||
keymaps = {
|
||||
send_motion = "<space>sc",
|
||||
visual_send = "<space>sc",
|
||||
send_file = "<space>sf",
|
||||
send_line = "<space>sl",
|
||||
send_mark = "<space>sm",
|
||||
mark_motion = "<space>mc",
|
||||
mark_visual = "<space>mc",
|
||||
remove_mark = "<space>md",
|
||||
cr = "<space>s<cr>",
|
||||
interrupt = "<space>s<space>",
|
||||
exit = "<space>sq",
|
||||
clear = "<space>cl",
|
||||
},
|
||||
}
|
||||
-- keymap for iron repl
|
||||
vim.keymap.set('n', '<C-@>', '<cmd>IronRepl<cr>')
|
||||
|
||||
-----------------------------------------------------------
|
||||
-- gitsigns
|
||||
require('gitsigns').setup {
|
||||
on_attach = function(bufnr)
|
||||
local gs = package.loaded.gitsigns
|
||||
|
||||
---custom mapping func
|
||||
---@param mode string|string[]
|
||||
---@param l string
|
||||
---@param r any
|
||||
---@param opts table?
|
||||
local function map(mode, l, r, opts)
|
||||
opts = opts or {}
|
||||
opts.buffer = bufnr
|
||||
vim.keymap.set(mode, l, r, opts)
|
||||
end
|
||||
|
||||
-- Navigation
|
||||
map('n', ']c', function()
|
||||
if vim.wo.diff then return ']c' end
|
||||
vim.schedule(function() gs.next_hunk() end)
|
||||
return '<Ignore>'
|
||||
end, {expr=true})
|
||||
map('n', '[c', function()
|
||||
if vim.wo.diff then return '[c' end
|
||||
vim.schedule(function() gs.prev_hunk() end)
|
||||
return '<Ignore>'
|
||||
end, {expr=true})
|
||||
end
|
||||
}
|
||||
|
||||
-----------------------------------------------------------
|
||||
-- lualine
|
||||
require('lualine_setup')
|
||||
lualine = require('lualine')
|
||||
lualine.setup({
|
||||
options = { theme = 'iceberg_dark' }
|
||||
|
||||
-----------------------------------------------------------
|
||||
-- telescope
|
||||
vim.keymap.set('n', '<c-P>', function() require('telescope.builtin').find_files { sort_lastused = true } end) -- fd?
|
||||
|
||||
-----------------------------------------------------------
|
||||
-- Treesitter
|
||||
-- manually install parsers with `:TSInstall <language>`
|
||||
|
||||
-- satysfi (https://github.com/monaqa/tree-sitter-satysfi)
|
||||
local parser_config = require "nvim-treesitter.parsers".get_parser_configs()
|
||||
parser_config.satysfi = {
|
||||
install_info = {
|
||||
url = "https://github.com/monaqa/tree-sitter-satysfi",
|
||||
files = { "src/parser.c", "src/scanner.c" }
|
||||
},
|
||||
filetype = 'satysfi',
|
||||
}
|
||||
|
||||
-- setup
|
||||
require'nvim-treesitter.configs'.setup {
|
||||
ensure_installed = {
|
||||
'satysfi',
|
||||
},
|
||||
highlight = {
|
||||
enable = true,
|
||||
},
|
||||
incremental_selection = {
|
||||
enable = true,
|
||||
keymaps = {
|
||||
init_selection = "gnn",
|
||||
node_incremental = "grn",
|
||||
scope_incremental = "grc",
|
||||
node_decremental = "grm",
|
||||
},
|
||||
},
|
||||
indent = {
|
||||
enable = true,
|
||||
},
|
||||
textobjects = {
|
||||
select = {
|
||||
enable = true,
|
||||
lookahead = true,
|
||||
keymaps = {
|
||||
['aa'] = '@parameter.outer',
|
||||
['ia'] = '@parameter.inner',
|
||||
['af'] = '@function.outer',
|
||||
['if'] = '@function.inner',
|
||||
['ac'] = '@class.outer',
|
||||
['ic'] = '@class.inner',
|
||||
},
|
||||
},
|
||||
move = {
|
||||
enable = true,
|
||||
set_jumps = true,
|
||||
goto_next_start = {
|
||||
[']m'] = '@function.outer',
|
||||
[']]'] = '@class.outer',
|
||||
},
|
||||
goto_next_end = {
|
||||
[']M'] = '@function.outer',
|
||||
[']['] = '@class.outer',
|
||||
},
|
||||
goto_previous_start = {
|
||||
['[m'] = '@function.outer',
|
||||
['[['] = '@class.outer',
|
||||
},
|
||||
goto_previous_end = {
|
||||
['[M'] = '@function.outer',
|
||||
['[]'] = '@class.outer',
|
||||
},
|
||||
},
|
||||
swap = {
|
||||
enable = true,
|
||||
swap_next = {
|
||||
['<space>a'] = '@parameter.inner',
|
||||
},
|
||||
swap_previous = {
|
||||
['<space>A'] = '@parameter.inner',
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
-----------------------------------------------------------
|
||||
-- LSP config
|
||||
|
||||
local lspconfig = require 'lspconfig'
|
||||
|
||||
-- Mapping for language server
|
||||
-- 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)
|
||||
|
||||
-- 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 <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 function
|
||||
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', 'g1', vim.lsp.buf.implementation, bufopts)
|
||||
vim.keymap.set('n', '<C-k>', vim.lsp.buf.signature_help, bufopts)
|
||||
vim.keymap.set('n', '<space>wa', vim.lsp.buf.add_workspace_folder, bufopts)
|
||||
vim.keymap.set('n', '<space>wr', vim.lsp.buf.remove_workspace_folder, bufopts)
|
||||
vim.keymap.set('n', '<space>wl', function()
|
||||
print(vim.inspect(vim.lsp.buf.list_workspace_folders()))
|
||||
end, bufopts)
|
||||
vim.keymap.set('n', '<space>D', vim.lsp.buf.type_definition, bufopts)
|
||||
vim.keymap.set('n', '<space>rn', vim.lsp.buf.rename, bufopts)
|
||||
vim.keymap.set('n', '<space>ca', vim.lsp.buf.code_action, bufopts)
|
||||
vim.keymap.set('n', 'grf', vim.lsp.buf.references, bufopts)
|
||||
vim.keymap.set('n', '<space>f', function() vim.lsp.buf.format { async = true } end, bufopts)
|
||||
end
|
||||
|
||||
-- cmp_nvim_lsp supports additional LSP completion capabilities
|
||||
local capabilities = require("cmp_nvim_lsp").default_capabilities()
|
||||
|
||||
|
||||
|
||||
-- Lua
|
||||
lspconfig.lua_ls.setup {
|
||||
on_attach = on_attach,
|
||||
capabilities = capabilities,
|
||||
settings = {
|
||||
Lua = {
|
||||
runtime = {
|
||||
version = 'LuaJIT',
|
||||
},
|
||||
diagnostics = {
|
||||
globals = {'vim'},
|
||||
},
|
||||
workspace = {
|
||||
library = vim.api.nvim_get_runtime_file("", true),
|
||||
},
|
||||
telemetry = {
|
||||
enable = false,
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
-- Julia
|
||||
lspconfig.julials.setup {
|
||||
on_attach = on_attach,
|
||||
capabilities = capabilities,
|
||||
}
|
||||
-- SATySFi
|
||||
lspconfig.satysfi_ls.setup {
|
||||
on_attach = on_attach,
|
||||
capabilities = capabilities,
|
||||
autostart = true,
|
||||
}
|
||||
-- bash
|
||||
lspconfig.bashls.setup {
|
||||
on_attach = on_attach,
|
||||
capabilities = capabilities,
|
||||
}
|
||||
-- python
|
||||
lspconfig.pyright.setup {
|
||||
on_attach = on_attach,
|
||||
capabilities = capabilities,
|
||||
}
|
||||
-- rust
|
||||
lspconfig.rust_analyzer.setup {
|
||||
on_attach = on_attach,
|
||||
capabilities = capabilities,
|
||||
}
|
||||
-- tex
|
||||
lspconfig.texlab.setup {
|
||||
on_attach = on_attach,
|
||||
capabilities = capabilities,
|
||||
}
|
||||
-- -- jetls
|
||||
-- lspconfig.jetls.setup {}
|
||||
|
||||
-- nvim-cmp setup
|
||||
local cmp = require 'cmp'
|
||||
local luasnip = require 'luasnip'
|
||||
luasnip.config.setup {}
|
||||
|
||||
cmp.setup {
|
||||
snippet = {
|
||||
expand = function(args)
|
||||
luasnip.lsp_expand(args.body)
|
||||
end,
|
||||
},
|
||||
mapping = cmp.mapping.preset.insert({
|
||||
['<C-u>'] = cmp.mapping.scroll_docs(-4), -- Up
|
||||
['<C-d>'] = cmp.mapping.scroll_docs(4), -- Down
|
||||
['<C-Space>'] = cmp.mapping.complete(),
|
||||
['<CR>'] = cmp.mapping.confirm {
|
||||
behavior = cmp.ConfirmBehavior.Replace,
|
||||
select = true,
|
||||
},
|
||||
['<Tab>'] = cmp.mapping(function(fallback)
|
||||
if cmp.visible() then
|
||||
cmp.select_next_item()
|
||||
elseif luasnip.expand_or_jumpable() then
|
||||
luasnip.expand_or_jump()
|
||||
else
|
||||
fallback()
|
||||
end
|
||||
end, { 'i', 's' }),
|
||||
['<S-Tab>'] = cmp.mapping(function(fallback)
|
||||
if cmp.visible() then
|
||||
cmp.select_prev_item()
|
||||
elseif luasnip.jumpable(-1) then
|
||||
luasnip.jump(-1)
|
||||
else
|
||||
fallback()
|
||||
end
|
||||
end, { 'i', 's' }),
|
||||
}),
|
||||
sources = {
|
||||
{ name = 'nvim_lsp' },
|
||||
{ name = 'luasnip' },
|
||||
{ name = 'buffer' },
|
||||
{
|
||||
name = 'latex_symbols',
|
||||
option = {
|
||||
strategy = 0, -- mixed (show the comand and insert the symbol)
|
||||
},
|
||||
},
|
||||
{ name = 'path' },
|
||||
{ name = 'nvim_lua' },
|
||||
},
|
||||
}
|
||||
-- cmdline completions
|
||||
-- `/` cmdline setup.
|
||||
cmp.setup.cmdline({ '/', '?' }, {
|
||||
mapping = cmp.mapping.preset.cmdline(),
|
||||
sources = {
|
||||
{ name = 'buffer' }
|
||||
}
|
||||
})
|
||||
lualine.setup()
|
||||
-- ':'
|
||||
cmp.setup.cmdline(':', {
|
||||
mapping = cmp.mapping.preset.cmdline(),
|
||||
sources = cmp.config.sources({
|
||||
{ name = 'path' }
|
||||
}, {
|
||||
{
|
||||
name = 'cmdline',
|
||||
option = {
|
||||
ignore_cmds = { 'Man', '!' }
|
||||
}
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
|
|
|
@ -0,0 +1,68 @@
|
|||
-- local cmd = {
|
||||
-- 'julia',
|
||||
-- '--startup-file=no',
|
||||
-- '--history-file=no',
|
||||
-- '-e',
|
||||
-- [[
|
||||
-- # Load JETLS.jl: attempt to load from ~/.julia/environments/nvim-lspconfig
|
||||
-- # with the regular load path as a fallback
|
||||
-- jet_install_path = joinpath(
|
||||
-- get(DEPOT_PATH, 1, joinpath(homedir(), ".julia")),
|
||||
-- "environments", "nvim-lspconfig"
|
||||
-- )
|
||||
-- pushfirst!(LOAD_PATH, jet_install_path)
|
||||
-- using JETLS
|
||||
-- popfirst!(LOAD_PATH)
|
||||
-- depot_path = get(ENV, "JULIA_DEPOT_PATH", "")
|
||||
-- project_path = let
|
||||
-- dirname(something(
|
||||
-- ## 1. Finds an explicitly set project (JULIA_PROJECT)
|
||||
-- Base.load_path_expand((
|
||||
-- p = get(ENV, "JULIA_PROJECT", nothing);
|
||||
-- p === nothing ? nothing : isempty(p) ? nothing : p
|
||||
-- )),
|
||||
-- ## 2. Look for a Project.toml file in the current working directory,
|
||||
-- ## or parent directories, with $HOME as an upper boundary
|
||||
-- Base.current_project(),
|
||||
-- ## 3. First entry in the load path
|
||||
-- get(Base.load_path(), 1, nothing),
|
||||
-- ## 4. Fallback to default global environment,
|
||||
-- ## this is more or less unreachable
|
||||
-- Base.load_path_expand("@v#.#"),
|
||||
-- ))
|
||||
-- end
|
||||
-- @info "Running JETLS language server" VERSION pwd() project_path
|
||||
-- @info "not running yet"
|
||||
-- JETLS.runserver(stdin, stdout)
|
||||
-- ]],
|
||||
-- }
|
||||
local cmd = {
|
||||
'julia',
|
||||
'--startup-file=no',
|
||||
'--history-file=no',
|
||||
'-e',
|
||||
[[
|
||||
println("===STARTING JETLS===")
|
||||
using JETLS
|
||||
JETLS.runserver(stdin, stdout)
|
||||
@info "Running JETLS" VERSION pwd() project_path
|
||||
@info "============================"
|
||||
]],
|
||||
}
|
||||
|
||||
return {
|
||||
default_config = {
|
||||
cmd = cmd,
|
||||
filetypes = { 'julia' },
|
||||
root_dir = function(fname)
|
||||
local util = require 'lspconfig.util'
|
||||
return util.root_pattern 'Project.toml' (fname) or util.find_git_ancestor(fname) or
|
||||
util.path.dirname(fname)
|
||||
end,
|
||||
},
|
||||
docs = {
|
||||
description = [[
|
||||
TBW
|
||||
]],
|
||||
},
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
# https://zenn.dev/monaqa/articles/2021-12-10-satysfi-language-server
|
||||
-- https://zenn.dev/monaqa/articles/2021-12-10-satysfi-language-server
|
||||
local util = require 'lspconfig.util'
|
||||
|
||||
return {
|
||||
|
@ -18,3 +18,4 @@ return {
|
|||
},
|
||||
},
|
||||
}
|
||||
|
|
@ -1,29 +0,0 @@
|
|||
vim.cmd [[packadd packer.nvim]]
|
||||
|
||||
return require('packer').startup(function(use)
|
||||
use 'wbthomason/packer.nvim'
|
||||
|
||||
-- fzf
|
||||
use { 'ibhagwan/fzf-lua',
|
||||
-- optional icon
|
||||
--requires = { 'kyazdan142/nvim-web/devicons' } -- not found
|
||||
}
|
||||
|
||||
-- lualine(statusline)
|
||||
use {
|
||||
'nvim-lualine/lualine.nvim',
|
||||
requires = { 'kyazdani42/nvim-web-devicons', opt = true }
|
||||
}
|
||||
|
||||
-- LSP
|
||||
use 'neovim/nvim-lspconfig'
|
||||
use "williamboman/mason.nvim"
|
||||
use "williamboman/mason-lspconfig.nvim"
|
||||
use "hrsh7th/nvim-cmp"
|
||||
use "hrsh7th/cmp-nvim-lsp"
|
||||
use "hrsh7th/vim-vsnip"
|
||||
|
||||
-- Julia
|
||||
use "JuliaEditorSupport/julia-vim"
|
||||
|
||||
end)
|
|
@ -31,11 +31,27 @@ set -g base-index 1
|
|||
# start pane index at 1
|
||||
setw -g pane-base-index 1
|
||||
|
||||
set-option -g pane-border-indicators both
|
||||
set-option -g pane-border-lines heavy
|
||||
|
||||
|
||||
# -----------------------------------------------
|
||||
# status line configs
|
||||
set-option -g monitor-bell on
|
||||
set-option -g status-interval 1
|
||||
set-option -g status-left '#[bg=colour156 bold]#{?client_prefix,#[reverse] P #[noreverse],#{?copy_cursor_x,#[bg=colour216] C , P }}#[bg=default nobold][#S] ' # indicates prefix and copy status
|
||||
set-option -g status-left-length 15
|
||||
set-option -g status-right "#[bg=colour156] #T | %y/%m/%d %H:%M:%S"
|
||||
set-option -g status-right-length 90
|
||||
#set-window-option -g window-status-format "#[bg=green]#I:#W-" # default
|
||||
set-window-option -g window-status-current-format "#[bg=colour156]#I:#W*"
|
||||
|
||||
# -----------------------------------------------
|
||||
# true colour
|
||||
# alacritty: alacritty
|
||||
# wezterm xfce-terminal konsole gnome-terminal: xterm-256color
|
||||
set -ga terminal-overrides ",alacritty:RGB,xterm-256color:RGB"
|
||||
|
||||
set-option -g focus-events on
|
||||
set -s escape-time 100
|
||||
|
||||
|
|
Loading…
Reference in a new issue