292 lines
8.4 KiB
VimL
292 lines
8.4 KiB
VimL
"===============================================================================
|
|
"====================== NVIM Main Configuration File ===========================
|
|
"===============================================================================
|
|
|
|
|
|
|
|
"============================== General Setup ==================================
|
|
"===============================================================================
|
|
" This section contains seme stuff I just want in general.
|
|
|
|
inoremap jk <Esc>
|
|
" Automatic expansion of comments.
|
|
set formatoptions=rqn1
|
|
" Disable mouse.
|
|
set mouse=""
|
|
" Plain old cursor in every mode.
|
|
set guicursor=
|
|
|
|
" Use a different mapleader.
|
|
let mapleader='°'
|
|
|
|
" Don't use arrow keys unless in command mode.
|
|
inoremap <Up> <Nop>
|
|
inoremap <Down> <Nop>
|
|
inoremap <Left> <Nop>
|
|
inoremap <Right> <Nop>
|
|
nnoremap <Up> <Nop>
|
|
nnoremap <Down> <Nop>
|
|
nnoremap <Left> <Nop>
|
|
nnoremap <Right> <Nop>
|
|
vnoremap <Up> <Nop>
|
|
vnoremap <Down> <Nop>
|
|
vnoremap <Left> <Nop>
|
|
vnoremap <Right> <Nop>
|
|
" I disabled this, since the shell requires arrow keys...
|
|
"tnoremap <Up> <Nop>
|
|
"tnoremap <Down> <Nop>
|
|
"tnoremap <Left> <Nop>
|
|
"tnoremap <Right> <Nop>
|
|
|
|
" Getting out of the terminal insert mode is extremely awkward.
|
|
" This mapping solves that.
|
|
tnoremap <Esc><Esc> <C-\><C-n>
|
|
|
|
" Use UTF-8, because we don't live in 1783 anymore.
|
|
set encoding=UTF-8
|
|
|
|
" Why would everything remain highlighted all the time?
|
|
set nohlsearch
|
|
|
|
" Relative numbers are great.
|
|
set number relativenumber
|
|
|
|
" I user :terminal quite often.
|
|
nnoremap <leader>t :sp<Cr>:terminal<Cr>a
|
|
|
|
"====================== Code Style Related Settings ============================
|
|
"===============================================================================
|
|
|
|
" This is basically Python's recommendation.
|
|
set tabstop=4
|
|
set softtabstop=0
|
|
set shiftwidth=4
|
|
set expandtab
|
|
|
|
|
|
"===================== Filetype And Related Settings ===========================
|
|
"===============================================================================
|
|
" This section contains stuff that is related to file types.
|
|
|
|
filetype plugin on
|
|
|
|
set modeline
|
|
set modelines=10
|
|
|
|
|
|
"_______________________________________________________________________________
|
|
"========================= Installing all Plugins ==============================
|
|
"===============================================================================
|
|
" For reasons this has to been done in a single step.
|
|
|
|
call plug#begin('~/.vim/plugged')
|
|
" This is for the LSP stuff.
|
|
Plug 'neovim/nvim-lspconfig'
|
|
Plug 'anott03/nvim-lspinstall'
|
|
Plug 'nvim-lua/completion-nvim'
|
|
Plug 'nvim-lua/lsp-status.nvim'
|
|
|
|
" Inserting unicode characters.
|
|
Plug 'chrisbra/unicode.vim'
|
|
|
|
" Color schemes.
|
|
Plug 'tomasr/molokai'
|
|
Plug 'bluz71/vim-moonfly-colors'
|
|
Plug 'bluz71/vim-nightfly-guicolors'
|
|
Plug 'sainnhe/sonokai'
|
|
Plug 'dylnmc/vulpo.vim'
|
|
|
|
" This is for snippets.
|
|
Plug 'SirVer/ultisnips'
|
|
|
|
" Treesitter seems to be a reall nice
|
|
" plugin for code highlighting.
|
|
Plug 'nvim-treesitter/nvim-treesitter', {'do': ':TSUpdate'}
|
|
|
|
" SLIME brings REPL features to VIM.
|
|
" I will try this out.
|
|
Plug 'jpalardy/vim-slime'
|
|
|
|
" This plugin should allow editing Jupyter Notebooks
|
|
" in VIM.
|
|
Plug 'szymonmaszke/vimpyter'
|
|
|
|
" Firenvim allows to use neovim as the
|
|
" firefox text editor.
|
|
Plug 'glacambre/firenvim', { 'do': { _ -> firenvim#install(0) } }
|
|
|
|
" This is a tree manager
|
|
Plug 'kyazdani42/nvim-web-devicons'
|
|
Plug 'kyazdani42/nvim-tree.lua'
|
|
|
|
" Git Gut.
|
|
Plug 'airblade/vim-gitgutter'
|
|
call plug#end()
|
|
|
|
"===================== Language Server Configuration ===========================
|
|
"===============================================================================
|
|
" This section sets up the language server for the languages I use.
|
|
|
|
" Run this to install pyls if you haven't yet.
|
|
"LspInstall pyls
|
|
"LspInstall bashls
|
|
|
|
" Install ccls from snap or flatpack.
|
|
lua << EOF
|
|
|
|
local nvim_lsp_status = require('lsp-status')
|
|
nvim_lsp_status.register_progress()
|
|
local nvim_lsp = require('lspconfig')
|
|
|
|
-- This basically enables autocompletion
|
|
local on_attach = function(_, bufnr)
|
|
vim.api.nvim_buf_set_option(bufnr, 'omnifunc', 'v:lua.vim.lsp.omnifunc')
|
|
require'completion'.on_attach()
|
|
-- also attach lsp-status
|
|
nvim_lsp_status.on_attach(_, bufnr)
|
|
end
|
|
|
|
-- Enable the language servers.
|
|
nvim_lsp.ccls.setup{on_attach=on_attach, capabilities=nvim_lsp_status.capabilities}
|
|
nvim_lsp.vimls.setup{on_attach=on_attach, capabilities=nvim_lsp_status.capabilities}
|
|
nvim_lsp.pyls.setup{on_attach=on_attach, capabilities=nvim_lsp_status.capabilities}
|
|
nvim_lsp.bashls.setup{on_attach=on_attach, capabilities=nvim_lsp_status.capabilities}
|
|
nvim_lsp.yamlls.setup{on_attach=on_attach, capabilities=nvim_lsp_status.capabilities}
|
|
|
|
EOF
|
|
|
|
|
|
" Highlight the problems in the code.
|
|
highlight LspDiagnosticsDefaultError guifg=BrightRed
|
|
highlight LspDiagnosticsDefaultWarning guifg=BrightYellow
|
|
|
|
" This allows to jump to the definition, and
|
|
" show some documentation respectively.
|
|
nnoremap <silent> gd <cmd>lua vim.lsp.buf.definition()<CR>
|
|
nnoremap <silent> gh <cmd>lua vim.lsp.buf.hover()<CR>
|
|
|
|
" This part sets up lsp diagnostics.
|
|
lua << EOF
|
|
|
|
vim.lsp.handlers["textDocument/publishDiagnostics"] = vim.lsp.with(
|
|
vim.lsp.diagnostic.on_publish_diagnostics, {
|
|
underline = true,
|
|
-- This sets the spacing and the prefix, obviously.
|
|
virtual_text = {
|
|
spacing = 4
|
|
, prefix = '🔙'
|
|
}
|
|
})
|
|
|
|
EOF
|
|
" Statusline
|
|
function! LspStatus() abort
|
|
if luaeval('#vim.lsp.buf_get_clients() > 0')
|
|
return luaeval("require('lsp-status').status()")
|
|
endif
|
|
|
|
return ''
|
|
endfunction
|
|
|
|
"========================= Settings For Autocompletion =========================
|
|
"===============================================================================
|
|
|
|
" This prevents vim from inserting random function heads,
|
|
" and also gives some documentation preview.
|
|
set completeopt=menuone,noinsert,noselect
|
|
|
|
" This prevents the auto-completion from
|
|
" inserting the full method signature.
|
|
let g:completion_enable_auto_signature = 0
|
|
|
|
let g:completion_enable_snippet = 'UltiSnips'
|
|
" Use completion-nvim in every buffer
|
|
autocmd BufEnter * lua require'completion'.on_attach()
|
|
|
|
" This function and mapping is basically related
|
|
" to autocompletion as well.
|
|
" It automatically maps a single bracket to the
|
|
" GNU-style formatted bracket.
|
|
let g:AutoInsertBracket_enable = 0
|
|
|
|
function! AutoInsertBracket()
|
|
if g:AutoInsertBracket_enable
|
|
return "{\n}\<Esc>O"
|
|
else
|
|
return "{"
|
|
endif
|
|
endfunction
|
|
inoremap <expr> { AutoInsertBracket()
|
|
|
|
|
|
|
|
"========================== A Nice Color Scheme ================================
|
|
"===============================================================================
|
|
|
|
"set background=dark
|
|
"let g:airline_theme='one'
|
|
let $NVIM_TUI_ENABLE_TRUE_COLOR=1
|
|
set termguicolors
|
|
" This is for sonokai, a rather nice
|
|
" color scheme.
|
|
"let g:sonokai_style = 'atlantis'
|
|
"let g:sonokai_enable_italic = 0
|
|
"let g:sonokai_disable_italic_comment = 0
|
|
colorscheme molokai
|
|
|
|
"=================== Settings Related to Highlighting ==========================
|
|
"===============================================================================
|
|
|
|
let g:vimsyn_embed = 'l'
|
|
|
|
|
|
"==================== Settings Related to Treesitter ===========================
|
|
"===============================================================================
|
|
|
|
" Install the language parsers.
|
|
"TSInstall python
|
|
"TSInstall c
|
|
"TSInstall cpp
|
|
"TSInstall bash
|
|
|
|
|
|
|
|
"========================= Settings Related to SLIME ===========================
|
|
"===============================================================================
|
|
|
|
let g:slime_target = 'neovim'
|
|
let g:slime_no_mappings = 1
|
|
xmap <leader>r <Plug>SlimeRegionSend
|
|
nmap <leader>r <Plug>SlimeParagraphSend
|
|
|
|
"======================== Settings Related to IPYNB ============================
|
|
"===============================================================================
|
|
" You have to install notedown pip3 install --user notedown.
|
|
|
|
|
|
"===================== Settings Related to Firenvim ============================
|
|
"===============================================================================
|
|
|
|
if exists('g:started_by_firenvim')
|
|
imap <C-j> <C-n>
|
|
set fileformat=dos
|
|
colorscheme morning
|
|
set guifont=:h9
|
|
endif
|
|
|
|
|
|
"========================== Statusline Settings ================================
|
|
"===============================================================================
|
|
|
|
set statusline=
|
|
set statusline+=%-f\ %-y%-r%<
|
|
set statusline+=%=%-0.20{LspStatus()}
|
|
set statusline+=%=%l,%v
|
|
set laststatus=2
|
|
|
|
|
|
"===================== Settings Related to GIT GUD =============================
|
|
"===============================================================================
|
|
|
|
set updatetime=200
|