nvim/vimrc

330 lines
9 KiB
VimL
Raw Normal View History

" Anthony Perkins
" Config for NeoVIM.
2022-12-10 22:56:03 +00:00
" Distributed under the VIM license. See ':help license' for a copy. Files under
2023-03-27 22:09:11 +00:00
" pack/ have their own licenses.
" Includes parts from Tim Pope's «sensible.vim»
" <https://github.com/tpope/vim-sensible>.
" This should be gradually migrated to init.lua. Many settings in this file will
" be redundant for NeoVIM because the defaults have changed, or the setting will
" not apply.
2022-06-22 14:43:01 +00:00
"===============================================================================
" Set this first to avoid overwriting later settings.
set nocompatible
2022-06-22 14:43:01 +00:00
"===============================================================================
2017-04-10 13:04:34 +00:00
" General settings for all builds.
2022-06-22 11:12:32 +00:00
" Set colour levels for different terminals.
set t_Co=256
set termguicolors
2023-05-15 10:56:29 +00:00
" Disable arrow keys.
inoremap <Down> <Nop>
inoremap <Left> <Nop>
inoremap <Right> <Nop>
inoremap <Up> <Nop>
nnoremap <Down> <Nop>
nnoremap <Left> <Nop>
nnoremap <Right> <Nop>
nnoremap <Up> <Nop>
2020-10-30 13:39:46 +00:00
inoremap <C-BS> <C-W>
inoremap <C-a> <C-O>^
inoremap <C-e> <C-O>$
2023-05-30 12:35:08 +00:00
inoremap <F11> <C-O>:call ACPToggleMargins()<CR>
2020-10-28 12:38:31 +00:00
inoremap <F12> <C-\><C-O>:w<CR>
2023-05-09 14:17:07 +00:00
inoremap <F2> TODO:<Space>
2022-06-07 09:33:23 +00:00
inoremap <F9> <C-R>=strftime('%Y-%m-%dT%H:%M')<CR>
2023-05-30 12:35:08 +00:00
inoremap <S-F11> <C-O>:call ACPToggleMargins()<CR>
2023-05-09 14:17:07 +00:00
inoremap <S-F2> #*TODO:*#<Space>
2019-06-19 08:50:22 +00:00
2023-03-07 21:18:38 +00:00
nnoremap <F10> :Limelight!!<CR>
nnoremap <F11> :call ACPToggleMargins()<CR>
2020-10-28 12:38:31 +00:00
nnoremap <F12> :w<CR>
2023-03-27 22:08:00 +00:00
nnoremap <F2> :call ACPActodoTodo()<CR>
2024-12-10 10:27:55 +00:00
nnoremap <F3> :NvimTreeToggle<CR>
2023-05-09 20:51:42 +00:00
nnoremap <F4> :vsplit<CR>
2024-05-24 08:58:17 +00:00
nnoremap <F6> :set invhlsearch<CR>
2023-03-07 10:54:07 +00:00
nnoremap <F7> :call ACPToggleSpellEnUs()<CR>
2023-05-18 21:55:03 +00:00
nnoremap <F9> :%!clang-format<CR>
nnoremap <Leader>B :bprevious<CR>
nnoremap <Leader>b :bnext<CR>
nnoremap <S-F11> :call ACPToggleMargins()<CR>
2023-03-27 22:08:00 +00:00
nnoremap <S-F2> :call ACPAdocTodo()<CR>
2023-05-09 20:51:42 +00:00
nnoremap <S-F4> :split<CR>
2023-03-07 10:54:07 +00:00
nnoremap <S-F7> :call ACPToggleSpellEnGb()<CR>
2023-05-15 10:50:37 +00:00
2023-05-18 21:55:03 +00:00
vnoremap <F9> :!clang-format<CR>
2019-06-19 08:50:22 +00:00
map <C-ScrollWheelDown> <C-F>
map <C-ScrollWheelUp> <C-B>
map <S-ScrollWheelDown> <C-E>
map <S-ScrollWheelUp> <C-Y>
map <ScrollWheelDown> 3<C-E>
map <ScrollWheelUp> 3<C-Y>
" Text wrapping and margin settings. Setting tw=72 is ideal for emails or
" anything that will be read in a Terminal, while tw=100 is better for code or
2022-06-22 14:43:01 +00:00
" for general text that will be viewed in a GUI. If printing, an A4-sized page
" should fit 100 columns at 8pt or 80 columns at 10pt, in Courier or Liberation
" Mono fonts.
2023-02-06 14:50:41 +00:00
"
" You can highlight line-end columns with colorcolumn (cc), which should be one
" larger than the textwidth. E.g. to include a 'margin-bell' line also:
" set tw=80 cc=73,81
" Clear the colorcolumn highlighting with cc=0.
2023-02-06 15:30:14 +00:00
set colorcolumn=0
2023-05-23 08:37:36 +00:00
set textwidth=0 " Suggestions: 72, 80, 100
" All other settings.
2015-10-13 10:01:04 +00:00
set autoindent
set autoread
set backspace=indent,eol,start
2021-03-09 22:15:25 +00:00
set cmdheight=1
set directory=$TEMP//,/tmp//,.
set display+=lastline
2015-10-19 11:52:42 +00:00
set encoding=utf-8
2022-10-13 08:41:58 +00:00
set expandtab
2021-11-15 19:29:32 +00:00
set formatoptions-=t
2021-03-09 22:15:25 +00:00
set hidden
set history=1000
2015-10-19 11:52:42 +00:00
set ignorecase
set incsearch
set laststatus=2
2015-10-13 10:01:04 +00:00
set linebreak
2015-10-19 11:52:42 +00:00
set list
2022-06-23 10:56:51 +00:00
set listchars=trail,extends:→,precedes:←,nbsp:␣
set modelines=0
2021-03-09 22:15:25 +00:00
set nobackup
set nojoinspaces
set nomodeline
2021-03-09 22:15:25 +00:00
set nowritebackup
set nrformats-=octal
2024-06-07 13:38:34 +00:00
set number
2024-06-11 06:58:17 +00:00
set numberwidth=8
set ruler
2023-03-14 10:03:31 +00:00
set scrolloff=5
set sessionoptions-=options
2022-11-28 22:34:38 +00:00
set shiftwidth=4
2020-10-30 13:36:11 +00:00
set shortmess+=c
2015-10-19 11:52:42 +00:00
set smartcase
set smarttab
2015-10-22 13:10:06 +00:00
set spl=en_gb nospell
2023-05-09 20:51:42 +00:00
set splitbelow
set splitright
2019-08-05 10:18:34 +00:00
set tabstop=8
2024-11-09 22:40:17 +00:00
set title
2024-11-09 22:45:30 +00:00
set titleold=Terminal
set ttimeout
set ttimeoutlen=100
2015-10-19 11:52:42 +00:00
set ttyfast
2020-10-30 13:36:11 +00:00
set updatetime=300
2023-02-09 23:05:17 +00:00
set wrap
2017-04-10 11:33:26 +00:00
2023-05-30 08:28:44 +00:00
" Set theme for Terminal.
set background=dark
2022-06-22 14:43:01 +00:00
"===============================================================================
2017-04-10 13:04:34 +00:00
" General settings for non-minimal Vim builds.
2021-10-05 14:43:37 +00:00
if has('eval')
2022-12-10 22:56:03 +00:00
" Protect commands that are only available when +eval is enabled.
" Technically only 'if 1' would be required, as 'has()' is provided by
" +eval, but this is clearer.
2023-05-10 09:30:38 +00:00
2022-12-10 22:56:03 +00:00
filetype plugin indent on
2023-02-06 14:50:41 +00:00
let g:limelight_default_coefficient=0.8
2022-12-10 22:56:03 +00:00
let g:nroff_is_groff=1
let g:tempus_enforce_background_color=1
2024-06-07 13:33:57 +00:00
colorscheme tempus_totus
2024-04-17 12:56:52 +00:00
highlight Comment gui=NONE
2023-05-09 20:51:42 +00:00
2024-11-09 22:52:56 +00:00
" Disable netrw completely.
let loaded_netrw=1
let loaded_netrwPlugin=1
2023-05-10 09:49:06 +00:00
2023-04-03 15:07:13 +00:00
function! ACPToggleMargins()
2023-05-12 08:01:52 +00:00
execute "set colorcolumn=" . (&colorcolumn == "0" ? "73,81" : (&colorcolumn == "73,81" ? "101" : "0"))
2023-05-23 08:37:36 +00:00
execute "set textwidth=" . (&colorcolumn == "73,81" ? "80" : (&colorcolumn == "101" ? "100" : "0"))
echo "tw=" . &textwidth . " & cc=" . &colorcolumn
2023-04-21 10:20:38 +00:00
endfunction
2023-04-03 15:07:13 +00:00
function! ACPToggleSpellEnUs()
if &spell == 0
setlocal spell spelllang=en_us
echo "Spelling ON (en_US)"
else
setlocal nospell
echo "Spelling OFF"
endif
endfunction
function! ACPToggleSpellEnGb()
if &spell == 0
setlocal spell spelllang=en_gb
echo "Spelling ON (en_GB)"
else
setlocal nospell
echo "Spelling OFF"
endif
endfunction
function! ACPActodoTodo()
" Toggles between TODO, WORK, WAIT, DONE, and blank.
" All are highlighted except DONE and blank.
" Must be at the start of the line, optionally preceeded with
" whitespace. This makes it work for actodo lists.
if getline(line(".")) =~# "TODO: "
s/^\(\s*\)TODO: /\1WORK: /e
2023-04-25 07:49:17 +00:00
echo " Blank -> TODO -> [WORK] -> WAIT -> DONE "
2023-04-03 15:07:13 +00:00
elseif getline(line(".")) =~# "WORK: "
s/^\(\s*\)WORK: /\1WAIT: /e
2023-04-25 07:49:17 +00:00
echo " Blank -> TODO -> WORK -> [WAIT] -> DONE "
2023-04-03 15:07:13 +00:00
elseif getline(line(".")) =~# "WAIT: "
s/^\(\s*\)WAIT: /\1DONE: /e
2023-04-25 07:49:17 +00:00
echo " Blank -> TODO -> WORK -> WAIT -> [DONE]"
2023-04-03 15:07:13 +00:00
elseif getline(line(".")) =~# "DONE: "
s/^\(\s*\)DONE: /\1/e
2023-04-25 07:49:17 +00:00
echo "[Blank] -> TODO -> WORK -> WAIT -> DONE "
2023-04-03 15:07:13 +00:00
else
s/^\(\s*\)/\1TODO: /e
2023-04-25 07:49:17 +00:00
echo " Blank -> [TODO] -> WORK -> WAIT -> DONE "
2023-04-03 15:07:13 +00:00
endif
endfunction
function! ACPAdocTodo()
" Toggles between TODO, WORK, WAIT, DONE, and blank.
" All are highlighted except DONE and blank.
" Must be at the start of the line, optionally preceeded with an
" asterisk and a space. This makes it work for Asciidoc lists.
if getline(line(".")) =~# "[#][*]TODO:[*][#] "
s/^\(\**\s*\)#\*TODO:\*# /\1#*WORK:*# /e
2023-04-25 07:49:17 +00:00
echo " Blank -> TODO -> [WORK] -> WAIT -> DONE "
2023-04-03 15:07:13 +00:00
elseif getline(line(".")) =~# "[#][*]WORK:[*][#] "
s/^\(\**\s*\)#\*WORK:\*# /\1#*WAIT:*# /e
2023-04-25 07:49:17 +00:00
echo " Blank -> TODO -> WORK -> [WAIT] -> DONE "
2023-04-03 15:07:13 +00:00
elseif getline(line(".")) =~# "[#][*]WAIT:[*][#] "
s/^\(\**\s*\)#\*WAIT:\*# /\1*DONE:* /e
2023-04-25 07:49:17 +00:00
echo " Blank -> TODO -> WORK -> WAIT -> [DONE]"
2023-04-03 15:07:13 +00:00
elseif getline(line(".")) =~# "[*]DONE:[*] "
s/^\(\**\s*\)\*DONE:\* /\1/e
2023-04-25 07:49:17 +00:00
echo "[Blank] -> TODO -> WORK -> WAIT -> DONE "
2023-04-03 15:07:13 +00:00
else
s/^\(\**\s*\)/\1#*TODO:*# /e
2023-04-25 07:49:17 +00:00
echo " Blank -> [TODO] -> WORK -> WAIT -> DONE "
2023-04-03 15:07:13 +00:00
endif
endfunction
endif
2022-06-22 14:43:01 +00:00
"===============================================================================
2017-04-10 13:04:34 +00:00
" Settings based on feature detection.
2023-05-30 08:28:44 +00:00
" Set theme for GUI.
2023-08-14 23:54:14 +00:00
if has('gui_running')
2024-06-07 13:33:57 +00:00
set background=light
colorscheme tempus_totus
2024-04-17 12:56:52 +00:00
highlight Comment gui=NONE
2023-05-30 08:28:44 +00:00
endif
2021-10-05 14:43:37 +00:00
if has('autocmd')
2022-12-10 22:56:03 +00:00
autocmd BufRead,BufNewFile *.go set noet sw=8 ts=8
2023-03-22 21:14:14 +00:00
autocmd BufRead,BufNewFile *.html set et sw=2 indk=
2022-12-10 22:56:03 +00:00
autocmd BufRead,BufNewFile *.md set et ft=markdown sw=2
autocmd BufRead,BufNewFile *.opml set et sw=2
2023-04-12 15:17:13 +00:00
autocmd BufRead,BufNewFile *.ps1 set et sw=4 ts=4
2022-12-10 22:56:03 +00:00
autocmd BufRead,BufNewFile *.rs set et sw=4
autocmd BufRead,BufNewFile *.txt set et sw=3 tw=72
autocmd BufRead,BufNewFile *.xml set et sw=2
autocmd BufRead,BufNewFile *.yaml set et sw=2
autocmd BufRead,BufNewFile *.yml set et sw=2
2017-04-10 12:50:30 +00:00
endif
2024-05-24 10:49:53 +00:00
if has('clipboard')
set clipboard=unnamedplus
endif
2021-10-05 14:43:37 +00:00
if has('folding')
2022-12-10 22:56:03 +00:00
set nofoldenable
endif
2021-10-05 14:43:37 +00:00
if has('gui_running')
2022-12-10 22:56:03 +00:00
if has('gui_gtk')
set guifont=Monospace\ 10
2022-12-10 22:56:03 +00:00
elseif has('gui_win32')
set guifont=Cascadia_Mono_SemiLight:h10:W350:cANSI:qDRAFT
2022-12-10 22:56:03 +00:00
set rop=type:directx
endif
set columns=132
set guioptions+=c
set guioptions+=m
set guioptions-=T
set guioptions-=f
set lines=43
2017-04-10 12:50:30 +00:00
endif
2023-02-06 15:34:21 +00:00
if has('linebreak')
set breakindent
endif
2023-02-06 14:20:33 +00:00
if has('mouse_sgr')
set ttymouse=sgr
end
2024-05-09 12:22:50 +00:00
if has('nvim')
set mouse=nv
end
2021-10-05 14:43:37 +00:00
if has('patch-7.3.541')
2022-12-10 22:56:03 +00:00
set formatoptions+=j
2017-04-10 11:33:26 +00:00
endif
2022-06-09 10:23:03 +00:00
if has('patch-8.1.0759')
2024-11-09 21:43:52 +00:00
set listchars+=tab:│  
2022-06-09 10:23:03 +00:00
else
2024-11-09 21:43:52 +00:00
set listchars+=tab:│ 
2022-06-09 10:23:03 +00:00
endif
2021-10-05 14:43:37 +00:00
if has('patch-8.1.1564')
2022-12-10 22:56:03 +00:00
set signcolumn=number
2020-10-30 13:36:11 +00:00
else
2022-12-10 22:56:03 +00:00
set signcolumn=yes
2020-10-30 13:36:11 +00:00
endif
2023-02-22 11:18:23 +00:00
if has('patch-9.0.0640')
set smoothscroll
endif
2021-10-05 14:43:37 +00:00
if has('printer')
2022-12-10 22:56:03 +00:00
set printheader=%t%h%m%=Page\ %N
set printoptions=paper:A4,number:y,syntax:n
endif
2021-10-05 14:43:37 +00:00
if has('smartindent')
2022-12-10 22:56:03 +00:00
set nosmartindent
2017-04-10 12:50:30 +00:00
endif
2021-10-05 14:43:37 +00:00
if has('syntax')
2022-12-10 22:56:03 +00:00
syntax on
2024-11-09 21:49:09 +00:00
highlight NonText guibg=NONE guifg=#E0E0E0
2015-10-13 10:01:04 +00:00
endif
2021-10-05 14:43:37 +00:00
if has('viminfo')
2022-12-10 22:56:03 +00:00
set viminfo="NONE"
2019-08-23 22:09:07 +00:00
endif
2021-10-05 14:43:37 +00:00
if has('wildmenu')
2022-12-10 22:56:03 +00:00
set wildmenu
2019-08-23 22:09:07 +00:00
endif
2022-03-08 16:34:44 +00:00
" Keep this as the last config line in the file.
runtime vimrc.local
2022-06-22 14:43:01 +00:00
"===============================================================================
2017-04-10 13:04:34 +00:00
" End of config file.
2019-08-05 09:53:01 +00:00
" vim:set ft=vim: