diff options
Diffstat (limited to 'autoload/fish.vim')
-rw-r--r-- | autoload/fish.vim | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/autoload/fish.vim b/autoload/fish.vim new file mode 100644 index 00000000..d4e63cdc --- /dev/null +++ b/autoload/fish.vim @@ -0,0 +1,71 @@ +if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'fish') == -1 + +function! fish#Indent() + let l:shiftwidth = shiftwidth() + let l:prevlnum = prevnonblank(v:lnum - 1) + if l:prevlnum ==# 0 + return 0 + endif + let l:indent = 0 + let l:prevline = getline(l:prevlnum) + if l:prevline =~# '\v^\s*switch>' + let l:indent = l:shiftwidth * 2 + elseif l:prevline =~# '\v^\s*%(begin|if|else|while|for|function|case)>' + let l:indent = l:shiftwidth + endif + let l:line = getline(v:lnum) + if l:line =~# '\v^\s*end>' + return indent(v:lnum) - (l:indent ==# 0 ? l:shiftwidth : l:indent) + elseif l:line =~# '\v^\s*%(case|else)>' + return indent(v:lnum) - l:shiftwidth + endif + return indent(l:prevlnum) + l:indent +endfunction + +function! fish#Format() + if mode() =~# '\v^%(i|R)$' + return 1 + else + let l:command = v:lnum.','.(v:lnum+v:count-1).'!fish_indent' + echo l:command + execute l:command + endif +endfunction + +function! fish#Fold() + let l:line = getline(v:lnum) + if l:line =~# '\v^\s*%(begin|if|while|for|function|switch)>' + return 'a1' + elseif l:line =~# '\v^\s*end>' + return 's1' + else + return '=' + end +endfunction + +function! fish#Complete(findstart, base) + if a:findstart + return getline('.') =~# '\v^\s*$' ? -1 : 0 + else + if empty(a:base) + return [] + endif + let l:results = [] + let l:completions = + \ system('fish -c "complete -C'.shellescape(a:base).'"') + let l:cmd = substitute(a:base, '\v\S+$', '', '') + for l:line in split(l:completions, '\n') + let l:tokens = split(l:line, '\t') + call add(l:results, {'word': l:cmd.l:tokens[0], + \'abbr': l:tokens[0], + \'menu': get(l:tokens, 1, '')}) + endfor + return l:results + endif +endfunction + +function! fish#errorformat() + return '%Afish: %m,%-G%*\\ ^,%-Z%f (line %l):%s' +endfunction + +endif |