diff options
Diffstat (limited to '.config/vim')
| -rw-r--r-- | .config/vim/autoload/pathogen.vim | 264 | ||||
| -rw-r--r-- | .config/vim/colors/cyberpunk.vim | 136 | ||||
| -rw-r--r-- | .config/vim/colors/jellybeans.vim | 673 | ||||
| -rw-r--r-- | .config/vim/compiler/futhark.vim | 17 | ||||
| -rw-r--r-- | .config/vim/ftdetect/cpp.vim | 2 | ||||
| -rw-r--r-- | .config/vim/ftdetect/cu.vim | 1 | ||||
| -rw-r--r-- | .config/vim/ftdetect/fut.vim | 2 | ||||
| -rw-r--r-- | .config/vim/ftdetect/tex.vim | 9 | ||||
| -rw-r--r-- | .config/vim/ftplugin/fut.vim | 8 | ||||
| -rw-r--r-- | .config/vim/indent/fsharp.vim | 249 | ||||
| -rw-r--r-- | .config/vim/indent/fut.vim | 90 | ||||
| -rw-r--r-- | .config/vim/syntax/fut.vim | 53 | ||||
| -rw-r--r-- | .config/vim/vimrc | 117 |
13 files changed, 1621 insertions, 0 deletions
diff --git a/.config/vim/autoload/pathogen.vim b/.config/vim/autoload/pathogen.vim new file mode 100644 index 0000000..3582fbf --- /dev/null +++ b/.config/vim/autoload/pathogen.vim @@ -0,0 +1,264 @@ +" pathogen.vim - path option manipulation +" Maintainer: Tim Pope <http://tpo.pe/> +" Version: 2.4 + +" Install in ~/.vim/autoload (or ~\vimfiles\autoload). +" +" For management of individually installed plugins in ~/.vim/bundle (or +" ~\vimfiles\bundle), adding `execute pathogen#infect()` to the top of your +" .vimrc is the only other setup necessary. +" +" The API is documented inline below. + +if exists("g:loaded_pathogen") || &cp + finish +endif +let g:loaded_pathogen = 1 + +" Point of entry for basic default usage. Give a relative path to invoke +" pathogen#interpose() or an absolute path to invoke pathogen#surround(). +" Curly braces are expanded with pathogen#expand(): "bundle/{}" finds all +" subdirectories inside "bundle" inside all directories in the runtime path. +" If no arguments are given, defaults "bundle/{}", and also "pack/{}/start/{}" +" on versions of Vim without native package support. +function! pathogen#infect(...) abort + if a:0 + let paths = filter(reverse(copy(a:000)), 'type(v:val) == type("")') + else + let paths = ['bundle/{}', 'pack/{}/start/{}'] + endif + if has('packages') + call filter(paths, 'v:val !~# "^pack/[^/]*/start/[^/]*$"') + endif + let static = '^\%([$~\\/]\|\w:[\\/]\)[^{}*]*$' + for path in filter(copy(paths), 'v:val =~# static') + call pathogen#surround(path) + endfor + for path in filter(copy(paths), 'v:val !~# static') + if path =~# '^\%([$~\\/]\|\w:[\\/]\)' + call pathogen#surround(path) + else + call pathogen#interpose(path) + endif + endfor + call pathogen#cycle_filetype() + if pathogen#is_disabled($MYVIMRC) + return 'finish' + endif + return '' +endfunction + +" Split a path into a list. +function! pathogen#split(path) abort + if type(a:path) == type([]) | return a:path | endif + if empty(a:path) | return [] | endif + let split = split(a:path,'\\\@<!\%(\\\\\)*\zs,') + return map(split,'substitute(v:val,''\\\([\\,]\)'',''\1'',"g")') +endfunction + +" Convert a list to a path. +function! pathogen#join(...) abort + if type(a:1) == type(1) && a:1 + let i = 1 + let space = ' ' + else + let i = 0 + let space = '' + endif + let path = "" + while i < a:0 + if type(a:000[i]) == type([]) + let list = a:000[i] + let j = 0 + while j < len(list) + let escaped = substitute(list[j],'[,'.space.']\|\\[\,'.space.']\@=','\\&','g') + let path .= ',' . escaped + let j += 1 + endwhile + else + let path .= "," . a:000[i] + endif + let i += 1 + endwhile + return substitute(path,'^,','','') +endfunction + +" Convert a list to a path with escaped spaces for 'path', 'tag', etc. +function! pathogen#legacyjoin(...) abort + return call('pathogen#join',[1] + a:000) +endfunction + +" Turn filetype detection off and back on again if it was already enabled. +function! pathogen#cycle_filetype() abort + if exists('g:did_load_filetypes') + filetype off + filetype on + endif +endfunction + +" Check if a bundle is disabled. A bundle is considered disabled if its +" basename or full name is included in the list g:pathogen_blacklist or the +" comma delimited environment variable $VIMBLACKLIST. +function! pathogen#is_disabled(path) abort + if a:path =~# '\~$' + return 1 + endif + let sep = pathogen#slash() + let blacklist = get(g:, 'pathogen_blacklist', get(g:, 'pathogen_disabled', [])) + pathogen#split($VIMBLACKLIST) + if !empty(blacklist) + call map(blacklist, 'substitute(v:val, "[\\/]$", "", "")') + endif + return index(blacklist, fnamemodify(a:path, ':t')) != -1 || index(blacklist, a:path) != -1 +endfunction + +" Prepend the given directory to the runtime path and append its corresponding +" after directory. Curly braces are expanded with pathogen#expand(). +function! pathogen#surround(path) abort + let sep = pathogen#slash() + let rtp = pathogen#split(&rtp) + let path = fnamemodify(a:path, ':s?[\\/]\=$??') + let before = filter(pathogen#expand(path), '!pathogen#is_disabled(v:val)') + let after = filter(reverse(pathogen#expand(path, sep.'after')), '!pathogen#is_disabled(v:val[0:-7])') + call filter(rtp, 'index(before + after, v:val) == -1') + let &rtp = pathogen#join(before, rtp, after) + return &rtp +endfunction + +" For each directory in the runtime path, add a second entry with the given +" argument appended. Curly braces are expanded with pathogen#expand(). +function! pathogen#interpose(name) abort + let sep = pathogen#slash() + let name = a:name + if has_key(s:done_bundles, name) + return "" + endif + let s:done_bundles[name] = 1 + let list = [] + for dir in pathogen#split(&rtp) + if dir =~# '\<after$' + let list += reverse(filter(pathogen#expand(dir[0:-6].name, sep.'after'), '!pathogen#is_disabled(v:val[0:-7])')) + [dir] + else + let list += [dir] + filter(pathogen#expand(dir.sep.name), '!pathogen#is_disabled(v:val)') + endif + endfor + let &rtp = pathogen#join(pathogen#uniq(list)) + return 1 +endfunction + +let s:done_bundles = {} + +" Invoke :helptags on all non-$VIM doc directories in runtimepath. +function! pathogen#helptags() abort + let sep = pathogen#slash() + for glob in pathogen#split(&rtp) + for dir in map(split(glob(glob), "\n"), 'v:val.sep."/doc/".sep') + if (dir)[0 : strlen($VIMRUNTIME)] !=# $VIMRUNTIME.sep && filewritable(dir) == 2 && !empty(split(glob(dir.'*.txt'))) && (!filereadable(dir.'tags') || filewritable(dir.'tags')) + silent! execute 'helptags' pathogen#fnameescape(dir) + endif + endfor + endfor +endfunction + +command! -bar Helptags :call pathogen#helptags() + +" Execute the given command. This is basically a backdoor for --remote-expr. +function! pathogen#execute(...) abort + for command in a:000 + execute command + endfor + return '' +endfunction + +" Section: Unofficial + +function! pathogen#is_absolute(path) abort + return a:path =~# (has('win32') ? '^\%([\\/]\|\w:\)[\\/]\|^[~$]' : '^[/~$]') +endfunction + +" Given a string, returns all possible permutations of comma delimited braced +" alternatives of that string. pathogen#expand('/{a,b}/{c,d}') yields +" ['/a/c', '/a/d', '/b/c', '/b/d']. Empty braces are treated as a wildcard +" and globbed. Actual globs are preserved. +function! pathogen#expand(pattern, ...) abort + let after = a:0 ? a:1 : '' + let pattern = substitute(a:pattern, '^[~$][^\/]*', '\=expand(submatch(0))', '') + if pattern =~# '{[^{}]\+}' + let [pre, pat, post] = split(substitute(pattern, '\(.\{-\}\){\([^{}]\+\)}\(.*\)', "\\1\001\\2\001\\3", ''), "\001", 1) + let found = map(split(pat, ',', 1), 'pre.v:val.post') + let results = [] + for pattern in found + call extend(results, pathogen#expand(pattern)) + endfor + elseif pattern =~# '{}' + let pat = matchstr(pattern, '^.*{}[^*]*\%($\|[\\/]\)') + let post = pattern[strlen(pat) : -1] + let results = map(split(glob(substitute(pat, '{}', '*', 'g')), "\n"), 'v:val.post') + else + let results = [pattern] + endif + let vf = pathogen#slash() . 'vimfiles' + call map(results, 'v:val =~# "\\*" ? v:val.after : isdirectory(v:val.vf.after) ? v:val.vf.after : isdirectory(v:val.after) ? v:val.after : ""') + return filter(results, '!empty(v:val)') +endfunction + +" \ on Windows unless shellslash is set, / everywhere else. +function! pathogen#slash() abort + return !exists("+shellslash") || &shellslash ? '/' : '\' +endfunction + +function! pathogen#separator() abort + return pathogen#slash() +endfunction + +" Convenience wrapper around glob() which returns a list. +function! pathogen#glob(pattern) abort + let files = split(glob(a:pattern),"\n") + return map(files,'substitute(v:val,"[".pathogen#slash()."/]$","","")') +endfunction + +" Like pathogen#glob(), only limit the results to directories. +function! pathogen#glob_directories(pattern) abort + return filter(pathogen#glob(a:pattern),'isdirectory(v:val)') +endfunction + +" Remove duplicates from a list. +function! pathogen#uniq(list) abort + let i = 0 + let seen = {} + while i < len(a:list) + if (a:list[i] ==# '' && exists('empty')) || has_key(seen,a:list[i]) + call remove(a:list,i) + elseif a:list[i] ==# '' + let i += 1 + let empty = 1 + else + let seen[a:list[i]] = 1 + let i += 1 + endif + endwhile + return a:list +endfunction + +" Backport of fnameescape(). +function! pathogen#fnameescape(string) abort + if exists('*fnameescape') + return fnameescape(a:string) + elseif a:string ==# '-' + return '\-' + else + return substitute(escape(a:string," \t\n*?[{`$\\%#'\"|!<"),'^[+>]','\\&','') + endif +endfunction + +" Like findfile(), but hardcoded to use the runtimepath. +function! pathogen#runtime_findfile(file,count) abort + let rtp = pathogen#join(1,pathogen#split(&rtp)) + let file = findfile(a:file,rtp,a:count) + if file ==# '' + return '' + else + return fnamemodify(file,':p') + endif +endfunction + +" vim:set et sw=2 foldmethod=expr foldexpr=getline(v\:lnum)=~'^\"\ Section\:'?'>1'\:getline(v\:lnum)=~#'^fu'?'a1'\:getline(v\:lnum)=~#'^endf'?'s1'\:'=': diff --git a/.config/vim/colors/cyberpunk.vim b/.config/vim/colors/cyberpunk.vim new file mode 100644 index 0000000..87ab9ac --- /dev/null +++ b/.config/vim/colors/cyberpunk.vim @@ -0,0 +1,136 @@ +""" =========================================================================== +" File: cyberpunk.vim +" Description: A port of Emacs' Cyberpunk colorscheme for vim. +""" =========================================================================== + +set background=dark + +if version > 580 + hi clear + if exists("syntax_on") + syntax reset + endif +endif + +let colors_name = "cyberpunk" + +" Cyberpunk theme colors {{{ +let s:colors = { + \ "cyberpunk-fg": "#dcdccc", + \ "cyberpunk-bg-1": "#2b2b2b", + \ "cyberpunk-bg-05": "#383838", + \ "cyberpunk-bg": "#000000", + \ "cyberpunk-bg+1": "#4f4f4f", + \ "cyberpunk-bg+2": "#5f5f5f", + \ "cyberpunk-bg+3": "#6f6f6f", + \ "cyberpunk-red+1": "#dca3a3", + \ "cyberpunk-red": "#ff0000", + \ "cyberpunk-red-1": "#8b0000", + \ "cyberpunk-red-2": "#8b0000", + \ "cyberpunk-red-3": "#9c6363", + \ "cyberpunk-red-4": "#8c5353", + \ "cyberpunk-red-5": "#7F073F", + \ "cyberpunk-pink": "#ff69b4", + \ "cyberpunk-pink-1": "#ff1493", + \ "cyberpunk-pink-2": "#cd1076", + \ "cyberpunk-orange-2": "#FF6400", + \ "cyberpunk-orange-1": "#ff8c00", + \ "cyberpunk-orange": "#ffa500", + \ "cyberpunk-yellow": "#ffff00", + \ "cyberpunk-yellow-1": "#FBDE2D", + \ "cyberpunk-yellow-2": "#d0bf8f", + \ "cyberpunk-yellow-3": "#D8FA3C", + \ "cyberpunk-yellow-4": "#E9C062", + \ "cyberpunk-yellow-5": "#ffd700", + \ "cyberpunk-green-2": "#006400", + \ "cyberpunk-green-1": "#2e8b57", + \ "cyberpunk-green": "#00ff00", + \ "cyberpunk-green+1": "#61CE3C", + \ "cyberpunk-green+2": "#9fc59f", + \ "cyberpunk-green+3": "#afd8af", + \ "cyberpunk-green+4": "#bfebbf", + \ "cyberpunk-cyan": "#93e0e3", + \ "cyberpunk-blue+1": "#94bff3", + \ "cyberpunk-blue": "#0000ff", + \ "cyberpunk-blue-1": "#7b68ee", + \ "cyberpunk-blue-2": "#6a5acd", + \ "cyberpunk-blue-3": "#add8e6", + \ "cyberpunk-blue-4": "#b2dfee", + \ "cyberpunk-blue-5": "#4c83ff", + \ "cyberpunk-blue-6": "#96CBFE", + \ "cyberpunk-blue-7": "#00ffff", + \ "cyberpunk-blue-8": "#4F94CD", + \ "cyberpunk-magenta": "#dc8cc3", + \ "cyberpunk-black": "#000000", + \ "cyberpunk-black-2": "#0C1021", + \ "cyberpunk-black-3": "#0A0A0A", + \ "cyberpunk-gray": "#d3d3d3", + \ "cyberpunk-gray-2": "#8B8989", + \ "cyberpunk-gray-3": "#919191", + \ "cyberpunk-gray-4": "#999999", + \ "cyberpunk-gray-5": "#333333", + \ "cyberpunk-gray-6": "#1A1A1A", + \ "cyberpunk-gray-7": "#4D4D4D", + \ "cyberpunk-gray-8": "#262626", + \ "cyberpunk-white": "#ffffff", + \ "cyberpunk-white-2": "#F8F8F8", + \ "cyberpunk-white-3": "#fffafa" +\ } + + +function! Hi(name, guifg, guibg) + let l:cmd = "hi " . a:name . " guifg=" . a:guifg . " guibg=" . a:guibg + exe l:cmd +endfunc + +call Hi("Normal", s:colors["cyberpunk-fg"], s:colors["cyberpunk-black"]) +call Hi("Cursor", s:colors["cyberpunk-fg"], s:colors["cyberpunk-yellow-1"]) +call Hi("Visual", s:colors["cyberpunk-fg"], s:colors["cyberpunk-red-5"]) +call Hi("Visual", s:colors["cyberpunk-fg"], s:colors["cyberpunk-red-5"]) +call Hi("LineNr", s:colors["cyberpunk-green+2"], s:colors["cyberpunk-bg"]) + +call Hi("DiffAdd", s:colors["cyberpunk-green"], s:colors["cyberpunk-black"]) +call Hi("DiffChange", s:colors["cyberpunk-yellow"], s:colors["cyberpunk-black"]) +call Hi("DiffDelete", s:colors["cyberpunk-red"], s:colors["cyberpunk-black"]) + +call Hi("StatusLine", s:colors["cyberpunk-gray-5"], s:colors["cyberpunk-blue-5"]) +call Hi("StatusLineNC", s:colors["cyberpunk-gray-6"], s:colors["cyberpunk-gray-7"]) + + +exe "hi Warning guifg=" . s:colors["cyberpunk-pink"] +call Hi("VertSplit", s:colors["cyberpunk-gray-5"], s:colors["cyberpunk-gray-5"]) + +if version >= 700 + exe "hi CursorLine guibg=" . s:colors["cyberpunk-gray-5"] +endif + +" Syntax highlighting {{{ +exe "hi String guifg=" . s:colors["cyberpunk-green+1"] +exe "hi Type guifg=" . s:colors["cyberpunk-yellow-3"] +exe "hi Function guifg=" . s:colors["cyberpunk-pink-1"] +exe "hi Comment guifg=" . s:colors["cyberpunk-gray-2"] . " cterm=italic" +exe "hi Keyword guifg=" . s:colors["cyberpunk-yellow-1"] +exe "hi Identifier guifg=" . s:colors["cyberpunk-yellow-3"] +exe "hi Conditional guifg=" . s:colors["cyberpunk-yellow-1"] +exe "hi Repeat guifg=" . s:colors["cyberpunk-yellow-1"] +exe "hi Operator guifg=" . s:colors["cyberpunk-yellow-1"] +exe "hi Label guifg=" . s:colors["cyberpunk-yellow-1"] +exe "hi Structure guifg=" . s:colors["cyberpunk-yellow-1"] +exe "hi StorageClass guifg=" . s:colors["cyberpunk-yellow-1"] +exe "hi Typedef guifg=" . s:colors["cyberpunk-yellow-1"] +exe "hi Constant guifg=" . s:colors["cyberpunk-blue-5"] +exe "hi PreProc guifg=" . s:colors["cyberpunk-gray-3"] + +exe "hi Delimiter guifg=" . s:colors["cyberpunk-fg"] +" Numbers +exe "hi Number guifg=" . s:colors["cyberpunk-fg"] +exe "hi Float guifg=" . s:colors["cyberpunk-fg"] +" }}} + +if has("gui_running") + set guicursor+=n-v-i:blinkwait750-blinkon750-blinkoff750 +endif + +exe "hi Directory guifg=" . s:colors["cyberpunk-pink-1"] + +exe "hi ExtraWhitespace guibg=" . s:colors["cyberpunk-red"]
\ No newline at end of file diff --git a/.config/vim/colors/jellybeans.vim b/.config/vim/colors/jellybeans.vim new file mode 100644 index 0000000..40509a4 --- /dev/null +++ b/.config/vim/colors/jellybeans.vim @@ -0,0 +1,673 @@ +" Vim color file +" +" " __ _ _ _ " +" " \ \ ___| | |_ _| |__ ___ __ _ _ __ ___ " +" " \ \/ _ \ | | | | | _ \ / _ \/ _ | _ \/ __| " +" " /\_/ / __/ | | |_| | |_| | __/ |_| | | | \__ \ " +" " \___/ \___|_|_|\__ |____/ \___|\____|_| |_|___/ " +" " \___/ " +" +" "A colorful, dark color scheme for Vim." +" +" File: jellybeans.vim +" URL: github.com/nanotech/jellybeans.vim +" Scripts URL: vim.org/scripts/script.php?script_id=2555 +" Maintainer: NanoTech (nanotech.nanotechcorp.net) +" Version: 1.6 +" Last Change: October 18th, 2016 +" License: MIT +" Contributors: Andrew Wong (w0ng) +" Brian Marshall (bmars) +" Daniel Herbert (pocketninja) +" David Liang <bmdavll at gmail dot com> +" Henry So, Jr. <henryso@panix.com> +" Joe Doherty (docapotamus) +" Karl Litterfeldt (Litterfeldt) +" Keith Pitt (keithpitt) +" Philipp Rustemeier (12foo) +" Rafael Bicalho (rbika) +" Rich Healey (richo) +" Siwen Yu (yusiwen) +" Tim Willis (willist) +" +" Copyright (c) 2009-2016 NanoTech +" +" Permission is hereby granted, free of charge, to any per‐ +" son obtaining a copy of this software and associated doc‐ +" umentation files (the “Software”), to deal in the Soft‐ +" ware without restriction, including without limitation +" the rights to use, copy, modify, merge, publish, distrib‐ +" ute, sublicense, and/or sell copies of the Software, and +" to permit persons to whom the Software is furnished to do +" so, subject to the following conditions: +" +" The above copyright notice and this permission notice +" shall be included in all copies or substantial portions +" of the Software. +" +" THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY +" KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO +" THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICU‐ +" LAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +" AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CON‐ +" TRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CON‐ +" NECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +" THE SOFTWARE. + +set background=dark + +hi clear + +if exists("syntax_on") + syntax reset +endif + +let colors_name = "jellybeans" + +if has("gui_running") || &t_Co == 88 || &t_Co == 256 + let s:low_color = 0 +else + let s:low_color = 1 +endif + +" Configuration Variables: +" - g:jellybeans_overrides (default = {}) +" - g:jellybeans_use_lowcolor_black (default = 1) +" - g:jellybeans_use_gui_italics (default = 1) +" - g:jellybeans_use_term_italics (default = 0) + +" let s:background_color = "151515" +let s:background_color = "none" + +if exists("g:jellybeans_overrides") + let s:overrides = g:jellybeans_overrides +else + let s:overrides = {} +endif + +" Backwards compatibility +if exists("g:jellybeans_background_color") + \ || exists("g:jellybeans_background_color_256") + \ || exists("g:jellybeans_use_term_background_color") + + let s:overrides = deepcopy(s:overrides) + + if !has_key(s:overrides, "background") + let s:overrides["background"] = {} + endif + + if exists("g:jellybeans_background_color") + let s:overrides["background"]["guibg"] = g:jellybeans_background_color + endif + + if exists("g:jellybeans_background_color_256") + let s:overrides["background"]["256ctermbg"] = g:jellybeans_background_color_256 + endif + + if exists("g:jellybeans_use_term_background_color") + \ && g:jellybeans_use_term_background_color + let s:overrides["background"]["ctermbg"] = "NONE" + let s:overrides["background"]["256ctermbg"] = "NONE" + endif +endif + +if !exists("g:jellybeans_use_lowcolor_black") || g:jellybeans_use_lowcolor_black + let s:termBlack = "Black" +else + let s:termBlack = "Grey" +endif + +" Color approximation functions by Henry So, Jr. and David Liang {{{ +" Added to jellybeans.vim by Daniel Herbert + +" returns an approximate grey index for the given grey level +fun! s:grey_number(x) + if &t_Co == 88 + if a:x < 23 + return 0 + elseif a:x < 69 + return 1 + elseif a:x < 103 + return 2 + elseif a:x < 127 + return 3 + elseif a:x < 150 + return 4 + elseif a:x < 173 + return 5 + elseif a:x < 196 + return 6 + elseif a:x < 219 + return 7 + elseif a:x < 243 + return 8 + else + return 9 + endif + else + if a:x < 14 + return 0 + else + let l:n = (a:x - 8) / 10 + let l:m = (a:x - 8) % 10 + if l:m < 5 + return l:n + else + return l:n + 1 + endif + endif + endif +endfun + +" returns the actual grey level represented by the grey index +fun! s:grey_level(n) + if &t_Co == 88 + if a:n == 0 + return 0 + elseif a:n == 1 + return 46 + elseif a:n == 2 + return 92 + elseif a:n == 3 + return 115 + elseif a:n == 4 + return 139 + elseif a:n == 5 + return 162 + elseif a:n == 6 + return 185 + elseif a:n == 7 + return 208 + elseif a:n == 8 + return 231 + else + return 255 + endif + else + if a:n == 0 + return 0 + else + return 8 + (a:n * 10) + endif + endif +endfun + +" returns the palette index for the given grey index +fun! s:grey_color(n) + if &t_Co == 88 + if a:n == 0 + return 16 + elseif a:n == 9 + return 79 + else + return 79 + a:n + endif + else + if a:n == 0 + return 16 + elseif a:n == 25 + return 231 + else + return 231 + a:n + endif + endif +endfun + +" returns an approximate color index for the given color level +fun! s:rgb_number(x) + if &t_Co == 88 + if a:x < 69 + return 0 + elseif a:x < 172 + return 1 + elseif a:x < 230 + return 2 + else + return 3 + endif + else + if a:x < 75 + return 0 + else + let l:n = (a:x - 55) / 40 + let l:m = (a:x - 55) % 40 + if l:m < 20 + return l:n + else + return l:n + 1 + endif + endif + endif +endfun + +" returns the actual color level for the given color index +fun! s:rgb_level(n) + if &t_Co == 88 + if a:n == 0 + return 0 + elseif a:n == 1 + return 139 + elseif a:n == 2 + return 205 + else + return 255 + endif + else + if a:n == 0 + return 0 + else + return 55 + (a:n * 40) + endif + endif +endfun + +" returns the palette index for the given R/G/B color indices +fun! s:rgb_color(x, y, z) + if &t_Co == 88 + return 16 + (a:x * 16) + (a:y * 4) + a:z + else + return 16 + (a:x * 36) + (a:y * 6) + a:z + endif +endfun + +" returns the palette index to approximate the given R/G/B color levels +fun! s:color(r, g, b) + " map greys directly (see xterm's 256colres.pl) + if &t_Co == 256 && a:r == a:g && a:g == a:b && a:r > 3 && a:r < 243 + return float2nr(round(a:r - 8) / 10.0) + 232 + endif + + " get the closest grey + let l:gx = s:grey_number(a:r) + let l:gy = s:grey_number(a:g) + let l:gz = s:grey_number(a:b) + + " get the closest color + let l:x = s:rgb_number(a:r) + let l:y = s:rgb_number(a:g) + let l:z = s:rgb_number(a:b) + + if l:gx == l:gy && l:gy == l:gz + " there are two possibilities + let l:dgr = s:grey_level(l:gx) - a:r + let l:dgg = s:grey_level(l:gy) - a:g + let l:dgb = s:grey_level(l:gz) - a:b + let l:dgrey = (l:dgr * l:dgr) + (l:dgg * l:dgg) + (l:dgb * l:dgb) + let l:dr = s:rgb_level(l:gx) - a:r + let l:dg = s:rgb_level(l:gy) - a:g + let l:db = s:rgb_level(l:gz) - a:b + let l:drgb = (l:dr * l:dr) + (l:dg * l:dg) + (l:db * l:db) + if l:dgrey < l:drgb + " use the grey + return s:grey_color(l:gx) + else + " use the color + return s:rgb_color(l:x, l:y, l:z) + endif + else + " only one possibility + return s:rgb_color(l:x, l:y, l:z) + endif +endfun + +fun! s:is_empty_or_none(str) + return empty(a:str) || a:str ==? "NONE" +endfun + +" returns the palette index to approximate the 'rrggbb' hex string +fun! s:rgb(rgb) + if s:is_empty_or_none(a:rgb) + return "NONE" + endif + let l:r = ("0x" . strpart(a:rgb, 0, 2)) + 0 + let l:g = ("0x" . strpart(a:rgb, 2, 2)) + 0 + let l:b = ("0x" . strpart(a:rgb, 4, 2)) + 0 + return s:color(l:r, l:g, l:b) +endfun + +fun! s:prefix_highlight_value_with(prefix, color) + if s:is_empty_or_none(a:color) + return "NONE" + else + return a:prefix . a:color + endif +endfun + +fun! s:remove_italic_attr(attr) + let l:attr = join(filter(split(a:attr, ","), "v:val !=? 'italic'"), ",") + if empty(l:attr) + let l:attr = "NONE" + endif + return l:attr +endfun + +" sets the highlighting for the given group +fun! s:X(group, fg, bg, attr, lcfg, lcbg) + if s:low_color + exec "hi ".a:group. + \ " ctermfg=".s:prefix_highlight_value_with("", a:lcfg). + \ " ctermbg=".s:prefix_highlight_value_with("", a:lcbg) + else + exec "hi ".a:group. + \ " guifg=".s:prefix_highlight_value_with("#", a:fg). + \ " guibg=".s:prefix_highlight_value_with("#", a:bg). + \ " ctermfg=".s:rgb(a:fg). + \ " ctermbg=".s:rgb(a:bg) + endif + + let l:attr = s:prefix_highlight_value_with("", a:attr) + + if exists("g:jellybeans_use_term_italics") && g:jellybeans_use_term_italics + let l:cterm_attr = l:attr + else + let l:cterm_attr = s:remove_italic_attr(l:attr) + endif + + if !exists("g:jellybeans_use_gui_italics") || g:jellybeans_use_gui_italics + let l:gui_attr = l:attr + else + let l:gui_attr = s:remove_italic_attr(l:attr) + endif + + exec "hi ".a:group." gui=".l:gui_attr." cterm=".l:cterm_attr +endfun +" }}} + +call s:X("Normal","e8e8d3",s:background_color,"","White","") +set background=dark + +if version >= 700 + call s:X("CursorLine","","1c1c1c","","",s:termBlack) + call s:X("CursorColumn","","1c1c1c","","",s:termBlack) + call s:X("MatchParen","ffffff","556779","bold","","DarkCyan") + + call s:X("TabLine","000000","b0b8c0","italic","",s:termBlack) + call s:X("TabLineFill","9098a0","","","",s:termBlack) + call s:X("TabLineSel","000000","f0f0f0","italic,bold",s:termBlack,"White") + + " Auto-completion + call s:X("Pmenu","ffffff","606060","","White",s:termBlack) + call s:X("PmenuSel","101010","eeeeee","",s:termBlack,"White") +endif + +call s:X("Visual","","404040","","",s:termBlack) +call s:X("Cursor",s:background_color,"b0d0f0","","","") + +call s:X("LineNr","605958",s:background_color,"NONE",s:termBlack,"") +call s:X("CursorLineNr","ccc5c4","","NONE","White","") +call s:X("Comment","888888","","italic","Grey","") +call s:X("Todo","c7c7c7","","bold","White",s:termBlack) + +call s:X("StatusLine","000000","dddddd","italic","","White") +call s:X("StatusLineNC","ffffff","403c41","italic","White","Black") +call s:X("VertSplit","777777","403c41","",s:termBlack,s:termBlack) +call s:X("WildMenu","f0a0c0","302028","","Magenta","") + +call s:X("Folded","a0a8b0","384048","italic",s:termBlack,"") +call s:X("FoldColumn","535D66","1f1f1f","","",s:termBlack) +call s:X("SignColumn","777777","333333","","",s:termBlack) +call s:X("ColorColumn","","000000","","",s:termBlack) + +call s:X("Title","70b950","","bold","Green","") + +call s:X("Constant","cf6a4c","","","Red","") +call s:X("Special","799d6a","","","Green","") +call s:X("Delimiter","668799","","","Grey","") + +call s:X("String","99ad6a","","","Green","") +call s:X("StringDelimiter","556633","","","DarkGreen","") + +call s:X("Identifier","c6b6ee","","","LightCyan","") +call s:X("Structure","8fbfdc","","","LightCyan","") +call s:X("Function","fad07a","","","Yellow","") +call s:X("Statement","8197bf","","","DarkBlue","") +call s:X("PreProc","8fbfdc","","","LightBlue","") + +hi! link Operator Structure +hi! link Conceal Operator + +call s:X("Type","ffb964","","","Yellow","") +call s:X("NonText","101010",s:background_color,"",s:termBlack,"") + +call s:X("SpecialKey","141414","","",s:termBlack,"") + +call s:X("Search","f0a0c0","302028","underline","Magenta","") + +call s:X("Directory","dad085","","","Yellow","") +call s:X("ErrorMsg","","902020","","","DarkRed") +hi! link Error ErrorMsg +hi! link MoreMsg Special +call s:X("Question","65C254","","","Green","") + + +" Spell Checking + +call s:X("SpellBad","","902020","underline","","DarkRed") +call s:X("SpellCap","","0000df","underline","","Blue") +call s:X("SpellRare","","540063","underline","","DarkMagenta") +call s:X("SpellLocal","","2D7067","underline","","Green") + +" Diff + +hi! link diffRemoved Constant +hi! link diffAdded String + +" VimDiff + +call s:X("DiffAdd","D2EBBE","437019","","White","DarkGreen") +call s:X("DiffDelete","40000A","700009","","DarkRed","DarkRed") +call s:X("DiffChange","","2B5B77","","White","DarkBlue") +call s:X("DiffText","8fbfdc","000000","reverse","Yellow","") + +" PHP + +hi! link phpFunctions Function +call s:X("StorageClass","c59f6f","","","Red","") +hi! link phpSuperglobal Identifier +hi! link phpQuoteSingle StringDelimiter +hi! link phpQuoteDouble StringDelimiter +hi! link phpBoolean Constant +hi! link phpNull Constant +hi! link phpArrayPair Operator +hi! link phpOperator Normal +hi! link phpRelation Normal +hi! link phpVarSelector Identifier + +" Python + +hi! link pythonOperator Statement + +" Ruby + +hi! link rubySharpBang Comment +call s:X("rubyClass","447799","","","DarkBlue","") +call s:X("rubyIdentifier","c6b6fe","","","Cyan","") +hi! link rubyConstant Type +hi! link rubyFunction Function + +call s:X("rubyInstanceVariable","c6b6fe","","","Cyan","") +call s:X("rubySymbol","7697d6","","","Blue","") +hi! link rubyGlobalVariable rubyInstanceVariable +hi! link rubyModule rubyClass +call s:X("rubyControl","7597c6","","","Blue","") + +hi! link rubyString String +hi! link rubyStringDelimiter StringDelimiter +hi! link rubyInterpolationDelimiter Identifier + +call s:X("rubyRegexpDelimiter","540063","","","Magenta","") +call s:X("rubyRegexp","dd0093","","","DarkMagenta","") +call s:X("rubyRegexpSpecial","a40073","","","Magenta","") + +call s:X("rubyPredefinedIdentifier","de5577","","","Red","") + +" Erlang + +hi! link erlangAtom rubySymbol +hi! link erlangBIF rubyPredefinedIdentifier +hi! link erlangFunction rubyPredefinedIdentifier +hi! link erlangDirective Statement +hi! link erlangNode Identifier + +" Elixir + +hi! link elixirAtom rubySymbol + + +" JavaScript + +hi! link javaScriptValue Constant +hi! link javaScriptRegexpString rubyRegexp +hi! link javaScriptTemplateVar StringDelim +hi! link javaScriptTemplateDelim Identifier +hi! link javaScriptTemplateString String + +" CoffeeScript + +hi! link coffeeRegExp javaScriptRegexpString + +" Lua + +hi! link luaOperator Conditional + +" C + +hi! link cFormat Identifier +hi! link cOperator Constant + +" Objective-C/Cocoa + +hi! link objcClass Type +hi! link cocoaClass objcClass +hi! link objcSubclass objcClass +hi! link objcSuperclass objcClass +hi! link objcDirective rubyClass +hi! link objcStatement Constant +hi! link cocoaFunction Function +hi! link objcMethodName Identifier +hi! link objcMethodArg Normal +hi! link objcMessageName Identifier + +" Vimscript + +hi! link vimOper Normal + +" HTML + +hi! link htmlTag Statement +hi! link htmlEndTag htmlTag +hi! link htmlTagName htmlTag + +" XML + +hi! link xmlTag Statement +hi! link xmlEndTag xmlTag +hi! link xmlTagName xmlTag +hi! link xmlEqual xmlTag +hi! link xmlEntity Special +hi! link xmlEntityPunct xmlEntity +hi! link xmlDocTypeDecl PreProc +hi! link xmlDocTypeKeyword PreProc +hi! link xmlProcessingDelim xmlAttrib + +" Debugger.vim + +call s:X("DbgCurrent","DEEBFE","345FA8","","White","DarkBlue") +call s:X("DbgBreakPt","","4F0037","","","DarkMagenta") + +" vim-indent-guides + +if !exists("g:indent_guides_auto_colors") + let g:indent_guides_auto_colors = 0 +endif +call s:X("IndentGuidesOdd","","232323","","","") +call s:X("IndentGuidesEven","","1b1b1b","","","") + +" Plugins, etc. + +hi! link TagListFileName Directory +call s:X("PreciseJumpTarget","B9ED67","405026","","White","Green") + +" Manual overrides for 256-color terminals. Dark colors auto-map badly. +if !s:low_color + hi StatusLineNC ctermbg=235 + hi Folded ctermbg=236 + hi DiffText ctermfg=81 + hi DbgBreakPt ctermbg=53 + hi IndentGuidesOdd ctermbg=235 + hi IndentGuidesEven ctermbg=234 +endif + +if !empty("s:overrides") + fun! s:current_attr(group) + let l:synid = synIDtrans(hlID(a:group)) + let l:attrs = [] + for l:attr in ["bold", "italic", "reverse", "standout", "underline", "undercurl"] + if synIDattr(l:synid, l:attr, "gui") == 1 + call add(l:attrs, l:attr) + endif + endfor + return join(l:attrs, ",") + endfun + fun! s:current_color(group, what, mode) + let l:color = synIDattr(synIDtrans(hlID(a:group)), a:what, a:mode) + if l:color == -1 + return "" + else + return substitute(l:color, "^#", "", "") + endif + endfun + fun! s:load_color_def(group, def) + call s:X(a:group, get(a:def, "guifg", s:current_color(a:group, "fg", "gui")), + \ get(a:def, "guibg", s:current_color(a:group, "bg", "gui")), + \ get(a:def, "attr", s:current_attr(a:group)), + \ get(a:def, "ctermfg", s:current_color(a:group, "fg", "cterm")), + \ get(a:def, "ctermbg", s:current_color(a:group, "bg", "cterm"))) + if !s:low_color + for l:prop in ["ctermfg", "ctermbg"] + let l:override_key = "256".l:prop + if has_key(a:def, l:override_key) + exec "hi ".a:group." ".l:prop."=".a:def[l:override_key] + endif + endfor + endif + endfun + fun! s:load_colors(defs) + for [l:group, l:def] in items(a:defs) + if l:group == "background" + call s:load_color_def("LineNr", l:def) + call s:load_color_def("NonText", l:def) + call s:load_color_def("Normal", l:def) + else + call s:load_color_def(l:group, l:def) + endif + unlet l:group + unlet l:def + endfor + endfun + call s:load_colors(s:overrides) + delf s:load_colors + delf s:load_color_def + delf s:current_color + delf s:current_attr +endif + +call s:X("ExtraWhitespace","902020","902020","","red",s:termBlack) +match ExtraWhitespace /^\t*\zs \+/ +match ExtraWhitespace /\s\+$/ + +" delete functions {{{ +delf s:X +delf s:remove_italic_attr +delf s:prefix_highlight_value_with +delf s:rgb +delf s:is_empty_or_none +delf s:color +delf s:rgb_color +delf s:rgb_level +delf s:rgb_number +delf s:grey_color +delf s:grey_level +delf s:grey_number +" }}} diff --git a/.config/vim/compiler/futhark.vim b/.config/vim/compiler/futhark.vim new file mode 100644 index 0000000..132ccfe --- /dev/null +++ b/.config/vim/compiler/futhark.vim @@ -0,0 +1,17 @@ +" Vim compiler file +" Compiler: Futhark Compiler +" Latest Revision: 2020/05/24 + +if exists("current_compiler") || &cp + finish +endif +let current_compiler = "futhark" + +let s:cpo_save = "futhark" +set cpo&vim + +"CompilerSet errorformat=Error at %f:%l:%c-%v:\r%m + + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/.config/vim/ftdetect/cpp.vim b/.config/vim/ftdetect/cpp.vim new file mode 100644 index 0000000..3166fda --- /dev/null +++ b/.config/vim/ftdetect/cpp.vim @@ -0,0 +1,2 @@ +autocmd BufRead *.cpp setlocal tabstop=4 +autocmd BufRead *.cpp setlocal shiftwidth=4 diff --git a/.config/vim/ftdetect/cu.vim b/.config/vim/ftdetect/cu.vim new file mode 100644 index 0000000..d7e8516 --- /dev/null +++ b/.config/vim/ftdetect/cu.vim @@ -0,0 +1 @@ +au BufRead,BufNewFile *.cu,*.cuh,*.cu.h set filetype=cuda diff --git a/.config/vim/ftdetect/fut.vim b/.config/vim/ftdetect/fut.vim new file mode 100644 index 0000000..2c281c7 --- /dev/null +++ b/.config/vim/ftdetect/fut.vim @@ -0,0 +1,2 @@ +au BufRead,BufNewFile *.fut set filetype=fut +au BufRead,BufNewFile *.fut set includeexpr=v:fname.'.fut' diff --git a/.config/vim/ftdetect/tex.vim b/.config/vim/ftdetect/tex.vim new file mode 100644 index 0000000..43f5fde --- /dev/null +++ b/.config/vim/ftdetect/tex.vim @@ -0,0 +1,9 @@ +" put \begin{} \end{} tags tags around the current word +autocmd BufRead *.tex map <C-B> YpkI\begin{<ESC>A}<ESC>jI\end{<ESC>A}<esc>kA +autocmd BufRead *.tex map! <C-B> <ESC>YpkI\begin{<ESC>A}<ESC>jI\end{<ESC>A}<esc>kA +autocmd BufRead *.tex map <C-M> :call Synctex()<CR> + +"autocmd BufRead *.tex imap /\ \land +"autocmd BufRead *.tex imap \/ \lor +"autocmd BufRead *.tex imap -> \rightarrow +"autocmd BufRead *.tex imap ~~ \neg diff --git a/.config/vim/ftplugin/fut.vim b/.config/vim/ftplugin/fut.vim new file mode 100644 index 0000000..29410d5 --- /dev/null +++ b/.config/vim/ftplugin/fut.vim @@ -0,0 +1,8 @@ +" ftplugin/fut.vim +setlocal commentstring=--%s +setlocal comments=:-- +setlocal iskeyword+=',_ +setlocal tabstop=2 +setlocal softtabstop=2 +setlocal shiftwidth=2 +setlocal expandtab diff --git a/.config/vim/indent/fsharp.vim b/.config/vim/indent/fsharp.vim new file mode 100644 index 0000000..6227bdd --- /dev/null +++ b/.config/vim/indent/fsharp.vim @@ -0,0 +1,249 @@ +" Vim indent file +" Language: FSharp +" Maintainers: Jean-Francois Yuen <jfyuen@happycoders.org> +" Mike Leary <leary@nwlink.com> +" Markus Mottl <markus.mottl@gmail.com> +" Rudi Grinberg <rudi.grinberg@gmail.com> +" Gregor Uhlenheuer <kongo2002@gmail.com> +" Last Change: 2013 Jun 29 +" 2005 Jun 25 - Fixed multiple bugs due to 'else\nreturn ind' working +" 2005 May 09 - Added an option to not indent OCaml-indents specially (MM) +" 2013 June - commented textwidth (Marc Weber) +" 2014 August - Ported to F# +" 2014 August - F# specific cleanup +" +" Marc Weber's comment: This file may contain a lot of (very custom) stuff +" which eventually should be moved somewhere else .. + +" Only load this indent file when no other was loaded. + +if exists("b:did_indent") + finish +endif +let b:did_indent = 1 + +setlocal indentexpr=GetFsharpIndent() +setlocal indentkeys+=0=and,0=class,0=constraint,0=done,0=else,0=end,0=exception,0=external,0=if,0=in,0=include,0=inherit,0=let,0=method,0=open,0=then,0=type,0=val,0=with,0;;,0>\],0\|\],0>},0\|,0},0\],0) + +" Only define the function once. +if exists("*GetFsharpIndent") + finish +endif + +" Skipping pattern, for comments +function! s:GetLineWithoutFullComment(lnum) + let lnum = prevnonblank(a:lnum - 1) + let lline = substitute(getline(lnum), '(\*.*\*)\s*$', '', '') + while lline =~ '^\s*$' && lnum > 0 + let lnum = prevnonblank(lnum - 1) + let lline = substitute(getline(lnum), '(\*.*\*)\s*$', '', '') + endwhile + return lnum +endfunction + +" Indent for ';;' to match multiple 'let' +function! s:GetInd(lnum, pat, lim) + let llet = search(a:pat, 'bW') + let old = indent(a:lnum) + while llet > 0 + let old = indent(llet) + let nb = s:GetLineWithoutFullComment(llet) + if getline(nb) =~ a:lim + return old + endif + let llet = search(a:pat, 'bW') + endwhile + return old +endfunction + +" Indent pairs +function! s:FindPair(pstart, pmid, pend) + call search(a:pend, 'bW') + return indent(searchpair(a:pstart, a:pmid, a:pend, 'bWn', 'synIDattr(synID(line("."), col("."), 0), "name") =~? "string\\|comment"')) +endfunction + +" Indent 'let' +function! s:FindLet(pstart, pmid, pend) + call search(a:pend, 'bW') + return indent(searchpair(a:pstart, a:pmid, a:pend, 'bWn', 'synIDattr(synID(line("."), col("."), 0), "name") =~? "string\\|comment" || getline(".") =~ "^\\s*let\\>.*=.*\\<in\\s*$" || getline(prevnonblank(".") - 1) =~ s:beflet')) +endfunction + +function! GetFsharpIndent() + " Find a non-commented line above the current line. + let lnum = s:GetLineWithoutFullComment(v:lnum) + + " At the start of the file use zero indent. + if lnum == 0 + return 0 + endif + + let ind = indent(lnum) + let lline = substitute(getline(lnum), '(\*.*\*)\s*$', '', '') + + " " Return single 'shiftwidth' after lines matching: + " if lline =~ '^\s*|.*->\s*$' + " return ind + &sw + " endif + + let line = getline(v:lnum) + + " Indent if current line begins with 'end': + if line =~ '^\s*end\>' + return s:FindPair(s:module, '','\<end\>') + + " Indent if current line begins with 'done' for 'do': + elseif line =~ '^\s*done\>' + return s:FindPair('\<do\>', '','\<done\>') + + " Indent if current line begins with '}' or '>}': + elseif line =~ '^\s*\(\|>\)}' + return s:FindPair('{', '','}') + + " Indent if current line begins with ']', '|]' or '>]': + elseif line =~ '^\s*\(\||\|>\)\]' + return s:FindPair('\[', '','\]') + + " Indent if current line begins with ')': + elseif line =~ '^\s*)' + return s:FindPair('(', '',')') + + " Indent if current line begins with 'let': + elseif line =~ '^\s*let\>' + if lline !~ s:lim . '\|' . s:letlim . '\|' . s:beflet + return s:FindLet(s:type, '','\<let\s*$') + endif + + " Indent if current line begins with 'class' or 'type': + elseif line =~ '^\s*\(class\|type\)\>' + if lline !~ s:lim . '\|\<and\s*$\|' . s:letlim + return s:FindLet(s:type, '','\<\(class\|type\)\s*$') + endif + + " Indent for pattern matching: + elseif line =~ '^\s*|' + if lline !~ '^\s*\(|[^\]]\|\(match\|type\|with\)\>\)\|\<\(function\|private\|with\)\s*$' + call search('|', 'bW') + return indent(searchpair('^\s*\(match\|type\)\>\|\<\(function\|private\|with\)\s*$', '', '^\s*|', 'bWn', 'synIDattr(synID(line("."), col("."), 0), "name") =~? "string\\|comment" || getline(".") !~ "^\\s*|.*->"')) + endif + + " Indent if current line begins with ';;': + elseif line =~ '^\s*;;' + if lline !~ ';;\s*$' + return s:GetInd(v:lnum, s:letpat, s:letlim) + endif + + " Indent if current line begins with 'in': + elseif line =~ '^\s*in\>' + if lline !~ '^\s*\(let\|and\)\>' + return s:FindPair('\<let\>', '', '\<in\>') + endif + + " Indent if current line begins with 'else': + elseif line =~ '^\s*else\>' + if lline !~ '^\s*\(if\|then\)\>' + return s:FindPair('\<if\>', '', '\<else\>') + endif + + " Indent if current line begins with 'then': + elseif line =~ '^\s*then\>' + if lline !~ '^\s*\(if\|else\)\>' + return s:FindPair('\<if\>', '', '\<then\>') + endif + + " Indent if current line begins with 'and': + elseif line =~ '^\s*and\>' + if lline !~ '^\s*\(and\|let\|type\)\>\|\<end\s*$' + return ind - &sw + endif + + " Indent if current line begins with 'with': + elseif line =~ '^\s*with\>' + if lline !~ '^\s*\(match\|try\)\>' + return s:FindPair('\<\%(match\|try\)\>', '','\<with\>') + endif + + " Indent if current line begins with 'exception', 'external', 'include' or + " 'open': + elseif line =~ '^\s*\(exception\|external\|include\|open\)\>' + if lline !~ s:lim . '\|' . s:letlim + call search(line) + return indent(search('^\s*\(\(exception\|external\|include\|open\|type\)\>\|val\>.*:\)', 'bW')) + endif + + " Indent if current line begins with 'val': + elseif line =~ '^\s*val\>' + if lline !~ '^\s*\(exception\|external\|include\|open\)\>\|' . s:obj . '\|' . s:letlim + return indent(search('^\s*\(\(exception\|include\|initializer\|method\|open\|type\|val\)\>\|external\>.*:\)', 'bW')) + endif + + " Indent if current line begins with 'constraint', 'inherit', 'initializer' + " or 'method': + elseif line =~ '^\s*\(constraint\|inherit\|initializer\|method\)\>' + if lline !~ s:obj + return indent(search('\<\(object\|object\s*(.*)\)\s*$', 'bW')) + &sw + endif + + endif + + " Add a 'shiftwidth' after lines ending with: + if lline =~ '\(:\|=\|->\|<-\|(\|\[\|{\|{<\|\[|\|\[<\|\<\(begin\|do\|else\|fun\|function\|functor\|if\|initializer\|object\|private\|sig\|struct\|then\|try\)\|\<object\s*(.*)\)\s*$' + let ind = ind + &sw + + " Back to normal indent after lines ending with ';;': + elseif lline =~ ';;\s*$' && lline !~ '^\s*;;' + let ind = s:GetInd(v:lnum, s:letpat, s:letlim) + + " Back to normal indent after lines ending with 'end': + elseif lline =~ '\<end\s*$' + let ind = s:FindPair(s:module, '','\<end\>') + + " Back to normal indent after lines ending with 'in': + elseif lline =~ '\<in\s*$' && lline !~ '^\s*in\>' + let ind = s:FindPair('\<let\>', '', '\<in\>') + + " Back to normal indent after lines ending with 'done': + elseif lline =~ '\<done\s*$' + let ind = s:FindPair('\<do\>', '','\<done\>') + + " Back to normal indent after lines ending with '}' or '>}': + elseif lline =~ '\(\|>\)}\s*$' + let ind = s:FindPair('{', '','}') + + " Back to normal indent after lines ending with ']', '|]' or '>]': + elseif lline =~ '\(\||\|>\)\]\s*$' + let ind = s:FindPair('\[', '','\]') + + " Back to normal indent after comments: + elseif lline =~ '\*)\s*$' + call search('\*)', 'bW') + let ind = indent(searchpair('(\*', '', '\*)', 'bWn', 'synIDattr(synID(line("."), col("."), 0), "name") =~? "string"')) + + " Back to normal indent after lines ending with ')': + elseif lline =~ ')\s*$' + let ind = s:FindPair('(', '',')') + + " If this is a multiline comment then align '*': + elseif lline =~ '^\s*(\*' && line =~ '^\s*\*' + let ind = ind + 1 + + else + " Don't change indentation of this line + " for new lines (indent==0) use indentation of previous line + + " This is for preventing removing indentation of these args: + " let f x = + " let y = x + 1 in + " Printf.printf + " "o" << here + " "oeuth" << don't touch indentation + + let i = indent(v:lnum) + return i == 0 ? ind : i + + endif + + return ind + +endfunction + +" vim: sw=4 et sts=4 diff --git a/.config/vim/indent/fut.vim b/.config/vim/indent/fut.vim new file mode 100644 index 0000000..fb0df69 --- /dev/null +++ b/.config/vim/indent/fut.vim @@ -0,0 +1,90 @@ +" Vim indent file +" Language: Futhark +" Authors: Bene Collyridam, 0undefined +" Last Change: 2020/01/11 + +if exists("b:did_indent") + finish +endif +let b:did_indent = 1 + +setlocal nolisp +setlocal autoindent + +setlocal indentkeys=0{,0},0),0],!^F,e,o,O +setlocal indentexpr=FutharkIndent(v:lnum) + +if exists("*FutharkIndent") + finish +endif + +let s:save_cpo = &cpo +set cpo&vim + +function! s:get_line_trimmed(lnum) + " Get the line and remove a trailing comment. + " Use syntax highlighting attributes when possible. + " NOTE: this is not accurate; /* */ or a line continuation could trick it + let line = getline(a:lnum) + let line_len = strlen(line) + if has('syntax_items') + " If the last character in the line is a comment, do a binary search for + " the start of the comment. synID() is slow, a linear search would take + " too long on a long line. + if synIDattr(synID(a:lnum, line_len, 1), "name") =~ 'Comment\|Todo' + let min = 1 + let max = line_len + while min < max + let col = (min + max) / 2 + if synIDattr(synID(a:lnum, col, 1), "name") =~ 'Comment\|Todo' + let max = col + else + let min = col + 1 + endif + endwhile + let line = strpart(line, 0, min - 1) + endif + return substitute(line, "\s*$", "", "") + else + " Sorry, this is not complete, nor fully correct (e.g. string "--"). + " Such is life. + return substitute(line, "\s*--.*$", "", "") + endif +endfunction + +function! FutharkIndent(lnum) + let line = getline(a:lnum) + let prevNum = prevnonblank(a:lnum - 1) + let prev = s:get_line_trimmed(prevNum) + while prevNum > 1 && prevline !~ '[^[:blank:]]' + let prevNum = prevnonblank(prevNum - 1) + let prev = s:get_line_trimmed(prevNum) + endwhile + + if prev[len(prevline) - 1] == "," + \ && s:get_line_trimmed(a:lnum) !~ '^\s*[\[\]{}]' + \ && prevline !~ '^\s*let\s' + \ && prevline !~ '([^()]\+,$' + \ && s:get_line_trimmed(a:lnum) !~ '^\s*\S\+\s*=>' + return indent(prevNum) + endif + + " Indent extra if matching these patterns + if prev =~ "=$" + \ || prev =~ "->$" + \ || prev =~ "do$" + \ || prev =~ "($" + \ || prev =~ "in$" + \ || prev =~ "then$" + \ || prev =~ "else$" + return indent(prevNum) + &shiftwidth + + " Else keep same level of indentation + else + return indent(prevNum) + + endif +endfunction + +let &cpo = s:save_cpo +unlet s:save_cpo diff --git a/.config/vim/syntax/fut.vim b/.config/vim/syntax/fut.vim new file mode 100644 index 0000000..d3d7b78 --- /dev/null +++ b/.config/vim/syntax/fut.vim @@ -0,0 +1,53 @@ +syntax case match + +syn match FutharkAssigment "\v\=" +syn match FutharkOperator "\(+\|-\|*\|/\|>\|<\|%\|!\|&\||\|\^\)" +syn match FutharkOperator "\(++\|==\|!=\|>->\|<-<\||>\|<|\)" containedin=FutharkLambdaOperator + +" Literally the same, just with parenthesis +syn match FutharkLambdaOperator "(\ *\(++\|==\|!=\|>->\|<-<\||>\|<|\)\ *)" +syn match FutharkLambdaOperator "(\ *\(+\|-\|*\|/\|>\|<\|%\|!\|&\||\|^\)\ *)" +" Except for these two +syn match FutharkLambdaOperator "(\ *\(\.[1-9][0-9]*\)\ *)" +syn match FutharkLambdaOperator /).[1-9][0-9]*/ms=s+1 + +syn match Number "\v[+-]?<((\d+|0[xX]\x+|0[bB][01]+)([ui](8|16|32|64))?)>" + +syn match float "\v[+-]?<((\d+(\.\d+)?)(f(32|64))?)>" + +" Exponent +syn match float "\v-?(\d(\d|_)*|(\d(\d|_)*)?\.(\d(\d|_)*))[eE][+\-]?\d+" + +syn keyword boolean true false + +syn match FutIdentifier "\v\h(\w|')*" skipwhite contained contains=NONE + +syn keyword type i8 i16 i32 i64 u8 u16 u32 u64 int real bool char f32 f64 + +syn keyword conditional if then else +syn keyword Statement loop with entry for while do in local val +syn keyword keyword concat zip unzip unsafe +syn keyword typedef type +syn keyword FutharkBinding let entry nextgroup=FutIdentifier skipwhite skipempty +syn keyword PreProc module open import nextgroup=FutIdentifier skipwhite skipempty + +syn keyword function map map1 map2 map3 map4 map5 stream_map stream_map_per +syn keyword function reduce reduce_comm scan filter partition +syn keyword function stream_red stream_red_per stream_seq iota +syn keyword function replicate scatter drop +syn keyword function rotate split flatten unflatten +syn keyword function curry uncurry +syn keyword function id const + +syn match constant /'.'/ + +syn region string start=/"/ skip=/\\"/ end=/"/ keepend excludenl + +syn match comment "--.*$" + +hi def link FutIdentifier Function + +hi def link FutharkBinding Statement +hi def link number constant +hi def link FutharkOperator operator +hi def link FutharkLambdaOperator operator diff --git a/.config/vim/vimrc b/.config/vim/vimrc new file mode 100644 index 0000000..d590f53 --- /dev/null +++ b/.config/vim/vimrc @@ -0,0 +1,117 @@ +set directory=$XDG_CACHE_HOME/vim,~/,/tmp +set backupdir=$XDG_CACHE_HOME/vim,~/,/tmp +set viminfo+=n$XDG_CACHE_HOME/vim/viminfo +let $MYVIMRC="$XDG_CONFIG_HOME/vim/vimrc" +set runtimepath=$XDG_CONFIG_HOME/vim,$XDG_CONFIG_HOME/vim/after,$VIM,$VIMRUNTIME +runtime! archlinux.vim +scriptencoding utf-8 + +" behaviour +set history=200 +set wildmenu +set ruler +set cursorline +set showmatch +set hlsearch +set nocompatible +set backspace=2 +set incsearch +set formatoptions+=tcroqn2bmj +"set formatoptions+=1cjmnoqrw +"set formatoptions+=2acjnoqrtw +set relativenumber +set number + +" Enable mouse support +set mouse=a + +" tabs +set expandtab +set tabstop=2 +set softtabstop=2 +set shiftwidth=2 +set smartindent +set textwidth=80 +set wrap + +" theme +syntax enable + +" thematics +set background=dark +colorscheme jellybeans +"set listchars=space:·\,eol:¬ +set listchars= +set list + + +" adding pathogen +execute pathogen#infect('bundle/{}') +filetype plugin indent on + +" encodings +set fileencoding=utf-8 +set encoding=utf-8 +set fileformats=unix + +set viminfofile=${XDG_DATA_HOME:-$HOME/.local/share}/viminfo + +set grepprg=grep\ -nH\ $* + +"set statusline+=%#warningmsg# +"set statusline+=%{SyntasticStatuslineFlag()} +"set statusline+=%* + +let g:syntastic_always_populate_loc_list = 1 +let g:syntastic_auto_loc_list = 1 +let g:syntastic_check_on_open = 1 +let g:syntastic_check_on_wq = 0 + +" filetypes +let g:syntastic_disabled_filetypes=['asm', 's', 'latex', 'tex'] + +let g:tex_flavor='latex' +let g:vimtex_view_method='zathura' +let g:vimtex_quickfix_mode=0 +set conceallevel=2 +let g:tex_conceal='abdmg' +"let g:syntastic_tex_checkers=['lacheck'] +let g:vimtex_compiler_method = 'latexrun' +let g:vimtex_compiler_latexrun = { + \ 'backend' : 'jobs', + \ 'background' : 1, + \ 'build_dir' : 'latex.out', + \ 'options' : [ + \ '-verbose-cmds', + \ '--latex-args="-synctex=1"', + \ ], + \} + +let g:latex_view_general_viewer = 'zathura' +let g:vimtex_view_method = 'zathura' + +function! Synctex() + " remove 'silent' for debugging + execute "silent !mv -u latex.out/" . bufname('%')[:-5] . ".synctex.gz ." + execute "silent !zathura --synctex-forward " . line('.') . ":" . col('.') . ":" . bufname('%') . " " . bufname('%')[:-5] . ".pdf" + redraw! +endfunction + +map <F5> :make<CR> +au BufNewFile,BufRead *.fo setlocal ft=fasto +au BufNewFile,BufRead /tmp/[a-zA-Z0-9]\+/ setlocal ft=sh + +" Remove trailing cancer on write +autocmd BufWritePre * %s/\s\+$//e +autocmd BufWritePost *.tex !latexrun --bibtex-cmd="biber" --latex-args="-synctex=1" % + +set makeprg=GCC_COLORS=\ make + +vnoremap // y/\V<C-R>"<CR> + +map! <ESC>[1;5A <C-Up> +map! <ESC>[1;5B <C-Down> +map! <ESC>[1;5C <C-Right> +map! <ESC>[1;5D <C-Left> + +autocmd VimEnter * silent !echo -ne "\e[1 q" |
