Compare commits

..

1 Commits

Author SHA1 Message Date
17f7e3165d Add :Build command to invoke ninja or make
The `:Build [<target> ...]` command utilises the `$BUILD_DIR` variable set
by `:BuildDir {directory}` to invoke `ninja` or `make` based on the
existence of `$BUILD_DIR/build.ninja` or `$BUILD_DIR/Makefile`
respectively. The following commands are invoked in a new `:terminal`
window.

* `ninja -C $BUILD_DIR [<target> ...]` when `$BUILD_DIR/build.ninja` exists
* `make -C $BUILD_DIR [<target> ...]` when `$BUILD_DIR/Makefile` exists

In the case of `ninja`, completion for the targets supplied to the
`:Build` command is made available by the `build#targets()` function.
The list of targets returned by `ninja -C $BUILD_DIR -t targets` is
processed to generate the list of targets. Support for `make` target
completion is less straight forwards so has been omitted for now.
2021-01-05 21:17:21 +00:00
54 changed files with 387 additions and 969 deletions

9
.conduit.yaml Normal file
View File

@@ -0,0 +1,9 @@
---
- location: ~/.vim
- pip:
- vim-vint
- yamllint
- cmakelint
- repo:
- remote: https://github.com/k-takata/minpac.git
location: ~/.vim/pack/minpac/opt/minpac

1
.gitignore vendored
View File

@@ -2,4 +2,3 @@ local.vim
.netrwhist .netrwhist
pack/* pack/*
spell/* spell/*
*.pyc

View File

@@ -27,15 +27,18 @@ class Comment(object):
endglobal endglobal
snippet todo "TODO commment" snippet todo "TODO commment"
`!p comment=Comment();snip.rv=comment.before()`TODO${1/.+/(/}$1${1/.+/)/}: $0`!p snip.rv=comment.after()` `!p comment=Comment()
snip.rv=comment.before()`TODO${1/.+/(/}$1${1/.+/)/}: $0`!p snip.rv=comment.after()`
endsnippet endsnippet
snippet fixme "FIXME comment" snippet fixme "FIXME comment"
`!p comment=Comment();snip.rv=comment.before()`FIXME${1/.+/(/}$1${1/.+/)/}: $0`!p snip.rv=comment.after()` `!p comment=Comment()
snip.rv=comment.before()`FIXME${1/.+/(/}$1${1/.+/)/}: $0`!p snip.rv=comment.after()`
endsnippet endsnippet
snippet note "NOTE comment" snippet note "NOTE comment"
`!p comment=Comment();snip.rv=comment.before()`NOTE: $0`!p snip.rv=comment.after()` `!p comment=Comment()
snip.rv=comment.before()`NOTE: $0`!p snip.rv=comment.after()`
endsnippet endsnippet
global !p global !p

View File

@@ -1,3 +1,13 @@
snippet _template "help file template"
*`!p snip.rv = snip.fn`* For Vim version 8.0 Last change: `!p
from datetime import datetime
snip.rv = datetime.now().strftime('%B %d, %Y')`
$0
vim:tw=78:ts=8:ft=help:norl:
endsnippet
snippet s "help section" snippet s "help section"
============================================================================== ==============================================================================
${1:1}. ${2:Section}`!p ${1:1}. ${2:Section}`!p

View File

@@ -3,15 +3,20 @@ snippet #! "Shebang"
endsnippet endsnippet
snippet main "Python main stub" snippet main "Python main stub"
from argparse import ArgumentParser
def main(): def main():
${0:pass} parser = ArgumentParser()
parser.add_argument('${0:argument}')
args = parser.parse_args()
if __name__ == '__main__': if __name__ == '__main__':
try: try:
main() main()
except KeyboardInterrupt: except KeyboardInterrupt:
exit(130) pass
endsnippet endsnippet
snippet debug "Set ipdb breakpoint" snippet debug "Set ipdb breakpoint"

View File

@@ -1,5 +1,6 @@
function! s:set_lit_cfg_filetype() function! s:set_lit_cfg_filetype()
set filetype=python set filetype=python
ALEDisableBuffer
endfunction endfunction
au BufNewFile,BufReadPost lit.cfg call s:set_lit_cfg_filetype() au BufNewFile,BufReadPost lit.cfg call s:set_lit_cfg_filetype()

View File

@@ -9,7 +9,11 @@ setlocal comments=sO:*\ -,mO:*\ \ ,exO:*/,s1:/*,mb:*,ex:*/,:///,://
setlocal commentstring=//%s setlocal commentstring=//%s
" Stop automatic new lines which typing long single liners. " Stop automatic new lines which typing long single liners.
setlocal textwidth=0 setlocal textwidth=0
" Map K to get YouCompleteMe documentation.
nnoremap K :YcmCompleter GetDoc<CR>
" "ys{motion}t" turns "word" -> "TODO(word):" " "ys{motion}t" turns "word" -> "TODO(word):"
let b:surround_{char2nr("t")} = "TODO(\r):" let b:surround_{char2nr("t")} = "TODO(\r):"
" "ys{motion}/" turns "text" into "/*text*/" " "ys{motion}/" turns "text" into "/*text*/"
let b:surround_{char2nr("/")} = "/*\r*/" let b:surround_{char2nr("/")} = "/*\r*/"
" Map K to get YouCompleteMe documentation.
nnoremap K :YcmCompleter GetDoc<CR>

View File

@@ -1,3 +1,6 @@
" Add omnifunc completion plugin.
packadd vim-cmake-completion
" Enable syntax folding, see .vim/after/syntax/cmake.vim " Enable syntax folding, see .vim/after/syntax/cmake.vim
setlocal foldmethod=syntax setlocal foldmethod=syntax
" Set comment string " Set comment string

View File

@@ -1 +0,0 @@
vim.bo.commentstring = '//%s'

View File

@@ -1,3 +1,5 @@
" Add Doxygen documentation generation plugin. " Add Doxygen documentation generation plugin.
packadd DoxygenToolkit.vim packadd DoxygenToolkit.vim
nnoremap <leader>d :Dox<CR> nnoremap <leader>d :Dox<CR>
" Map K to get YouCompleteMe documentation
nnoremap K :YcmCompleter GetDoc<CR>

View File

@@ -5,4 +5,4 @@ setlocal nospell
setlocal scrolloff=0 setlocal scrolloff=0
" Don't display line numbers " Don't display line numbers
setlocal nonumber norelativenumber signcolumn=no setlocal nonumber norelativenumber

View File

@@ -1,2 +0,0 @@
setlocal showbreak=
set signcolumn=no

View File

@@ -25,3 +25,6 @@ setlocal encoding=utf-8
" Set up file format " Set up file format
setlocal fileformat=unix setlocal fileformat=unix
let g:python_highlight_all=1 let g:python_highlight_all=1
" Mappings
nnoremap K :YcmCompleter GetDoc<CR>

View File

@@ -1,6 +1,9 @@
" Add omnifunc completion package. " Add omnifunc completion package.
packadd vimomni packadd vimomni
" Mapping for Vim help of the word under cursor.
nnoremap K :help <C-r><C-w><CR>
" Set custom fold expression " Set custom fold expression
setlocal foldmethod=expr setlocal foldmethod=expr
setlocal foldexpr=VimFold(v:lnum) setlocal foldexpr=VimFold(v:lnum)

View File

@@ -1,8 +0,0 @@
if get(g:, 'loaded_tmux_focus_events', 0)
" Override vim-tmux-focue-events command-line mappings when tmux send <F24>
" FocusLost and <F25> FocusLost instead of to call do#sink() which does
" nothing. This is required due to errors emitted from the
" vim-tmux-focus-events plugin when chaning focus.
cnoremap <silent> <F24> <C-\>edo#sink()<CR>
cnoremap <silent> <F25> <C-\>edo#sink()<CR>
endif

View File

@@ -45,7 +45,7 @@ if exists('g:c_doxygen') && g:c_doxygen
" Match: @param name description. @retval name description. " Match: @param name description. @retval name description.
" ^^^^ ^^^^ " ^^^^ ^^^^
syn region cDoxygenSpecial matchgroup=cDoxygenComment start='@\(param\(\[\(\|in\|out\|in,out\)\]\)\?\|retval\)\=\s\+' end='\(\s\|$\)' contained display syn region cDoxygenSpecial matchgroup=cDoxygenComment start='@\(param\(\[\(\|in\|out\|in,out\)\]\)\|retval\)\=\s\+' end='\(\s\|$\)' contained display
" Match: @tparam name description. " Match: @tparam name description.
" ^^^^ " ^^^^

View File

@@ -1,4 +1,3 @@
hi link jsonKeyword Function hi link jsonKeyword Function
hi link jsonNull Constant hi link jsonNull Constant
hi link jsonQuote Delimiter hi link jsonQuote Delimiter
setlocal conceallevel=0

View File

@@ -1,7 +0,0 @@
setlocal tabstop=2
setlocal shiftwidth=2
setlocal softtabstop=2
highlight link yamlBlockMappingKey Keyword
highlight link yamlAnchor PreProc
highlight link yamlAlias PreProc

View File

@@ -0,0 +1,73 @@
" fresh palette
let g:airline#themes#fresh#palette = {}
" NORMAL mode
let s:N1 = ['#005f00', '#afdf00', 22, 148, '']
let s:N2 = ['#ffffff', '#005f00', 15, 22, '']
let s:N3 = ['#ffffff', '#121212', 15, 233, 'bold']
let s:W = ['#000000', '#8700df', 232, 92, '']
let s:E = ['#000000', '#990000', 232, 160]
let g:airline#themes#fresh#palette.normal =
\ airline#themes#generate_color_map(s:N1, s:N2, s:N3)
let g:airline#themes#fresh#palette.normal.airline_warning = s:W
let g:airline#themes#fresh#palette.normal.airline_error = s:E
let g:airline#themes#fresh#palette.normal_modified = {
\ 'airline_c': ['#ffffff', '#5f0087', 15, 53, 'bold'], }
" INSERT mode
let s:I1 = ['#0000df', '#00dfff', 20, 45, '']
let s:I2 = ['#ffffff', '#005fdf', 15, 26, '']
let s:I3 = ['#ffffff', '#121212', 15, 233, 'bold']
let g:airline#themes#fresh#palette.insert =
\ airline#themes#generate_color_map(s:I1, s:I2, s:I3)
let g:airline#themes#fresh#palette.insert.airline_warning = s:W
let g:airline#themes#fresh#palette.insert.airline_error = s:E
let g:airline#themes#fresh#palette.insert_modified =
\ g:airline#themes#fresh#palette.normal_modified
let g:airline#themes#fresh#palette.insert_paste = {
\ 'airline_a': [s:I1[0], '#ffff00', s:I1[2], 11, ''], }
" REPLACE mode
let s:R1 = [s:I2[0], '#af0000', s:I2[2], 124, '']
let s:R2 = ['#ffffff', '#5f0000', 15, 52, '']
let s:R3 = ['#ffffff', '#121212', 15, 233, 'bold']
let g:airline#themes#fresh#palette.replace =
\ airline#themes#generate_color_map(s:R1, s:R2, s:R3)
let g:airline#themes#fresh#palette.replace.airline_warning = s:W
let g:airline#themes#fresh#palette.replace.airline_error = s:E
let g:airline#themes#fresh#palette.replace_modified =
\ g:airline#themes#fresh#palette.normal_modified
" VISAUL mode
let s:V1 = ['#ff5f00', '#ff5f00', 52, 208, '']
let s:V2 = ['#ffffff', '#005f00', 15, 124, '']
let s:V3 = ['#ffffff', '#121212', 15, 233, 'bold']
let g:airline#themes#fresh#palette.visual =
\ airline#themes#generate_color_map(s:V1, s:V2, s:V3)
let g:airline#themes#fresh#palette.visual.airline_warning = s:W
let g:airline#themes#fresh#palette.visual.airline_error = s:E
let g:airline#themes#fresh#palette.visual_modified =
\ g:airline#themes#fresh#palette.normal_modified
" INACTIVE mode
let s:IA1 = ['#4e4e4e', '#1c1c1c', 239, 234, '']
let s:IA2 = ['#4e4e4e', '#262626', 239, 235, '']
let s:IA3 = ['#ffffff', '#121212', 15, 233, 'bold']
let g:airline#themes#fresh#palette.inactive =
\ airline#themes#generate_color_map(s:IA1, s:IA2, s:IA3)
let g:airline#themes#fresh#palette.inactive.airline_warning = s:IA2
let g:airline#themes#fresh#palette.inactive.airline_error = s:IA2
let g:airline#themes#fresh#palette.inactive_modified = {
\ 'airline_c': ['#875faf', '', 97, '', ''], }
let g:airline#themes#fresh#palette.accents = {
\ 'red': [ '#ff0000' , '' , 160 , '' ] }
if !get(g:, 'loaded_ctrlp', 0)
finish
endif
let g:airline#themes#fresh#palette.ctrlp =
\ airline#extensions#ctrlp#generate_color_map(
\ ['#d7d7ff', '#5f00af', 189, 55, ''],
\ ['#ffffff', '#875fd7', 231, 98, ''],
\ ['#5f00af', '#ffffff', 55, 231, 'bold'] )

View File

@@ -1,110 +1,26 @@
function! build#dir(...) abort function! build#dir(dir) abort
if a:0 == 0 let l:cwd = getcwd()
" No arguments, find build directories. let $BUILD_DIR = l:cwd.'/'.a:dir
let s:dirs = split(substitute(globpath('.', 'build*'), '\.\/', '', 'g'), '\n') let g:ycm_clangd_args = ['--compile-commands-dir='.$BUILD_DIR]
let l:len = len(s:dirs) YcmRestartServer
if l:len == 0
echoerr 'no build directories found'
elseif l:len == 1
" One build directory found, use it.
let l:dir = s:dirs[0]
unlet s:dirs
else
" Multiple build directories found, select one.
if exists('*popup_menu')
" Create popup menu to select the build directory. Callback to this
" function on completion, handled in the else branch below.
call popup_menu(s:dirs, #{
\ filter: 'popup_filter_menu',
\ callback: 'build#dir',
\ })
else
" Fallback to inputlist when popup_menu is not available.
let l:choices = []
let l:index = 1
for l:dir in s:dirs
call add(l:choices, string(l:index).': '.l:dir)
let l:index += 1
endfor
let l:index = inputlist(l:choices)
let l:dir = s:dirs[l:index - 1]
echomsg ' '.l:dir
endif
endif
else
if a:0 == 1
" Single argument, invoked by :BuildDir.
let l:dir = a:1
elseif a:0 == 2
" Two arguments, called back by popup_menu().
let l:dirs = s:dirs
unlet s:dirs
if a:2 == -1
" Selection in popup_menu() was cancelled.
return
endif
let l:dir = l:dirs[a:2 - 1]
else
echoerr 'build#dir called with too many arguments'
endif
endif
if exists('l:dir')
" Set build directory.
let l:cwd = substitute(getcwd(), '\\', '\/', 'g')
let $BUILD_DIR = l:cwd.'/'.substitute(l:dir, '\/$', '', '')
if executable('compdb')
" Post-process compile_commands.json with compdb, adds header files to
" missing compile_commands.json for more accurate diagnostics.
let l:database_dir = l:cwd.'/.vim'
let l:compile_commands = l:database_dir.'/compile_commands.json'
call systemlist('compdb -p '.$BUILD_DIR.' list > '.l:compile_commands)
else
let l:database_dir = $BUILD_DIR
endif
" Read/create .vim/coc-settings.json
let l:coc_settings = {}
if isdirectory('.vim')
let l:coc_settings = json_decode(join(readfile('.vim/coc-settings.json'), ''))
else
call mkdir('.vim')
endif
" Update .vim/coc-settings.json with new build directory.
let l:coc_settings['clangd.compilationDatabasePath'] = l:database_dir
let l:coc_settings['cmake.lsp.buildDirectory'] = $BUILD_DIR
call writefile([json_encode(l:coc_settings)], '.vim/coc-settings.json')
" Finally restart coc.nvim with new config.
CocRestart
endif
endfunction endfunction
function! build#targets(ArgLead, CmdLine, CursorPos) abort function! build#targets(ArgLead, CmdLine, CursorPos) abort
if !exists('$BUILD_DIR')
echoerr 'build directory not set'
return ''
endif
let l:targets = [] let l:targets = []
if filereadable($BUILD_DIR.'/build.ninja') if filereadable($BUILD_DIR.'/build.ninja')
" Ask ninja for the list of targets and prepare for returning.
for l:target in split(system('ninja -C '.$BUILD_DIR.' -t targets'), '\n') for l:target in split(system('ninja -C '.$BUILD_DIR.' -t targets'), '\n')
call add(l:targets, substitute(l:target, ':.*$', '', '')) call add(l:targets, substitute(l:target, ':.*$', '', ''))
endfor endfor
elseif filereadable($BUILD_DIR.'/Makefile') elseif filereadable($BUILD_DIR.'/Makefile')
" TODO: Support make, it's much less straight forwards than ninja. " TODO: support make
endif endif
return join(l:targets, "\n") return join(l:targets, "\n")
endfunction endfunction
function! build#run(...) abort function! build#run(...) abort
if !exists('$BUILD_DIR')
call echo#error('build directory not set')
return
endif
let l:build_dir = $BUILD_DIR
if filereadable($BUILD_DIR.'/build.ninja') if filereadable($BUILD_DIR.'/build.ninja')
" Execute ninja in a terminal window. execute 'terminal ninja -C '.$BUILD_DIR.' '.join(a:000, ' ')
execute 'terminal ninja -C '.l:build_dir.' '.join(a:000, ' ')
elseif filereadable($BUILD_DIR.'/Makefile') elseif filereadable($BUILD_DIR.'/Makefile')
" Execute make in a terminal window. execute 'terminal make -C '.$BUILD_DIR.' '.join(a:000, ' ')
execute 'terminal make -C '.l:build_dir.' '.join(a:000, ' ')
endif endif
endfunction endfunction

View File

