Fix bug introduced in c0f7b43 that stopped the sourcing of coc.nvim in
neovim.
Add command to the dotbot installation config to install coc.nvim
automatically after pulling its submodule.
203 lines
6.1 KiB
VimL
203 lines
6.1 KiB
VimL
" Plugins ######################################################################
|
|
" Auto completion
|
|
" needs vim >= 8.1.1719 to support features like popup and text property.
|
|
if (has('patch-8.1.1719') || has('nvim'))
|
|
packadd! coc.nvim
|
|
source $XDG_CONFIG_HOME/vim/coc.nvim.vim
|
|
endif
|
|
" Theme
|
|
packadd! onedark.vim
|
|
" Git information
|
|
packadd! vim-gitgutter
|
|
|
|
" Settings #####################################################################
|
|
" hybrid linenumbers
|
|
set number relativenumber
|
|
" no timeout when exiting insert-mode
|
|
" (see https://www.johnhawthorn.com/2012/09/vi-escape-delays/)
|
|
set timeoutlen=1000 ttimeoutlen=0
|
|
" smart case insensitive search (insens: /copy /Copy\c; sens: /Copy /copy\C)
|
|
set ignorecase smartcase
|
|
" Tab size
|
|
set tabstop=4
|
|
" Shift the same amount as tabstop
|
|
set shiftwidth=0
|
|
" Highlight current line
|
|
set cursorline
|
|
" Auto-wrap text and comments; automatically add comment leader when creating
|
|
" new lines and delete it when joining; do not break already too long lines;
|
|
" allow formatting with gq.
|
|
set formatoptions=tcroqlj
|
|
" Autoindent new lines
|
|
set autoindent
|
|
" Copy structure of the existing lines indent when autoindenting a new line
|
|
set copyindent
|
|
" Keep lines under 80 characters.
|
|
set textwidth=80
|
|
" Do not insert two spaces before a new sentence when formatting
|
|
set nojoinspaces
|
|
" see :help persistent-undo
|
|
set undofile
|
|
" Update every 300ms for better experience with plugins like gitgutter and coc
|
|
set updatetime=300
|
|
" Check for spelling in comments and strings
|
|
set spell spelllang=en
|
|
" Show the effect of a command while typing (substitute)
|
|
if (has('nvim'))
|
|
set inccommand=nosplit
|
|
endif
|
|
" Put new window below/right of current
|
|
set splitbelow splitright
|
|
" What is ce there for? cw should include whitespace like dw.
|
|
if (has('nvim'))
|
|
set cpoptions-=_
|
|
else
|
|
nmap cw dwi
|
|
nmap cW dWi
|
|
endif
|
|
" Show ruler at 80 and 100 columns
|
|
set colorcolumn=80,100
|
|
" Show menu for possible matches when using command-line completing.
|
|
if (has('wildmenu'))
|
|
set wildmenu
|
|
endif
|
|
" Command-line completion tab behavior:
|
|
" First: Complete longest common string and show wildmenu
|
|
" Second: Complete each full match (Cycle through the menu)
|
|
set wildmode=longest:full,full
|
|
" Show typed (partial) command on screen.
|
|
if (has('cmdline_info'))
|
|
set showcmd
|
|
endif
|
|
|
|
" Keybindings ##################################################################
|
|
" Set leader key
|
|
let mapleader = "\<Space>"
|
|
" Stop highlighting search result when pressing Return
|
|
nnoremap <silent> <CR> :nohlsearch<CR><CR>
|
|
|
|
" Indentation jump
|
|
" https://vim.fandom.com/wiki/Move_to_next/previous_line_with_same_indentation
|
|
noremap <silent> <C-k> :call search('^'. matchstr(getline('.'), '\(^\s*\)') .'\%<' . line('.') . 'l\S', 'be')<CR>
|
|
noremap <silent> <C-j> :call search('^'. matchstr(getline('.'), '\(^\s*\)') .'\%>' . line('.') . 'l\S', 'e')<CR>
|
|
|
|
" Split view navigation
|
|
" Create new panes
|
|
nnoremap <C-w>N :vsplit<CR>
|
|
nnoremap <C-w>n :split<CR>
|
|
" Move between panes
|
|
nnoremap <C-h> <C-w><C-h>
|
|
nnoremap <C-j> <C-w><C-j>
|
|
nnoremap <C-k> <C-w><C-k>
|
|
nnoremap <C-l> <C-w><C-l>
|
|
|
|
" Substitute command
|
|
if (exists('+inccommand') && &inccommand != '')
|
|
nnoremap S :%s/
|
|
vnoremap S :s/
|
|
else
|
|
" This does not work with live previewing commands (inccommand) since the
|
|
" replace pattern is already defined and thus everything matching the search
|
|
" pattern is just deleted.
|
|
nnoremap S :%s//gc<Left><Left><Left>
|
|
vnoremap S :s//gc<Left><Left><Left>
|
|
endif
|
|
|
|
" Interact with the system clipboard
|
|
if (has('clipboard') || has('nvim'))
|
|
noremap <leader>y "+y
|
|
noremap <leader>d "+d
|
|
noremap <leader>p "+p
|
|
noremap <leader>P "+P
|
|
endif
|
|
|
|
" Ctrl-Backspace should delete words in insert mode and on command-line.
|
|
noremap! <C-H> <C-W>
|
|
|
|
" Correct word with best/first suggestion.
|
|
noremap <leader>c 1z=
|
|
|
|
" Umlaute and sz
|
|
map! ae ä
|
|
map! Ae Ä
|
|
map! oe ö
|
|
map! Oe Ö
|
|
map! ue ü
|
|
map! Ue Ü
|
|
map! sz ß
|
|
|
|
" Aesthetics ###################################################################
|
|
" Use 24-bit (true-color) mode
|
|
if (has('termguicolors'))
|
|
set termguicolors
|
|
" https://github.com/vim/vim/issues/993
|
|
if (&term != 'xterm-256color')
|
|
" set Vim-specific sequences for RGB colors
|
|
let &t_8f = "\e[38;2;%lu;%lu;%lum"
|
|
let &t_8b = "\e[48;2;%lu;%lu;%lum"
|
|
endif
|
|
endif
|
|
" use onedark as theme for syntax highlighting
|
|
syntax on
|
|
colorscheme onedark
|
|
|
|
" get transparent background of the terminal back
|
|
" (at least in nvim, i can't get it to work in vanilla)
|
|
if (has('nvim'))
|
|
highlight Normal guibg=NONE
|
|
highlight NonText guibg=NONE
|
|
endif
|
|
|
|
" Autocommands #################################################################
|
|
" Highlight trailing whitespaces
|
|
" (https://vim.fandom.com/wiki/Highlight_unwanted_spaces)
|
|
" Create highlight group
|
|
highlight ExtraWhitespace ctermbg=red guibg=red
|
|
" Associate with patter (trailing whitespaces)
|
|
match ExtraWhitespace /\s\+$/
|
|
" apply not only to the first window
|
|
autocmd BufWinEnter * match ExtraWhitespace /\s\+$/
|
|
" Do not match when typing at the end of a line
|
|
autocmd InsertEnter * match ExtraWhitespace /\s\+\%#\@<!$/
|
|
" Reset when leaving insert mode
|
|
autocmd InsertLeave * match ExtraWhitespace /\s\+$/
|
|
" Clear all matches
|
|
autocmd BufWinLeave * call clearmatches()
|
|
|
|
" change cursor shape depending on mode
|
|
if (has('nvim'))
|
|
" Beam when exiting
|
|
autocmd VimLeave * silent !echo -ne "\e[5 q"
|
|
else
|
|
" https://vim.fandom.com/wiki/Change_cursor_shape_in_different_modes
|
|
" https://github.com/tmux/tmux/issues/1593
|
|
if exists('$TMUX')
|
|
" Start insert mode - vertical bar/beam
|
|
let &t_SI = "\ePtmux;\e\e[5 q\e\\"
|
|
" Start replace mode - horizontal bar/underline
|
|
let &t_SR = "\ePtmux;\e\e[3 q\e\\"
|
|
" End insert or replace mode - block
|
|
let &t_EI = "\ePtmux;\e\e[1 q\e\\"
|
|
|
|
" Block when entering
|
|
autocmd VimEnter * silent !echo -ne "\ePtmux;\e\e[1 q\e\\"
|
|
" Beam when exiting
|
|
autocmd VimLeave * silent !echo -ne "\ePtmux;\e\e[5 q\e\\"
|
|
else
|
|
" Start insert mode - vertical bar/beam
|
|
let &t_SI = "\e[5 q"
|
|
" Start replace mode - horizontal bar/underline
|
|
let &t_SR = "\e[3 q"
|
|
" End insert or replace mode - block
|
|
let &t_EI = "\e[1 q"
|
|
|
|
" Block when entering
|
|
autocmd VimEnter * silent !echo -ne "\e[1 q"
|
|
" Beam when exiting
|
|
autocmd VimLeave * silent !echo -ne "\e[5 q"
|
|
endif
|
|
endif
|
|
|
|
" Load filetype plugins
|
|
filetype plugin indent on
|