@@ -69,7 +69,7 @@ function! do#rename_include_guard(old)
call setpos('.', l:pos) call setpos('.', l:pos)
endfunction endfunction
" Setup and start a debugging command " Setup and start a debugging command.
function! do#debug(...) function! do#debug(...)
packadd termdebug packadd termdebug
let l:command = 'TermdebugCommand' let l:command = 'TermdebugCommand'
@@ -86,28 +86,3 @@ function! do#last_change()
norm!`` norm!``
endif endif
endfunction endfunction
" Augment vim-signify update events
function! do#signify() abort
" Disable update on cursor hold
autocmd! signify CursorHold,CursorHoldI
" Enable updates on leaving insert mode
autocmd signify InsertLeave,TextChanged <buffer> call sy#start()
" Enable update on text change e.g. undo/redo
autocmd signify TextChanged <buffer> call sy#start()
endfunction
" A sink for mappings to do nothing
function! do#sink() abort
endfunction
" Used by normal mode K mapping to show documentation
function! do#show_documentation()
if index(['vim','help'], &filetype) >= 0
execute 'help '.expand('<cword>')
elseif coc#rpc#ready() " TODO: Check if the LS supports doHover
call CocActionAsync('doHover')
else
execute '!'.&keywordprg.' '.expand('<cword>')
endif
endfunction

View File

@@ -1,11 +0,0 @@
function! echo#warning(message) abort
echohl WarningMsg
echomsg a:message
echohl None
endfunction
function! echo#error(message) abort
echohl ErrorMsg
echomsg a:message
echohl None
endfunction

View File

@@ -1,14 +0,0 @@
if !has('pythonx')
finish
endif
" set debug=msg,throw
pythonx import format
function! format#clang_format() abort
pythonx format.clang_format()
endfunction
function! format#yapf() abort
pythonx format.yapf()
endfunction

View File

@@ -1,27 +0,0 @@
" Use the OSC 52 escape sequence to copy text to the local system clipboard
" when connected to a remote machine.
" Add an autocmd to run after text is yanked.
function! osc52#autocmd()
augroup osc52
autocmd!
autocmd TextYankPost * call osc52#copy()
augroup END
endfunction
function! osc52#copy()
" Only use OSC 52 when text is yanked with the z register.
if v:event['regname'] ==# 'z'
" Get the register contents and join the list into a string.
let l:content = join(v:event['regcontents'], "\n")
if v:event['regtype'] ==# 'V'
" Append a new line in linewise-visual mode to avoid surprises.
let l:content = l:content."\n"
endif
" Get the parent tty while being compatible with vim and neovim, originally
" from https://github.com/greymd/oscyank.vim
let l:tty = system('(tty || tty < /proc/$PPID/fd/0) 2> /dev/null | grep /dev/')
" Base 64 encode the content, and print OSC 52 escape sequence to the tty.
call system('base64 | xargs -0 printf "\\033]52;c;%s\\a" > '.l:tty, l:content)
endif
endfunction

16
autoload/snippet.vim Normal file
View File

@@ -0,0 +1,16 @@
" Description: Expand snippet on file creation.
" Attempt to expand the _template snippet if this is a new file.
" https://noahfrederick.com/log/vim-templates-with-ultisnips-and-projectionist
function! snippet#template() abort
" Return if non-empty buffer or file exists.
if !(line('$') == 1 && getline('$') ==# '') || filereadable(expand('%'))
return
endif
" Attempt to expand the _template snippet.
execute "normal! i_template\<C-r>=UltiSnips#ExpandSnippet()\<CR>"
if g:ulti_expand_res == 0
" Expansions failed, undo insert.
silent! undo
endif
endfunction

View File

@@ -16,6 +16,6 @@ function! tmux#isOption(option, value) abort
if !tmux#inSession() if !tmux#inSession()
return 0 return 0
endif endif
let l:option = trim(system('tmux show-options -g '.a:option)) let l:set_clipboard = trim(system('tmux show-options -g '.a:option))
return l:option ==# a:option.' '.a:value return l:set_clipboard ==# 'set-clipboard '.a:value
endfunction endfunction

View File

@@ -1,3 +0,0 @@
function! wsl#isDetected() abort
return $WSLENV !=# ''
endfunction

View File

@@ -1,81 +0,0 @@
{
"cmake.lsp.enable": true,
"diagnostic.enableHighlightLineNumber": false,
"diagnostic.errorSign": "▸",
"diagnostic.hintSign": "▸",
"diagnostic.infoSign": "▸",
"diagnostic.warningSign": "▸",
"inlayHint.enable": false,
"powershell.integratedConsole.showOnStartup": false,
"snippets.priority": 100,
"suggest.noselect": true,
"yaml.schemas": {
"https://gitlab.com/gitlab-org/gitlab/-/raw/master/app/assets/javascripts/editor/schema/ci.json": [
".gitlab-ci.yml",
".gitlab/ci.yml",
".gitlab/ci/*.yml"
],
"https://raw.githubusercontent.com/ansible/ansible-lint/main/src/ansiblelint/schemas/ansible-lint-config.json": [
".ansible-lint",
".config/ansible-lint.yml",
".config/ansible-lint.yaml"
],
"https://raw.githubusercontent.com/ansible/ansible-lint/main/src/ansiblelint/schemas/ansible-navigator.json": [
"ansible-navigator.yml",
"ansible-navigator.yaml"
],
"https://raw.githubusercontent.com/ansible/ansible-lint/main/src/ansiblelint/schemas/execution-environment.json": [
"execution-environment.yml",
"execution-environment.yaml"
],
"https://raw.githubusercontent.com/ansible/ansible-lint/main/src/ansiblelint/schemas/galaxy.json": [
"galaxy.yml",
"galaxy.yaml"
],
"https://raw.githubusercontent.com/ansible/ansible-lint/main/src/ansiblelint/schemas/inventory.json": [
"inventory.yaml",
"inventory.yml",
"inventory/*.yml",
"inventory/*.yaml"
],
"https://raw.githubusercontent.com/ansible/ansible-lint/main/src/ansiblelint/schemas/meta-runtime.json": [
"meta/runtime.yml",
"meta/runtime.yaml"
],
"https://raw.githubusercontent.com/ansible/ansible-lint/main/src/ansiblelint/schemas/molecule.json": [
"molecule/*/molecule.yml",
"molecule/*/molecule.yaml"
],
"https://raw.githubusercontent.com/ansible/ansible-lint/main/src/ansiblelint/schemas/playbook.json": [
"playbooks/*.yml",
"playbooks/*.yaml"
],
"https://raw.githubusercontent.com/ansible/ansible-lint/main/src/ansiblelint/schemas/requirements.json": [
"requirements.yml",
"requirements.yaml"
],
"https://raw.githubusercontent.com/ansible/ansible-lint/main/src/ansiblelint/schemas/rulebook.json": [
"rulebooks/*.yml",
"rulebooks/*.yaml"
],
"https://raw.githubusercontent.com/ansible/ansible-lint/main/src/ansiblelint/schemas/tasks.json": [
"tasks/*.yml",
"tasks/*.yaml",
"handlers/*.yml",
"handlers/*.yaml"
],
"https://raw.githubusercontent.com/ansible/ansible-lint/main/src/ansiblelint/schemas/vars.json": [
"playbooks/vars/*.yml",
"playbooks/vars/*.yaml",
"vars/*.yml",
"vars/*.yaml",
"defaults/*.yml",
"defaults/*.yaml",
"host_vars/*.yml",
"host_vars/*.yaml",
"group_vars/*.yml",
"group_vars/*.yaml"
]
},
"snippets.ultisnips.pythonPrompt": false
}

View File

@@ -112,7 +112,7 @@ if has('gui_running') || &t_Co == 256
call s:hi('MatchParen', '', '', '') call s:hi('MatchParen', '', '', '')
call s:hi('ModeMsg', '', '', '') call s:hi('ModeMsg', '', '', '')
call s:hi('MoreMsg', '12', '', '') call s:hi('MoreMsg', '12', '', '')
call s:hi('NonText', '238', '', '') call s:hi('NonText', '', '', '')
call s:hi('Normal', '7', '232', '') call s:hi('Normal', '7', '232', '')
call s:hi('Pmenu', '', '235', '') call s:hi('Pmenu', '', '235', '')
call s:hi('PmenuSel', '', '', 'reverse') call s:hi('PmenuSel', '', '', 'reverse')
@@ -126,9 +126,7 @@ if has('gui_running') || &t_Co == 256
call s:hi('SpellLocal', '5', '', '') call s:hi('SpellLocal', '5', '', '')
call s:hi('SpellRare', '3', '', '') call s:hi('SpellRare', '3', '', '')
call s:hi('StatusLine', '15', '233', '') call s:hi('StatusLine', '15', '233', '')
call s:hi('StatusLineTerm', '15', '233', '')
call s:hi('StatusLineNC', '', '235', '') call s:hi('StatusLineNC', '', '235', '')
call s:hi('StatusLineTermNC', '', '235', '')
call s:hi('TabLine', '246', '235', 'bold') call s:hi('TabLine', '246', '235', 'bold')
call s:hi('TabLineFill', '', '235', '') call s:hi('TabLineFill', '', '235', '')
call s:hi('TabLineSel', '248', '', 'bold') call s:hi('TabLineSel', '248', '', 'bold')
@@ -187,10 +185,6 @@ if has('gui_running') || &t_Co == 256
call s:hi('Todo', '202', '', 'bold') call s:hi('Todo', '202', '', 'bold')
"" }}} "" }}}
"" NVIM Groups {{
call s:hi('NormalFloat', '', '235', '')
"" }}
"" Terminal Groups {{{ "" Terminal Groups {{{
call s:hi('debugBreakpoint', '1', '', 'reverse') call s:hi('debugBreakpoint', '1', '', 'reverse')
call s:hi('debugPC', '25', '', 'reverse') call s:hi('debugPC', '25', '', 'reverse')
@@ -202,15 +196,10 @@ if has('gui_running') || &t_Co == 256
call s:hi('Important', '220', '', 'bold') call s:hi('Important', '220', '', 'bold')
call s:hi('Research', '202', '', 'bold') call s:hi('Research', '202', '', 'bold')
call s:hi('CocErrorSign', '160', '233', '') call s:hi('ALEError', '160', '', '')
call s:hi('CocErrorFloat', '160', '235', '') call s:hi('ALEWarning', '129', '', '')
call s:hi('CocWarningSign', '129', '233', '') call s:hi('ALEErrorSign', '160', '233', 'bold')
call s:hi('CocWarningFloat', '129', '235', '') call s:hi('ALEWarningSign', '129', '233', 'bold')
call s:hi('CocInfoSign', '8', '233', '')
call s:hi('CocInfoFloat', '8', '235', '')
call s:hi('CocHintSign', '33', '233', '')
call s:hi('CocHintFloat', '33', '235', '')
call s:hi('CocInlayHint', '8', '', '')
call s:hi('SyntasticErrorSign', '160', '233', 'bold') call s:hi('SyntasticErrorSign', '160', '233', 'bold')
call s:hi('SyntasticWarningSign', '129', '233', 'bold') call s:hi('SyntasticWarningSign', '129', '233', 'bold')
@@ -218,9 +207,5 @@ if has('gui_running') || &t_Co == 256
call s:hi('SyntasticWarningLine', '', '', '') call s:hi('SyntasticWarningLine', '', '', '')
call s:hi('SyntasticError', '160', '', '') call s:hi('SyntasticError', '160', '', '')
call s:hi('SyntasticWarning', '129', '', '') call s:hi('SyntasticWarning', '129', '', '')
call s:hi('SignifySignAdd', '2', '233', '')
call s:hi('SignifySignChange', '3', '233', '')
call s:hi('SignifySignDelete', '1', '233', '')
"" }}} "" }}}
endif endif

View File

@@ -1 +0,0 @@
autocmd BufNewFile,BufReadPost */requirements.txt set filetype=requirements

View File

@@ -1,3 +0,0 @@
if has('pythonx')
setlocal formatexpr=format#clang_format()
endif

View File

@@ -1,6 +0,0 @@
" Add <> to % matches
setlocal matchpairs+=<:>
if has('pythonx')
setlocal formatexpr=format#clang_format()
endif

View File

@@ -1,3 +0,0 @@
if has('pythonx')
setlocal formatexpr=format#clang_format()
endif

View File

@@ -1,3 +0,0 @@
if has('pythonx')
setlocal formatexpr=format#clang_format()
endif

View File

@@ -1,3 +0,0 @@
if has('pythonx')
setlocal formatexpr=format#clang_format()
endif

View File

@@ -1,3 +0,0 @@
if has('pythonx')
setlocal formatexpr=format#clang_format()
endif

View File

@@ -1,3 +0,0 @@
if has('pythonx')
setlocal formatexpr=format#clang_format()
endif

View File

@@ -1,3 +0,0 @@
if has('pythonx')
setlocal formatexpr=format#yapf()
endif

View File

@@ -1 +0,0 @@
set commentstring=#%s

View File

@@ -1,8 +0,0 @@
if exists(':GuiFont')
GuiFont! CaskaydiaCove\ Nerd\ Font\ Mono:h9
endif
if exists(':GuiTabline')
" Don't use GUI tabline, matches terminal tabline.
GuiTabline 0
endif

2
gvimrc
View File

@@ -6,7 +6,7 @@
set guioptions=aegi set guioptions=aegi
if platform#is_windows() if platform#is_windows()
set guifont=Source\ Code\ Pro:h10 set guifont=Consolas:h10:cDEFAULT
else else
" Set default font " Set default font
set guifont=Source\ Code\ Pro\ Medium\ 9 set guifont=Source\ Code\ Pro\ Medium\ 9

View File

@@ -1 +0,0 @@
runtime vimrc

View File

@@ -1,28 +0,0 @@
---
- name: nodejs get json containing latest version
uri:
url: https://nodejs.org/dist/index.json
register: latest
- name: nodejs create directory for downloaded package
file:
state: directory
dest: ~/.local/src
- name: nodejs download latest package
get_url:
url: 'https://nodejs.org/dist/{{latest.json[0].version}}/node-{{latest.json[0].version}}-linux-x64.tar.gz'
dest: ~/.local/src/node.tar.gz
- name: nodejs extract downloaded package
unarchive:
src: ~/.local/src/node.tar.gz
dest: ~/.local/src
remote_src: true
- name: nodejs create symlink links
file:
state: link
src: '~/.local/src/node-{{latest.json[0].version}}-linux-x64/bin/{{item}}'
dest: '~/.local/bin/{{item}}'
with_items: [corepack, node, npm, npx]

View File

@@ -1,7 +1,7 @@
augroup benieAugroup augroup benieAugroup
autocmd! autocmd!
if tmux#inSession() if $TMUX !=# ''
" [Un]set tmux window option to detect when to change pane. " [Un]set tmux window option to detect when to change pane.
call tmux#setNavigationFlag() call tmux#setNavigationFlag()
au FocusGained * silent call tmux#setNavigationFlag() au FocusGained * silent call tmux#setNavigationFlag()
@@ -12,31 +12,17 @@ augroup benieAugroup
au BufReadPost * if line("'\"") > 0 && line("'\"") <= line("$") au BufReadPost * if line("'\"") > 0 && line("'\"") <= line("$")
\ | exe "normal! g'\"" | endif \ | exe "normal! g'\"" | endif
" Highlight conflict markers in any filetype
au FileType * call matchadd('Todo', '^\(<<<<<<<\s.*\||||||||\|=======\|>>>>>>>\s.*\)$')
" Update `Last change: <date>` on write & go back previous cursor position " Update `Last change: <date>` on write & go back previous cursor position
au FileType help au BufWritePre <buffer> au FileType help au BufWritePre <buffer>
\ 1s/Last change: \zs.*$/\=strftime('%Y %b %d')/e|norm!`` \ 1s/Last change: \zs.*$/\=strftime('%Y %b %d')/e|norm!``
" Read template into buffer then send line 1 to the black hold register " Read template into buffer then send line 1 to the black hold register
au BufNewFile todo.md read ~/.vim/templates/skeleton.todo.md | 1delete _ au BufNewFile todo.md read ~/.vim/templates/skeleton.todo.md | 1delete _
" Attempt to expand snippet named `_template` if it exists
" Augment vim-signify by modifying it's autocmds au BufNewFile * silent! call snippet#template()
au User SignifyAutocmds call do#signify() " Do the same when filetype changes to help
au FileType help silent! call snippet#template()
if has('nvim')
" Start in terminal-insert mode.
autocmd TermOpen term://* startinsert
" Don't show the line number column in terminal-insert mode.
autocmd TermEnter term://*
\ set nonumber | set norelativenumber | set signcolumn=no
" But do show the line number column in terminal-normal mode.
autocmd TermLeave term://*
\ set number | set relativenumber | set signcolumn=auto
" Automatically press enter when the terminal process exits.
autocmd TermClose term://*
\ if (expand('<afile>') !~ "fzf") &&
\ (expand('<afile>') !~ "ranger") &&
\ (expand('<afile>') !~ "coc") |
\ call nvim_input('<CR>') |
\ endif
endif
augroup END augroup END

View File

@@ -1,12 +1,13 @@
if !platform#is_windows() && if !platform#is_windows() &&
\ !has("gui_running") && \ !has("gui_running") &&
\ $TERM != 'xterm-256color' && \ $TERM != 'xterm-256color' &&
\ $TERM != 'xterm-kitty' &&
\ $TERM != 'screen-256color' && \ $TERM != 'screen-256color' &&
\ $TERM != 'tmux-256color' \ $TERM != 'tmux-256color'
echo "This terminal does not report 256 color support but probaly supports it" echo "This terminal does not report 256 color support but probaly supports it"
echo "Setup the shell to do something similar on load" echo "Setup the shell to do something similar on load"
echo "env TERM=xterm-256color /usr/bin/zsh" echo "env TERM=xterm-256color /usr/bin/zsh"
endif endif
colorscheme fresh if !platform#is_windows() || has("gui_running")
colorscheme fresh
endif
syntax sync minlines=1000 syntax sync minlines=1000

View File

@@ -1,3 +1,11 @@
" minpac
function! s:minpac_init() abort
packadd minpac | call minpac#init() | source $MYVIMRC
endfunction
command! PackUpdate call s:minpac_init() | call minpac#update('', {'do': 'call minpac#status()'})
command! PackStatus call s:minpac_init() | call minpac#status()
command! PackClean call s:minpac_init() | call minpac#clean()
" Sort Python Imports " Sort Python Imports
command! ISort call do#isort() command! ISort call do#isort()
@@ -23,5 +31,5 @@ command! -nargs=+ -complete=file Debug call do#debug(<f-args>)
command! TodoFile lvimgrep /todo/ % command! TodoFile lvimgrep /todo/ %
" Change build directory " Change build directory
command! -nargs=? -complete=dir BuildDir call build#dir(<f-args>) command! -nargs=1 -complete=dir BuildDir call build#dir(<f-args>)
command! -nargs=* -complete=custom,build#targets Build call build#run(<f-args>) command! -nargs=* -complete=custom,build#targets Build call build#run(<f-args>)

View File

@@ -1,8 +0,0 @@
if !has('pythonx')
finish
endif
let g:clang_format_path = get(g:, 'clang_format_path', 'clang-format')
let g:clang_format_style = get(g:, 'clang_format_style', 'google')
let g:yapf_path = get(g:, 'yapf_path', 'yapf')
let g:yapf_style = get(g:, 'yapf_style', 'pep8')

View File

@@ -1,19 +1,9 @@
" coc.nvim " YouCompleteMe
inoremap <silent><expr> <TAB> coc#pum#visible() ? coc#pum#confirm() : "\<TAB>" nnoremap <leader>fi :YcmCompleter FixIt<CR>
nnoremap <silent> <leader>fi <Plug>(coc-fix-current) nnoremap <leader>gd :YcmCompleter GoTo<CR>
nnoremap <silent> <leader>gd <Plug>(coc-definition) nnoremap <leader>gt :YcmCompleter GetType<CR>
nnoremap <silent> <leader>gt <Plug>(coc-type-definition) nnoremap <leader>sd :YcmShowDetailedDiagnostic<CR>
nnoremap <silent> <leader>sd <Plug>(coc-diagnostic-info) nnoremap <leader>D <plug>(YCMHover)
nnoremap <silent> <leader>gr <Plug>(coc-references)
nnoremap <silent> <leader>gu <Plug>(coc-references-used)
nnoremap <silent> K :call do#show_documentation()<CR>
nnoremap <silent> <C-n> <Plug>(coc-diagnostic-next)
nnoremap <silent> <C-p> <Plug>(coc-diagnostic-prev)
if has('nvim')
" Make nvim :terminal more like vim :terminal
tnoremap <C-w>N <C-\><C-n>
endif
" termdebug " termdebug
" TODO: Detecet if termdebug is loaded, if not do the default action. " TODO: Detecet if termdebug is loaded, if not do the default action.
@@ -24,6 +14,10 @@ tnoremap <C-G> :Gdb<CR>
tnoremap <C-E> :Program<CR> tnoremap <C-E> :Program<CR>
tnoremap <C-S> :Source<CR> tnoremap <C-S> :Source<CR>
" GitGutter
nnoremap <leader>gn :GitGutterNextHunk<CR>
nnoremap <leader>gp :GitGutterPrevHunk<CR>
" Quickfix list " Quickfix list
nnoremap <leader>qo :copen<CR> nnoremap <leader>qo :copen<CR>
nnoremap <leader>qc :cclose<CR> nnoremap <leader>qc :cclose<CR>
@@ -65,33 +59,14 @@ nnoremap k gk
" Quick write " Quick write
nnoremap <leader>w :w!<CR> nnoremap <leader>w :w!<CR>
" Switch panes in a tmux aware way " Switch panes
if !tmux#inSession() || has('win32') nnoremap <C-h> <C-w>h
nnoremap <silent> <C-h> <C-w>h nnoremap <C-j> <C-w>j
nnoremap <silent> <C-j> <C-w>j nnoremap <C-k> <C-w>k
nnoremap <silent> <C-k> <C-w>k nnoremap <C-l> <C-w>l
nnoremap <silent> <C-l> <C-w>l
else " Redraw window
nnoremap <silent> <C-h> :TmuxNavigateLeft<CR> nnoremap <C-w>l <C-l>
nnoremap <silent> <C-j> :TmuxNavigateDown<CR>
nnoremap <silent> <C-k> :TmuxNavigateUp<CR>
nnoremap <silent> <C-l> :TmuxNavigateRight<CR>
nnoremap <silent> <C-w>h :TmuxNavigateLeft<CR>
nnoremap <silent> <C-w>j :TmuxNavigateDown<CR>
nnoremap <silent> <C-w>k :TmuxNavigateUp<CR>
nnoremap <silent> <C-w>l :TmuxNavigateRight<CR>
if has('nvim')
tnoremap <silent> <C-w>h <C-\><C-n>:TmuxNavigateLeft<CR>
tnoremap <silent> <C-w>j <C-\><C-n>:TmuxNavigateDown<CR>
tnoremap <silent> <C-w>k <C-\><C-n>:TmuxNavigateUp<CR>
tnoremap <silent> <C-w>l <C-\><C-n>:TmuxNavigateRight<CR>
else
tnoremap <silent> <C-w>h <C-w>N:TmuxNavigateLeft<CR>
tnoremap <silent> <C-w>j <C-w>N:TmuxNavigateDown<CR>
tnoremap <silent> <C-w>k <C-w>N:TmuxNavigateUp<CR>
tnoremap <silent> <C-w>l <C-w>N:TmuxNavigateRight<CR>
endif
endif
" Quick tabs " Quick tabs
nnoremap <leader>tn :tabnew<Space> nnoremap <leader>tn :tabnew<Space>
@@ -102,14 +77,8 @@ nnoremap <leader>tm :tabmove<Space>
" Clear search highlights " Clear search highlights
nnoremap <leader><Space> :nohlsearch<CR> nnoremap <leader><Space> :nohlsearch<CR>
if tmux#isOption('set-clipboard', 'on') || $SSH_CONNECTION !=# '' if exists('loaded_oscyank')
" When connected to a remote session the + selection register is not noremap <leader>y :Oscyank<CR>
" available and the unnamed register is used instead. Add mappings using the
" z register instead.
noremap <leader>y "zy
noremap <leader>Y "zY
" Enable OSC 52 copy on yank.
call osc52#autocmd()
else else
" System clipboard yank/put " System clipboard yank/put
noremap <leader>y "+y noremap <leader>y "+y
@@ -117,10 +86,6 @@ else
noremap <leader>p "+p noremap <leader>p "+p
noremap <leader>P "+P noremap <leader>P "+P
endif endif
if has('nvim-0.5.2')
" Undo neovim's default mapping of Y to y$
unmap Y
endif
" Quickly access spelling menu " Quickly access spelling menu
inoremap <C-s> <C-g>u<C-X>s inoremap <C-s> <C-g>u<C-X>s
@@ -128,6 +93,8 @@ nnoremap <C-s> i<C-g>u<C-X>s
" Disable 'Q' from opening Ex mode " Disable 'Q' from opening Ex mode
nnoremap Q <nop> nnoremap Q <nop>
" Disable 'K' from loading man pages
noremap K <nop>
" Split line at the cursor " Split line at the cursor
nnoremap [j i<CR><Esc> nnoremap [j i<CR><Esc>

View File

@@ -1,3 +1,6 @@
" TODO: Move these settings to vimrc when after switching to vim8 packages
scriptencoding 'utf-8'
" Copy indent from current line " Copy indent from current line
set autoindent set autoindent
@@ -13,6 +16,12 @@ if !has('nvim') && &ttimeoutlen == -1
set ttimeoutlen=100 set ttimeoutlen=100
endif endif
" TODO: These might be irrelevant with vim-airline
" Show 2 line status
set laststatus=2
" Show the line and colum number of a cursor position
set ruler
" Enhanced command line completion " Enhanced command line completion
set wildmenu set wildmenu
" Command line history " Command line history
@@ -59,6 +68,8 @@ if has('linebreak')
set linebreak set linebreak
" Downwards Arrow With Tip Rightwards (U+21B3, utf-8: E2 86 B3) " Downwards Arrow With Tip Rightwards (U+21B3, utf-8: E2 86 B3)
let &showbreak='↳ ' let &showbreak='↳ '
" Use same highlight group as listchars for showbreak
set highlight+=@:SpecialKey
endif endif
" TODO: spellcapcheck " TODO: spellcapcheck
@@ -85,6 +96,7 @@ if exists('+relativenumber')
endif endif
" Keep cursor from buffer edges " Keep cursor from buffer edges
set scrolloff=8
set sidescrolloff=5 set sidescrolloff=5
" Turn backup off " Turn backup off
@@ -112,8 +124,6 @@ set isfname-=:
set hlsearch incsearch set hlsearch incsearch
" Set ignore search case unless mixed " Set ignore search case unless mixed
set ignorecase smartcase set ignorecase smartcase
" Don't ignore case in command line file completions
set nofileignorecase
" Allow buffers with changes to be hidden " Allow buffers with changes to be hidden
set hidden set hidden
@@ -152,11 +162,6 @@ set mouse=a
" q - allow formatting with 'gq' " q - allow formatting with 'gq'
set formatoptions+=rq set formatoptions+=rq
" Always show the signcolum
if exists('&signcolumn')
set signcolumn=yes
endif
" Enable modeline " Enable modeline
set modeline set modeline
@@ -174,7 +179,7 @@ if &t_Co == 8 && $TERM !~# '^linux\|^Eterm'
endif endif
" Change cursor dependant on current mode " Change cursor dependant on current mode
if !has('nvim') && has('cursorshape') && has('unix') && !has('gui_running') if has('cursorshape') && has('unix') && !has('gui_running')
if $TMUX ==# '' && $ITERM_PROFILE !=# '' if $TMUX ==# '' && $ITERM_PROFILE !=# ''
let &t_SI = "\<Esc>]50;CursorShape=1\x7" let &t_SI = "\<Esc>]50;CursorShape=1\x7"
let &t_EI = "\<Esc>]50;CursorShape=0\x7" let &t_EI = "\<Esc>]50;CursorShape=0\x7"

View File

@@ -1,174 +0,0 @@
" Show the statusline above the commandline.
scriptencoding utf-8
set laststatus=2
" Define color variables.
let g:statusline#light_green = {'fg': ['235', '#262626'], 'bg': [ '35', '#00af5f']}
let g:statusline#light_blue = {'fg': ['235', '#262626'], 'bg': [ '33', '#0087ff']}
let g:statusline#light_orange = {'fg': ['235', '#262626'], 'bg': ['209', '#ff875f']}
let g:statusline#light_red = {'fg': ['235', '#262626'], 'bg': ['124', '#af0000']}
let g:statusline#light_grey = {'fg': ['235', '#262626'], 'bg': ['246', '#949494']}
let g:statusline#light_violet = {'fg': ['235', '#262626'], 'bg': [ '99', '#875fff']}
let g:statusline#dark_white = {'fg': [ '15', '#ffffff'], 'bg': ['233', '#121212']}
let g:statusline#dark_yellow = {'fg': ['179', '#dfaf5f'], 'bg': ['233', '#121212']}
let g:statusline#dark_grey = {'fg': ['244', '#808080'], 'bg': ['233', '#121212']}
" Create highlight groups.
function! s:hi(group, color) abort
execute 'highlight '.a:group
\.' ctermfg='.a:color['fg'][0].' ctermbg='.a:color['bg'][0]
\.' guifg='.a:color['fg'][1].' guibg='.a:color['bg'][1]
endfunction
" StatusLineLight is shows the mode and cursor information, it is dynamically
" changed by statusline#mode(), give it a default.
call s:hi('StatusLineLight', g:statusline#light_grey)
" StatusLineDusk is shows additional information which is not always present,
" give it a muted color.
call s:hi('StatusLineDusk', g:statusline#light_grey)
" StatusLineDark shows the filename and filetype and takes up most of the
" statusline, give it a dark background.
call s:hi('StatusLineDark', g:statusline#dark_white)
" StatusLineChange shows changes in the file by changing the colour of the
" filename, give if a dark background.
call s:hi('StatusLineChange', g:statusline#dark_yellow)
" StatusLineFade shows the status of completion engines but using colors which
" fade into the background to avoid grabbing attention.
call s:hi('StatusLineDuskFade', g:statusline#dark_grey)
" Construct a statusline for special buffer types.
function! statusline#special(group, name, title)
" Display current mode with dynamic highlights.
let l:mode = '%#'.a:group.'# '.a:name.' '
" Display filename with dark highlights.
let l:file = '%#StatusLineDark# '.a:title
" Display current/total lines and column with dynamic highlights.
let l:line = '%#'.a:group.'# ☰ %l/%L ㏑%2c '
" Combine the elements into a single string to be evaluated.
return l:mode.l:file.'%='.l:line
endfunction
" Construct a statusline for generic buffer types.
function! statusline#generic(group, mode, coc)
" Display current mode with dynamic highlights.
let l:mode = '%#'.a:group.'# '.a:mode.' '
" Display spell or paste if set with dusk highlights in a group to swallow
" the spaces when empty.
let l:edit = '%#StatusLineDusk#%( '
\.'%{&spell ? "Spell " : ""}'
\.'%{&paste ? "Paste " : ""}'
\.'%)'
" Display filename with dark or changed highlights.
let l:file = (&modified ? '%#StatusLineChange#' : '%#StatusLineDark#').' %<%f'
" Display readonly and nomodifiable if set.
let l:state = '%#StatusLineDark#'
\.'%{&readonly ? " 🔒" : ""}'
\.'%{&modifiable ? "" : " ⛔"}'
if a:coc && exists('*coc#status')
" Display coc.nvim status.
let l:coc = '%#StatusLineDuskFade#%( %{coc#status()}%)'
else
let l:coc = ''
endif
" Display filetype if set.
let l:type = '%#StatusLineDark# %{&filetype} '
" Display fileencoding if not utf-8 and fileformat if not unix with dusk
" highlights in a group to swallow spaces when empty.
let l:format = '%#StatusLineDusk#%( '
\.'%{&fileencoding ==# "utf-8" ? "" : &fileencoding}'
\.'%{&fileformat ==# "unix" ? "" : "[".&fileformat."]"}'
\.' %)'
" Display current/total lines and column with dynamic highlights.
let l:line = '%#'.a:group.'# ☰ %l/%L ㏑%2c '
" Combine the elements into a single string to be evaluated.
return l:mode.l:edit.l:file.l:state.l:coc.'%='.l:type.l:format.l:line
endfunction
" Define active statusline, this statusline is dynamic with StatusLineLight
" being updated based on the current mode and only used for current buffer.
function! statusline#active()
let l:mode = statusline#mode()
if &buftype ==# 'help'
if l:mode ==# 'Normal'
let l:mode = 'Help'
endif
return statusline#special('StatusLineLight', l:mode, '%F')
elseif &buftype ==# 'quickfix'
" Quickfix list and location list have the same buftype, the window has a
" loclist flag, query the window info.
let l:info = getwininfo(win_getid())[0]
if l:mode ==# 'Normal'
let l:mode = l:info['loclist'] ? 'Location' : 'Quickfix'
endif
return statusline#special('StatusLineLight', l:mode,
\ get(l:info['variables'], 'quickfix_title', ''))
elseif &buftype ==# 'terminal'
return statusline#special('StatusLineLight', 'Terminal', '%f')
elseif &previewwindow
if l:mode ==# 'Normal'
let l:mode = 'Preview'
endif
return statusline#generic('StatusLineLight', l:mode, v:false)
elseif &filetype ==# 'man'
return statusline#special('StatusLineDusk', 'Manual', '%f')
endif
return statusline#generic('StatusLineLight', l:mode, v:true)
endfunction
" Define inactive statusline, this remains static until the buffer gains
" focus again.
function! statusline#inactive()
if &buftype ==# 'help'
let l:statusline = statusline#special('StatusLineDusk', 'Help', '%F')
elseif &buftype ==# 'quickfix'
" Quickfix list and location list have the same buftype, the window has a
" loclist flag, query the window info.
let l:info = getwininfo(win_getid())[0]
let l:statusline = statusline#special('StatusLineDusk',
\ l:info['loclist'] ? 'Location' : 'Quickfix',
\ get(l:info['variables'], 'quickfix_title', ''))
elseif &buftype ==# 'terminal'
let l:statusline = statusline#special('StatusLineDusk', 'Terminal', '%f')
elseif &previewwindow
let l:statusline = statusline#generic('StatusLineDusk', 'Preview', v:false)
elseif &filetype ==# 'man'
let l:statusline = statusline#special('StatusLineDusk', 'Manual', '%f')
else
let l:statusline = statusline#generic('StatusLineDusk', 'Idle', v:false)
endif
" Escape spaces and double quotes for use in setlocal.
let l:statusline = substitute(l:statusline, '\([ "]\)', '\\\0', 'g')
execute 'setlocal statusline='.l:statusline
endfunction
" Get statusline mode and update StatusLineLight.
function! statusline#mode()
" Map modes to a human readable name and a color.
let l:mode = {
\ 'n': ['Normal', g:statusline#light_green],
\ 'i': ['Insert', g:statusline#light_blue],
\ 'c': ['Command', g:statusline#light_green],
\ 'v': ['Visual', g:statusline#light_orange],
\ 'V': ['V-Line', g:statusline#light_orange],
\ '': ['V-Block', g:statusline#light_orange],
\ 'R': ['Replace', g:statusline#light_red],
\ 's': ['Select', g:statusline#light_violet],
\ 'S': ['S-Line', g:statusline#light_violet],
\ '': ['S-Block', g:statusline#light_violet],
\ 't': ['Terminal', g:statusline#light_blue],
\ '!': ['Shell', g:statusline#light_grey],
\}[mode()]
" Update the StatusLineLight color.
call s:hi('StatusLineLight', l:mode[1])
return l:mode[0]
endfunction
" Setup autocmds to set the statusline per buffer.
augroup benieStatusLine
autocmd!
" Dynamically update the current buffer mode and color changes using %! to
" call a function which is always evaluated on statusline update.
autocmd BufEnter,WinEnter,BufWinEnter * setlocal statusline=%!statusline#active()
" Statically set the statusline when leaving the buffer.
autocmd BufLeave,WinLeave * call statusline#inactive()
augroup END

View File

@@ -1,117 +0,0 @@
"""Python formatexpr for clang-format & yapf"""
import json
import sys
import subprocess
import difflib
import vim
class FormatError(Exception):
"""A formatting error."""
def clang_format():
"""Call clang-format on the current text object."""
clang_format = vim.vars['clang_format_path']
# TODO: The cursor position before gq is invoked is not preserved in the
# jump list, this expression will return the cursor position at the
# beginning of the motion or text object.
# Is there a way to get the cursor position immediately before gq is
# invoked? So that we can pass the position to clang-format in order for
# it to return the updated position to continue editing.
# Query the current absolute cursor positon.
cursor = int(vim.eval('line2byte(".") + col(".")')) - 2
if cursor < 0:
return
# Determine the lines to format.
startline = int(vim.eval('v:lnum'))
endline = startline + int(vim.eval('v:count')) - 1
lines = f'{startline}:{endline}'
fallback_style = vim.vars['clang_format_style']
# Construct the clang-format command to call.
command = [
clang_format, '-style', 'file', '-cursor',
str(cursor), '-lines', lines, '-fallback-style', fallback_style
]
if vim.current.buffer.name:
command += ['-assume-filename', vim.current.buffer.name]
# Call the clang-format command.
output = call(command)
if not output:
return
# Read the clang-format json header.
header = json.loads(output[0])
if header.get('IncompleteFormat'):
raise FormatError('clang-format: incomplete (syntax errors).')
# Replace the formatted regions.
replace_regions(output[1:])
# Set the updated cursor position.
vim.command('goto %d' % (header['Cursor'] + 1))
def yapf():
"""Call yapf on the current text object."""
yapf = vim.vars['yapf_path']
# Determine the lines to format.
start = int(vim.eval('v:lnum'))
end = start + int(vim.eval('v:count'))
lines = '{0}-{1}'.format(start, end)
style = vim.vars['yapf_style']
# Construct the clang-format command to call.
command = [yapf, '--style', style, '--lines', lines]
# TODO: Since yapf is a Python package, we could import the module and
# call it directly instead. It would then be possible to output better
# error messages and act on the buffer directly.
# Call the yapf command.
output = call(command)
if not output:
return
# Replace the formatted regions.
replace_regions(output[:-1])
def call(command):
"""Call the command to format the text.
Arguments:
command (list): Formatting command to call.
text (str): Text to be passed to stdin of command.
Returns:
list: The output of the formatter split on new lines.
None: If the subprocess failed.
"""
# Don't open a cmd prompt window on Windows.
startupinfo = None
if sys.platform.startswith('win32'):
startupinfo = subprocess.STARTUPINFO()
startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
startupinfo.wShowWindow = subprocess.SW_HIDE
# Call the formatting command.
process = subprocess.Popen(command,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
stdin=subprocess.PIPE,
startupinfo=startupinfo)
stdout, stderr = process.communicate(
input='\n'.join(vim.current.buffer).encode('utf-8'))
if stderr:
raise FormatError(stderr)
if not stdout:
raise FormatError('No output from {0}.'.format(command[0]))
# Split the lines into a list of elements.
return stdout.decode('utf-8').split('\n')
def replace_regions(lines):
"""Replace formatted regions in the current buffer.
Arguments:
lines (list): The formatted buffer lines.
"""
matcher = difflib.SequenceMatcher(None, vim.current.buffer, lines)
for tag, i1, i2, j1, j2 in reversed(matcher.get_opcodes()):
if tag != 'equal':
vim.current.buffer[i1:i2] = lines[j1:j2]

View File

@@ -1,11 +0,0 @@
if exists('b:current_syntax')
finish
endif
highlight default link requirementsComment Comment
highlight default link requirementsVersion Identifier
highlight default link requirementsOperator Operator
syntax region requirementsComment start='^\w*#' end='$' contains=@Spell
syntax match requirementsVersion '\d\+\.\d\+\.\d\+\w*'
syntax match requirementsOperator '=='

View File

@@ -1,121 +0,0 @@
---
- set_fact:
plugin_dir: '{{vim_config_dir}}/pack/managed'
plugins:
# ====================== Completion & Diagnostics ========================
# Conqueror of Completion
- repo: neoclide/coc.nvim
branch: release
# Snippet collection
- repo: honza/vim-snippets
# Completion for vimscript
- repo: vim-scripts/vimomni
mode: opt
# Version control differences in the sign column
- repo: mhinz/vim-signify
# Conflict marker utilities
- repo: rhysd/conflict-marker.vim
# Doxygen documentation stubs
- repo: vim-scripts/DoxygenToolkit.vim
mode: opt
# Easy table manipulation
- repo: dhruvasagar/vim-table-mode
# =========================== User Interface =============================
# Sanley numbered tabs in tabline
- repo: mkitt/tabline.vim
# Fuzzy finder
# TODO: Still necessary?
- repo: junegunn/fzf
- repo: junegunn/fzf.vim
# Replay macros with the enter key
- repo: wincent/replay
# Improved % matching
- repo: andymass/vim-matchup
# Forgot about this...
- repo: kbenzie/note.vim
# View term and hex colors
- repo: guns/xterm-color-table.vim
# ============================== Text Objects ============================
# Library for creating text objects
- repo: kana/vim-textobj-user
# TODO: Doesn't work with nvim
- repo: kana/vim-textobj-entire
# Text object for URI's
- repo: jceb/vim-textobj-uri
# Text object for comment blocks
- repo: glts/vim-textobj-comment
# Text object for sentences
- repo: reedes/vim-textobj-sentence
# Text object & bindings for arguments
- repo: PeterRincker/vim-argumentative
# ================================ Tim Pope ==============================
# Toggle comments
- repo: tpope/vim-commentary
# Edit delimiters
- repo: tpope/vim-surround
# Better dot command
- repo: tpope/vim-repeat
# Git wrapper
- repo: tpope/vim-fugitive
# Unix command warppers
- repo: tpope/vim-eunuch
# Improved directory browser
- repo: tpope/vim-vinegar
# PascalCase to under_score to camelCase
# TODO: Copy the good bit remove this plugin
- repo: tpope/vim-abolish
# Mappings for pairs of tasks
- repo: tpope/vim-unimpaired
# Sane date manipulation
- repo: tpope/vim-speeddating
# Wisely add end{if,function} fork with cmake support
- repo: godbyk/vim-endwise
branch: patch-1
# Text object & formatting for json
- repo: tpope/vim-jdaddy
# Granular project configuration
- repo: tpope/vim-projectionist
# ================================ tmux ==================================
# Seemless vim/tmux pane navigation
- repo: 'christoomey/vim-tmux-navigator'
mode: opt
# Enable focus events when in tmux session
- repo: 'tmux-plugins/vim-tmux-focus-events'
mode: opt
# =============================== Syntax =================================
- repo: editorconfig/editorconfig-vim
- repo: kalekundert/vim-coiled-snake
- repo: kbenzie/vim-spirv
- repo: rperier/vim-cmake-syntax
- repo: tikhomirov/vim-glsl
- repo: beyondmarc/hlsl.vim
- repo: frasercrmck/opencl.vim
- repo: asciidoc/vim-asciidoc
- repo: mustache/vim-mustache-handlebars
- repo: joshglendenning/vim-caddyfile
- repo: kbenzie/vim-khr
- repo: jrozner/vim-antlr
- repo: sophacles/vim-bundle-mako
- repo: Glench/Vim-Jinja2-Syntax
- name: remove minpac directory
when: ansible_os_family != "Windows"
file:
path: '{{vim_config_dir}}/pack/minpac'
state: absent
- name: remove minpac directory
when: ansible_os_family == "Windows"
win_file:
path: '{{vim_config_dir}}/pack/minpac'
state: absent

256
vimrc
View File

@@ -11,21 +11,159 @@ if has('syntax') && !exists('g:syntax_on')
syntax enable syntax enable
endif endif
if exists('*minpac#init')
" When minpac is loaded define the Pack command to add packages.
command! -nargs=+ Pack call minpac#add(<args>)
else
" Otherwise define the Pack command to do nothing.
command! -nargs=+ Pack
endif
" Append work config to runtimepath and packpath. " Append work config to runtimepath and packpath.
set runtimepath+=~/.config/work set runtimepath+=~/.config/work
set packpath+=~/.config/work set packpath+=~/.config/work
" Disable unused providers " vim-airline - improved status bar
let g:loaded_node_provider = 0 Pack 'vim-airline/vim-airline'
let g:loaded_perl_provider = 0 let g:airline#extensions#branch#enabled = 0
let g:loaded_ruby_provider = 0 let g:airline#extensions#hunks#enabled = 0
let g:airline#extensions#wordcount#enabled = 0
for s:setting in ['left_sep', 'right_sep', 'section_error', 'section_warning']
exec 'let g:airline_'.s:setting.' = ""'
endfor
" tabline.vim - sanely numbered tabs
Pack 'mkitt/tabline.vim'
" Markdown fenced code block languages " YouCompleteMe
Pack 'ycm-core/YouCompleteMe', {'type': 'opt'}
let g:ycm_key_list_select_completion = ['<C-n>', '<Down>']
let g:ycm_key_list_previous_completion = ['<C-p>', '<Up>']
let g:ycm_min_num_of_chars_for_completion = 1
let g:ycm_complete_in_comments = 1
let g:ycm_complete_in_strings = 1
let g:ycm_collect_identifiers_from_comments_and_strings = 1
let g:ycm_seed_identifiers_with_syntax = 1
let g:ycm_autoclose_preview_window_after_insertion = 1
let g:ycm_always_populate_location_list = 1
let g:ycm_error_symbol = '▸'
let g:ycm_warning_symbol = '▸'
let g:ycm_goto_buffer_command = 'horizontal-split'
let g:ycm_use_clangd = 0
let g:ycm_auto_hover = 0
" ultisnips - snippet engine
Pack 'SirVer/ultisnips'
Pack 'honza/vim-snippets'
" vim-cmake-completion - completion & help
Pack 'kbenzie/vim-cmake-completion', {'type': 'opt'}
" vimomni - Completion for vimscript
Pack 'vim-scripts/vimomni', {'type': 'opt'}
" ale - Asynchronous Lint Engine
Pack 'w0rp/ale'
let g:ale_sign_error = '▸'
let g:ale_sign_warning = '▸'
let g:ale_echo_msg_format = '[%linter%] %s (%code%)'
let g:ale_linters = {'c': [], 'cpp': []}
let g:ale_cmake_cmakelint_options =
\ '-convention/filename,-package/consistency,-package/stdargs'
" git diff in the sign column
Pack 'airblade/vim-gitgutter'
if exists('&signcolumn')
set signcolumn=yes
else
let g:gitgutter_sign_column_always = 1
endif
" format.vim - format with text objects
Pack 'git@bitbucket.org:infektor/format.vim.git'
" vim-textobj-user - library for creating text objects
Pack 'kana/vim-textobj-user'
" vim-textobj-entire - Entire file text object
let g:textobj_entire_no_default_key_mappings = 1
Pack 'kana/vim-textobj-entire'
xmap a% <Plug>(textobj-entire-a)
omap a% <Plug>(textobj-entire-a)
xmap i% <Plug>(textobj-entire-i)
omap i% <Plug>(textobj-entire-i)
" vim-textobj-parameter - Parameter text object
Pack 'sgur/vim-textobj-parameter'
" vim-textobj-uri - URI text object
Pack 'jceb/vim-textobj-uri'
" vim-textobj-comment - Comment text object
Pack 'glts/vim-textobj-comment'
omap a/ <Plug>(textobj-comment-a)
xmap a/ <Plug>(textobj-comment-a)
omap i/ <Plug>(textobj-comment-i)
xmap i/ <Plug>(textobj-comment-i)
" vim-textobj-sentence - Improved sentence text object
Pack 'reedes/vim-textobj-sentence'
" vim-commentary - toggle comments
Pack 'tpope/vim-commentary'
" vim-surround - edit delimiters
Pack 'tpope/vim-surround'
" vim-repeat - better dot command
Pack 'tpope/vim-repeat'
" vim-fugitive - git wrapper
Pack 'tpope/vim-fugitive'
" vim-eunuch - unix command warppers
Pack 'tpope/vim-eunuch'
" vim-vinegar - improved directory browser
Pack 'tpope/vim-vinegar'
" vim-abolish - CamelCase to under_score to mixedCase
" TODO: Copy the good bit remove this plugin
Pack 'tpope/vim-abolish'
" vim-unimpaired - for pairs of tasks
Pack 'tpope/vim-unimpaired'
" vim-speeddating - sane date manipulation
Pack 'tpope/vim-speeddating'
" vim-endwise - wisely add end{if,function}, fork with cmake support
Pack 'godbyk/vim-endwise', {'rev': 'patch-1'}
" vim-jdaddy - text object & formatting for json
Pack 'tpope/vim-jdaddy'
" vim-projectionist - granular project configuration
Pack 'tpope/vim-projectionist'
" fzf.vim - Fuzzy finder
Pack 'junegunn/fzf'
Pack 'junegunn/fzf.vim'
let g:fzf_action = {
\ 'ctrl-t': 'tab split',
\ 'ctrl-s': 'split',
\ 'ctrl-v': 'vsplit'
\ }
Pack 'kbenzie/note.vim'
let g:note_directory = '~/Sync/Notes'
if !has('win32')
" Seemless vim/tmux pane navigation
Pack 'christoomey/vim-tmux-navigator'
" Enable focus events when in tmux session
Pack 'tmux-plugins/vim-tmux-focus-events'
endif
" replay macros with the enter key
Pack 'wincent/replay'
" vim-matchit - Improved % matching
Pack 'andymass/vim-matchup'
let g:matchup_matchparen_offscreen = {'method': 'status_manual'}
" vim-table-mode - Easy table manipulation
Pack 'dhruvasagar/vim-table-mode'
let g:table_mode_map_prefix = '<leader>t'
let g:table_mode_toggle_map = 'M'
" DoxygenToolkit.vim - documentation stubs
Pack 'vim-scripts/DoxygenToolkit.vim', {'type': 'opt'}
let g:DoxygenToolkit_commentType = 'C++'
" markdown fenced code block languages
let g:markdown_fenced_languages = let g:markdown_fenced_languages =
\ ['cpp', 'c', 'cmake', 'console', 'sh', 'vim', 'python', 'yaml'] \ ['cpp', 'c', 'cmake', 'console', 'sh', 'vim', 'python', 'yaml']
" reStructedText enable code styles
let g:rst_style = 1
" reStructuredText code block languages " reStructuredText code block languages
let g:rst_syntax_code_list = { let g:rst_syntax_code_list = {
\ 'vim': ['vim'], \ 'vim': ['vim'],
@@ -36,81 +174,39 @@ let g:rst_syntax_code_list = {
\ 'python': ['python'] \ 'python': ['python']
\ } \ }
" Python folding
Pack 'kalekundert/vim-coiled-snake'
" reStructedText
let g:rst_style = 1
" Enable builtin syntax folding " Enable builtin syntax folding
let g:xml_syntax_folding = 1 let g:xml_syntax_folding = 1
let g:sh_fold_enabled = 1 let g:sh_fold_enabled = 1
if wsl#isDetected() " xterm-color-table.vim - view term and hex colors
" Make gx work in WSL Pack 'guns/xterm-color-table.vim'
let g:netrw_browsex_viewer='cmd.exe /C start'
endif
if tmux#inSession() " Syntax plugins
" Seemless vim/tmux pane navigation Pack 'kbenzie/vim-spirv'
packadd vim-tmux-navigator
let g:tmux_navigator_no_mappings = 1
" Enable focus events when in tmux session
packadd vim-tmux-focus-events
endif
" coc.nvim
let g:coc_global_extensions = [
\ 'coc-clangd',
\ 'coc-cmake',
\ 'coc-css',
\ 'coc-docker',
\ 'coc-html',
\ 'coc-jedi',
\ 'coc-json',
\ 'coc-marketplace',
\ 'coc-pyright',
\ 'coc-snippets',
\ 'coc-vimlsp',
\ 'coc-yaml',
\]
if has("win32")
let g:coc_global_extensions += [
\ 'coc-powershell'
\]
endif
let g:coc_default_semantic_highlight_groups = 0
" vim-signify
let g:signify_sign_change = '~'
" vim-textobj-entire
let g:textobj_entire_no_default_key_mappings = 1
xmap a% <Plug>(textobj-entire-a)
omap a% <Plug>(textobj-entire-a)
xmap i% <Plug>(textobj-entire-i)
omap i% <Plug>(textobj-entire-i)
" vim-textobj-comment
omap a/ <Plug>(textobj-comment-a)
xmap a/ <Plug>(textobj-comment-a)
omap i/ <Plug>(textobj-comment-i)
xmap i/ <Plug>(textobj-comment-i)
" fzf.vim
let g:fzf_action = {
\ 'ctrl-t': 'tab split',
\ 'ctrl-s': 'split',
\ 'ctrl-v': 'vsplit'
\ }
" note.vim
let g:note_directory = '~/Sync/Notes'
" vim-matchit
let g:matchup_matchparen_offscreen = {'method': 'status_manual'}
" vim-table-mode
let g:table_mode_map_prefix = '<leader>t'
let g:table_mode_toggle_map = 'M'
" DoxygenToolkit.vim
let g:DoxygenToolkit_commentType = 'C++'
" vim-spirv
let g:spirv_enable_current_id = 0
let g:spirv_enable_extinst_error = 0
let g:spirv_current_id_highlight = 'ctermbg=234, guibg=#1c1c1c' let g:spirv_current_id_highlight = 'ctermbg=234, guibg=#1c1c1c'
Pack 'rperier/vim-cmake-syntax'
Pack 'tikhomirov/vim-glsl'
Pack 'beyondmarc/hlsl.vim'
Pack 'frasercrmck/opencl.vim'
Pack 'asciidoc/vim-asciidoc'
Pack 'mustache/vim-mustache-handlebars'
Pack 'joshglendenning/vim-caddyfile'
Pack 'kbenzie/vim-khr'
Pack 'jrozner/vim-antlr'
" Plugins for remote integrations
Pack 'greymd/oscyank.vim', {'type': 'opt'}
if tmux#isOption('set-clipboard', 'on')
packadd oscyank.vim
endif
" Load YouComplteMe if termdebug plugin is not loaded.
if isdirectory(expand('~/.vim/pack/minpac/opt/YouCompleteMe'))
packadd YouCompleteMe
endif