I broke up with neovim....vim is my best friend now
This commit is contained in:
37
dot_vim/after/ftplugin/coffee/folding.vim
Normal file
37
dot_vim/after/ftplugin/coffee/folding.vim
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
function! CoffeeIndentLevel(lnum)
|
||||||
|
return indent(a:lnum) / &shiftwidth
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! NextNonBlankLine(lnum)
|
||||||
|
let numlines = line('$')
|
||||||
|
let current = a:lnum + 1
|
||||||
|
|
||||||
|
while current <= numlines
|
||||||
|
if getline(current) =~? '\v\S'
|
||||||
|
return current
|
||||||
|
endif
|
||||||
|
|
||||||
|
let current += 1
|
||||||
|
endwhile
|
||||||
|
|
||||||
|
return -2
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! CoffeeFolds()
|
||||||
|
if getline(v:lnum) =~ '\v^\s*$'
|
||||||
|
return '-1'
|
||||||
|
endif
|
||||||
|
|
||||||
|
let this_indent = IndentLevel(a:lnum)
|
||||||
|
let next_indent = IndentLevel(NextNonBlankLine(a:lnum))
|
||||||
|
|
||||||
|
if next_indent == this_indent
|
||||||
|
return this_indent
|
||||||
|
elseif next_indent < this_indent
|
||||||
|
return this_indent
|
||||||
|
elseif next_indent > this_indent
|
||||||
|
return '>' . next_indent
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
setlocal foldmethod=expr
|
||||||
|
setlocal foldexpr=CoffeeFolds()
|
||||||
16
dot_vim/after/plugin/ale.vim
Normal file
16
dot_vim/after/plugin/ale.vim
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
let g:ale_completion_enabled = 1
|
||||||
|
let g:ale_completion_autoimport = 1
|
||||||
|
let g:ale_fixers = {
|
||||||
|
\ '*': ['remove_trailing_lines', 'trim_whitespace'],
|
||||||
|
\ 'javascript': ['eslint'],
|
||||||
|
\ 'rust': ['rustfmt'],
|
||||||
|
\ 'dart': ['dartfmt'],
|
||||||
|
\}
|
||||||
|
let g:ale_rust_analyzer_executable = '/home/linly/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/bin/rust-analyzer'
|
||||||
|
let g:ale_linters = {'rust': ['cargo', 'analyzer']}
|
||||||
|
let g:rustfmt_autosave = 1
|
||||||
|
let g:rust_clip_command = 'xclip -selection clipboard'
|
||||||
|
let g:ale_fix_on_save = 1
|
||||||
|
let g:ale_sign_error = '>>'
|
||||||
|
let g:ale_sign_warning = '--'
|
||||||
|
let g:ale_virtualtext_cursor = 'current'
|
||||||
245
dot_vim/autoload/pathogen.vim
Normal file
245
dot_vim/autoload/pathogen.vim
Normal file
@@ -0,0 +1,245 @@
|
|||||||
|
" pathogen.vim - path option manipulation
|
||||||
|
" Maintainer: Tim Pope <http://tpo.pe/>
|
||||||
|
" Version: 2.0
|
||||||
|
|
||||||
|
" Install in ~/.vim/autoload (or ~\vimfiles\autoload).
|
||||||
|
"
|
||||||
|
" For management of individually installed plugins in ~/.vim/bundle (or
|
||||||
|
" ~\vimfiles\bundle), adding `call pathogen#infect()` to your .vimrc
|
||||||
|
" prior to `filetype plugin indent on` is the only other setup necessary.
|
||||||
|
"
|
||||||
|
" The API is documented inline below. For maximum ease of reading,
|
||||||
|
" :set foldmethod=marker
|
||||||
|
|
||||||
|
if exists("g:loaded_pathogen") || &cp
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
let g:loaded_pathogen = 1
|
||||||
|
|
||||||
|
" Point of entry for basic default usage. Give a directory name to invoke
|
||||||
|
" pathogen#runtime_append_all_bundles() (defaults to "bundle"), or a full path
|
||||||
|
" to invoke pathogen#runtime_prepend_subdirectories(). Afterwards,
|
||||||
|
" pathogen#cycle_filetype() is invoked.
|
||||||
|
function! pathogen#infect(...) abort " {{{1
|
||||||
|
let source_path = a:0 ? a:1 : 'bundle'
|
||||||
|
if source_path =~# '[\\/]'
|
||||||
|
call pathogen#runtime_prepend_subdirectories(source_path)
|
||||||
|
else
|
||||||
|
call pathogen#runtime_append_all_bundles(source_path)
|
||||||
|
endif
|
||||||
|
call pathogen#cycle_filetype()
|
||||||
|
endfunction " }}}1
|
||||||
|
|
||||||
|
" Split a path into a list.
|
||||||
|
function! pathogen#split(path) abort " {{{1
|
||||||
|
if type(a:path) == type([]) | return a:path | endif
|
||||||
|
let split = split(a:path,'\\\@<!\%(\\\\\)*\zs,')
|
||||||
|
return map(split,'substitute(v:val,''\\\([\\,]\)'',''\1'',"g")')
|
||||||
|
endfunction " }}}1
|
||||||
|
|
||||||
|
" Convert a list to a path.
|
||||||
|
function! pathogen#join(...) abort " {{{1
|
||||||
|
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 " }}}1
|
||||||
|
|
||||||
|
" Convert a list to a path with escaped spaces for 'path', 'tag', etc.
|
||||||
|
function! pathogen#legacyjoin(...) abort " {{{1
|
||||||
|
return call('pathogen#join',[1] + a:000)
|
||||||
|
endfunction " }}}1
|
||||||
|
|
||||||
|
" Remove duplicates from a list.
|
||||||
|
function! pathogen#uniq(list) abort " {{{1
|
||||||
|
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 " }}}1
|
||||||
|
|
||||||
|
" \ on Windows unless shellslash is set, / everywhere else.
|
||||||
|
function! pathogen#separator() abort " {{{1
|
||||||
|
return !exists("+shellslash") || &shellslash ? '/' : '\'
|
||||||
|
endfunction " }}}1
|
||||||
|
|
||||||
|
" Convenience wrapper around glob() which returns a list.
|
||||||
|
function! pathogen#glob(pattern) abort " {{{1
|
||||||
|
let files = split(glob(a:pattern),"\n")
|
||||||
|
return map(files,'substitute(v:val,"[".pathogen#separator()."/]$","","")')
|
||||||
|
endfunction "}}}1
|
||||||
|
|
||||||
|
" Like pathogen#glob(), only limit the results to directories.
|
||||||
|
function! pathogen#glob_directories(pattern) abort " {{{1
|
||||||
|
return filter(pathogen#glob(a:pattern),'isdirectory(v:val)')
|
||||||
|
endfunction "}}}1
|
||||||
|
|
||||||
|
" Turn filetype detection off and back on again if it was already enabled.
|
||||||
|
function! pathogen#cycle_filetype() " {{{1
|
||||||
|
if exists('g:did_load_filetypes')
|
||||||
|
filetype off
|
||||||
|
filetype on
|
||||||
|
endif
|
||||||
|
endfunction " }}}1
|
||||||
|
|
||||||
|
" Checks if a bundle is 'disabled'. A bundle is considered 'disabled' if
|
||||||
|
" its 'basename()' is included in g:pathogen_disabled[]' or ends in a tilde.
|
||||||
|
function! pathogen#is_disabled(path) " {{{1
|
||||||
|
if a:path =~# '\~$'
|
||||||
|
return 1
|
||||||
|
elseif !exists("g:pathogen_disabled")
|
||||||
|
return 0
|
||||||
|
endif
|
||||||
|
let sep = pathogen#separator()
|
||||||
|
return index(g:pathogen_disabled, strpart(a:path, strridx(a:path, sep)+1)) != -1
|
||||||
|
endfunction "}}}1
|
||||||
|
|
||||||
|
" Prepend all subdirectories of path to the rtp, and append all 'after'
|
||||||
|
" directories in those subdirectories.
|
||||||
|
function! pathogen#runtime_prepend_subdirectories(path) " {{{1
|
||||||
|
let sep = pathogen#separator()
|
||||||
|
let before = filter(pathogen#glob_directories(a:path.sep."*"), '!pathogen#is_disabled(v:val)')
|
||||||
|
let after = filter(pathogen#glob_directories(a:path.sep."*".sep."after"), '!pathogen#is_disabled(v:val[0:-7])')
|
||||||
|
let rtp = pathogen#split(&rtp)
|
||||||
|
let path = expand(a:path)
|
||||||
|
call filter(rtp,'v:val[0:strlen(path)-1] !=# path')
|
||||||
|
let &rtp = pathogen#join(pathogen#uniq(before + rtp + after))
|
||||||
|
return &rtp
|
||||||
|
endfunction " }}}1
|
||||||
|
|
||||||
|
" For each directory in rtp, check for a subdirectory named dir. If it
|
||||||
|
" exists, add all subdirectories of that subdirectory to the rtp, immediately
|
||||||
|
" after the original directory. If no argument is given, 'bundle' is used.
|
||||||
|
" Repeated calls with the same arguments are ignored.
|
||||||
|
function! pathogen#runtime_append_all_bundles(...) " {{{1
|
||||||
|
let sep = pathogen#separator()
|
||||||
|
let name = a:0 ? a:1 : 'bundle'
|
||||||
|
if "\n".s:done_bundles =~# "\\M\n".name."\n"
|
||||||
|
return ""
|
||||||
|
endif
|
||||||
|
let s:done_bundles .= name . "\n"
|
||||||
|
let list = []
|
||||||
|
for dir in pathogen#split(&rtp)
|
||||||
|
if dir =~# '\<after$'
|
||||||
|
let list += filter(pathogen#glob_directories(substitute(dir,'after$',name,'').sep.'*[^~]'.sep.'after'), '!pathogen#is_disabled(v:val[0:-7])') + [dir]
|
||||||
|
else
|
||||||
|
let list += [dir] + filter(pathogen#glob_directories(dir.sep.name.sep.'*[^~]'), '!pathogen#is_disabled(v:val)')
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
let &rtp = pathogen#join(pathogen#uniq(list))
|
||||||
|
return 1
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
let s:done_bundles = ''
|
||||||
|
" }}}1
|
||||||
|
|
||||||
|
" Invoke :helptags on all non-$VIM doc directories in runtimepath.
|
||||||
|
function! pathogen#helptags() " {{{1
|
||||||
|
let sep = pathogen#separator()
|
||||||
|
for dir in pathogen#split(&rtp)
|
||||||
|
if (dir.sep)[0 : strlen($VIMRUNTIME)] !=# $VIMRUNTIME.sep && filewritable(dir.sep.'doc') == 2 && !empty(glob(dir.sep.'doc'.sep.'*')) && (!filereadable(dir.sep.'doc'.sep.'tags') || filewritable(dir.sep.'doc'.sep.'tags'))
|
||||||
|
helptags `=dir.'/doc'`
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
endfunction " }}}1
|
||||||
|
|
||||||
|
command! -bar Helptags :call pathogen#helptags()
|
||||||
|
|
||||||
|
" Like findfile(), but hardcoded to use the runtimepath.
|
||||||
|
function! pathogen#runtime_findfile(file,count) "{{{1
|
||||||
|
let rtp = pathogen#join(1,pathogen#split(&rtp))
|
||||||
|
return fnamemodify(findfile(a:file,rtp,a:count),':p')
|
||||||
|
endfunction " }}}1
|
||||||
|
|
||||||
|
" Backport of fnameescape().
|
||||||
|
function! pathogen#fnameescape(string) " {{{1
|
||||||
|
if exists('*fnameescape')
|
||||||
|
return fnameescape(a:string)
|
||||||
|
elseif a:string ==# '-'
|
||||||
|
return '\-'
|
||||||
|
else
|
||||||
|
return substitute(escape(a:string," \t\n*?[{`$\\%#'\"|!<"),'^[+>]','\\&','')
|
||||||
|
endif
|
||||||
|
endfunction " }}}1
|
||||||
|
|
||||||
|
function! s:find(count,cmd,file,lcd) " {{{1
|
||||||
|
let rtp = pathogen#join(1,pathogen#split(&runtimepath))
|
||||||
|
let file = pathogen#runtime_findfile(a:file,a:count)
|
||||||
|
if file ==# ''
|
||||||
|
return "echoerr 'E345: Can''t find file \"".a:file."\" in runtimepath'"
|
||||||
|
elseif a:lcd
|
||||||
|
let path = file[0:-strlen(a:file)-2]
|
||||||
|
execute 'lcd `=path`'
|
||||||
|
return a:cmd.' '.pathogen#fnameescape(a:file)
|
||||||
|
else
|
||||||
|
return a:cmd.' '.pathogen#fnameescape(file)
|
||||||
|
endif
|
||||||
|
endfunction " }}}1
|
||||||
|
|
||||||
|
function! s:Findcomplete(A,L,P) " {{{1
|
||||||
|
let sep = pathogen#separator()
|
||||||
|
let cheats = {
|
||||||
|
\'a': 'autoload',
|
||||||
|
\'d': 'doc',
|
||||||
|
\'f': 'ftplugin',
|
||||||
|
\'i': 'indent',
|
||||||
|
\'p': 'plugin',
|
||||||
|
\'s': 'syntax'}
|
||||||
|
if a:A =~# '^\w[\\/]' && has_key(cheats,a:A[0])
|
||||||
|
let request = cheats[a:A[0]].a:A[1:-1]
|
||||||
|
else
|
||||||
|
let request = a:A
|
||||||
|
endif
|
||||||
|
let pattern = substitute(request,'\'.sep,'*'.sep,'g').'*'
|
||||||
|
let found = {}
|
||||||
|
for path in pathogen#split(&runtimepath)
|
||||||
|
let path = expand(path, ':p')
|
||||||
|
let matches = split(glob(path.sep.pattern),"\n")
|
||||||
|
call map(matches,'isdirectory(v:val) ? v:val.sep : v:val')
|
||||||
|
call map(matches,'expand(v:val, ":p")[strlen(path)+1:-1]')
|
||||||
|
for match in matches
|
||||||
|
let found[match] = 1
|
||||||
|
endfor
|
||||||
|
endfor
|
||||||
|
return sort(keys(found))
|
||||||
|
endfunction " }}}1
|
||||||
|
|
||||||
|
command! -bar -bang -range=1 -nargs=1 -complete=customlist,s:Findcomplete Ve :execute s:find(<count>,'edit<bang>',<q-args>,0)
|
||||||
|
command! -bar -bang -range=1 -nargs=1 -complete=customlist,s:Findcomplete Vedit :execute s:find(<count>,'edit<bang>',<q-args>,0)
|
||||||
|
command! -bar -bang -range=1 -nargs=1 -complete=customlist,s:Findcomplete Vopen :execute s:find(<count>,'edit<bang>',<q-args>,1)
|
||||||
|
command! -bar -bang -range=1 -nargs=1 -complete=customlist,s:Findcomplete Vsplit :execute s:find(<count>,'split',<q-args>,<bang>1)
|
||||||
|
command! -bar -bang -range=1 -nargs=1 -complete=customlist,s:Findcomplete Vvsplit :execute s:find(<count>,'vsplit',<q-args>,<bang>1)
|
||||||
|
command! -bar -bang -range=1 -nargs=1 -complete=customlist,s:Findcomplete Vtabedit :execute s:find(<count>,'tabedit',<q-args>,<bang>1)
|
||||||
|
command! -bar -bang -range=1 -nargs=1 -complete=customlist,s:Findcomplete Vpedit :execute s:find(<count>,'pedit',<q-args>,<bang>1)
|
||||||
|
command! -bar -bang -range=1 -nargs=1 -complete=customlist,s:Findcomplete Vread :execute s:find(<count>,'read',<q-args>,<bang>1)
|
||||||
|
|
||||||
|
" vim:set ft=vim ts=8 sw=2 sts=2:
|
||||||
2812
dot_vim/autoload/plug.vim
Normal file
2812
dot_vim/autoload/plug.vim
Normal file
File diff suppressed because it is too large
Load Diff
21
dot_vim/bundle/vimux.git/LICENSE
Normal file
21
dot_vim/bundle/vimux.git/LICENSE
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
The MIT License (MIT)
|
||||||
|
|
||||||
|
Copyright (c) 2103 Benjamin Mills
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, 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 PARTICULAR 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 CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
THE SOFTWARE.
|
||||||
38
dot_vim/bundle/vimux.git/README.mkd
Normal file
38
dot_vim/bundle/vimux.git/README.mkd
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
# vimux
|
||||||
|
|
||||||
|
Easily interact with tmux from vim.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
What inspired me to write vimux was [tslime.vim](https://github.com/kikijump/tslime.vim), a plugin that lets you send input to tmux. While tslime.vim works well, I felt it wasn't optimized for my primary use case which was having a smaller tmux pane that I would use to run tests or play with a REPL.
|
||||||
|
|
||||||
|
My goal with vimux is to make interacting with tmux from vim effortless. By default when you call `VimuxRunCommand` vimux will create a 20% tall horizontal pane under your current tmux pane and execute a command in it without losing focus of vim. Once that pane exists whenever you call `VimuxRunCommand` again the command will be executed in that pane. As I was using vimux myself I wanted to rerun commands over and over. An example of this was running the current file through rspec. Rather than typing that over and over I wrote `VimuxRunLastCommand` that will execute the last command you called with `VimuxRunCommand`.
|
||||||
|
|
||||||
|
Other auxiliary functions and the ones I talked about above can be found bellow with a full description and example key binds for your vimrc.
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
With **[vim-bundle](https://github.com/benmills/vim-bundle)**: `vim-bundle install benmills/vimux`
|
||||||
|
With **[Vundle](https://github.com/gmarik/Vundle.vim)**: 'Plugin benmills/vimux' in your .vimrc
|
||||||
|
|
||||||
|
Otherwise download the latest [tarball](https://github.com/benmills/vimux/tarball/master), extract it and move `plugin/vimux.vim` inside `~/.vim/plugin`. If you're using [pathogen](https://github.com/tpope/vim-pathogen), then move the entire folder extracted from the tarball into `~/.vim/bundle`.
|
||||||
|
|
||||||
|
_Notes:_
|
||||||
|
|
||||||
|
* Vimux assumes a tmux version >= 1.5. Some older versions might work but it is recommeded to use at least version 1.5.
|
||||||
|
|
||||||
|
## Platform-specific Plugins
|
||||||
|
|
||||||
|
* [vim-vroom](https://github.com/skalnik/vim-vroom) runner for rspec, cucumber and test/unit; vimux support via `g:vroom_use_vimux`
|
||||||
|
* [vimux-ruby-test](https://github.com/pgr0ss/vimux-ruby-test) a set of commands to easily run ruby tests
|
||||||
|
* [vimux-cucumber](https://github.com/cloud8421/vimux-cucumber) run Cucumber Features through Vimux
|
||||||
|
* [vim-turbux](https://github.com/jgdavey/vim-turbux) Turbo Ruby testing with tmux
|
||||||
|
* [vimux-pyutils](https://github.com/julienr/vimux-pyutils) A set of functions for vimux that allow to run code blocks in ipython
|
||||||
|
* [vimux-nose-test](https://github.com/pitluga/vimux-nose-test) Run nose tests in vimux
|
||||||
|
* [vimux-golang](https://github.com/benmills/vimux-golang) Run go tests in vimux
|
||||||
|
* [vimux-zeus](https://github.com/jingweno/vimux-zeus) Run zeus commands in vimux
|
||||||
|
* [vimix](https://github.com/spiegela/vimix) Run Elixir mix commands in vimux
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
The full documentation is available [online](https://raw.github.com/benmills/vimux/master/doc/vimux.txt) and accessible inside vim `:help vimux`
|
||||||
355
dot_vim/bundle/vimux.git/doc/vimux.txt
Normal file
355
dot_vim/bundle/vimux.git/doc/vimux.txt
Normal file
@@ -0,0 +1,355 @@
|
|||||||
|
*vimux.txt* easily interact with tmux
|
||||||
|
|
||||||
|
Vimux
|
||||||
|
effortless vim and tmux interaction
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
CONTENTS *vimux-contents*
|
||||||
|
|
||||||
|
1. About............................ |VimuxAbout|
|
||||||
|
2. Usage ........................... |VimuxUsage|
|
||||||
|
2.1 .............................. |VimuxPromptCommand|
|
||||||
|
2.2 .............................. |VimuxRunLastCommand|
|
||||||
|
2.3 .............................. |VimuxInspectRunner|
|
||||||
|
2.4 .............................. |VimuxCloseRunner|
|
||||||
|
2.5 .............................. |VimuxInterruptRunner|
|
||||||
|
2.6 .............................. |VimuxClearRunnerHistory|
|
||||||
|
2.7 .............................. |VimuxZoomRunner|
|
||||||
|
2.8 .............................. |VimuxRunCommandInDir|
|
||||||
|
3. Misc ............................ |VimuxMisc|
|
||||||
|
3.1 Example Keybinding............ |VimuxExampleKeybinding|
|
||||||
|
3.2 Tslime Replacement............ |VimuxTslimeReplacement|
|
||||||
|
4. Configuration ................... |VimuxConfiguration|
|
||||||
|
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
ABOUT (1) *VimuxAbout*
|
||||||
|
|
||||||
|
Vimux -- Easily interact with tmux from vim.
|
||||||
|
|
||||||
|
What inspired me to write vimux was tslime.vim [1], a plugin that lets you
|
||||||
|
send input to tmux. While tslime.vim works well, I felt it wasn't optimized
|
||||||
|
for my primary use case which was having a smaller tmux pane that I would use
|
||||||
|
to run tests or play with a REPL.
|
||||||
|
|
||||||
|
My goal with vimux is to make interacting with tmux from vim effortless. By
|
||||||
|
default when you call `VimuxRunCommand` vimux will create a 20% tall
|
||||||
|
horizontal pane under your current tmux pane and execute a command in it
|
||||||
|
without losing focus of vim. Once that pane exists whenever you call
|
||||||
|
`VimuxRunCommand` again the command will be executed in that pane. As I was
|
||||||
|
using vimux myself I wanted to rerun commands over and over. An example of
|
||||||
|
this was running the current file through rspec. Rather than typing that over
|
||||||
|
and over I wrote `VimuxRunLastCommand` that will execute the last command
|
||||||
|
you called with `VimuxRunCommand`.
|
||||||
|
|
||||||
|
Other auxiliary functions and the ones I talked about above can be found
|
||||||
|
bellow with a full description and example key binds for your vimrc.
|
||||||
|
|
||||||
|
[1] https://github.com/kikijump/tslime.vim
|
||||||
|
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
USAGE (2) *VimuxUsage*
|
||||||
|
|
||||||
|
The function VimuxRunCommand(command) is the core of Vimux. It will
|
||||||
|
create a split pane in the current window and run the passed command in it.
|
||||||
|
>
|
||||||
|
:call VimuxRunCommand("ls")
|
||||||
|
<
|
||||||
|
This will run the command in a split pane without losing focus of vim. If the
|
||||||
|
command takes a long time to return you can continue to use vim while the
|
||||||
|
process finishes and will see the output in the pane when it's finished.
|
||||||
|
|
||||||
|
Furthermore there are several handy commands all starting with 'Vimux':
|
||||||
|
- |VimuxRunCommand|
|
||||||
|
- |VimuxSendText|
|
||||||
|
- |VimuxSendKeys|
|
||||||
|
- |VimuxOpenPane|
|
||||||
|
- |VimuxRunLastCommand|
|
||||||
|
- |VimuxCloseRunner|
|
||||||
|
- |VimuxInspectRunner|
|
||||||
|
- |VimuxInterruptRunner|
|
||||||
|
- |VimuxPromptCommand|
|
||||||
|
- |VimuxClearRunnerHistory|
|
||||||
|
- |VimuxZoomRunner|
|
||||||
|
- |VimuxRunCommandInDir|
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
*VimuxRunCommand*
|
||||||
|
VimuxRunCommand~
|
||||||
|
|
||||||
|
Run a system command in a small horizontal split bellow
|
||||||
|
the current pane vim is in. You can optionally pass a second argument to stop
|
||||||
|
vimux from automatically sending a return after the command.
|
||||||
|
>
|
||||||
|
" Run the current file with rspec
|
||||||
|
map <Leader>rb :call VimuxRunCommand("clear; rspec " . bufname("%"))<CR>
|
||||||
|
" Run command without sending a return
|
||||||
|
map <Leader>rq :call VimuxRunCommand("clear; rspec " . bufname("%"), 0)<CR>
|
||||||
|
<
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
*VimuxSendText*
|
||||||
|
VimuxSendText~
|
||||||
|
|
||||||
|
Send raw text to the runer pane. This command will not open a new pane if one
|
||||||
|
does not already exist. You will need to use VimuxOpenPane to do this. This
|
||||||
|
command can be used to interact with REPLs or other interactive terminal
|
||||||
|
programs that are not shells.
|
||||||
|
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
*VimuxSendKeys*
|
||||||
|
VimuxSendKeys~
|
||||||
|
|
||||||
|
Send keys to the runner pane. This command will not open a new pane if one
|
||||||
|
does not already exist. You will need to use VimuxOpenPane to do this. You can
|
||||||
|
use this command to send keys such as "Enter" or "C-c" to the runner pane.
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
*VimuxOpenPane*
|
||||||
|
VimuxOpenPane~
|
||||||
|
|
||||||
|
This will either open a new pane or use the nearest pane and set it as the
|
||||||
|
vimux runner pane for the other vimux commands. You can control if this command
|
||||||
|
uses the nearest pane or always creates a new one with g:VimuxUseNearest
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
*VimuxPromptCommand*
|
||||||
|
VimuxPromptCommand~
|
||||||
|
|
||||||
|
Prompt for a command and run it in a small horizontal split bellow the current
|
||||||
|
pane. A parameter can be supplied to predefine a command or a part of the
|
||||||
|
command which can be edited in the prompt.
|
||||||
|
>
|
||||||
|
" Prompt for a command to run map
|
||||||
|
map <Leader>vp :VimuxPromptCommand<CR>
|
||||||
|
map <Leader>vm :VimuxPromptCommand("make ")<CR>
|
||||||
|
<
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
*VimuxRunLastCommand*
|
||||||
|
VimuxRunLastCommand~
|
||||||
|
|
||||||
|
Run the last command executed by `VimuxRunCommand`
|
||||||
|
>
|
||||||
|
" Run last command executed by VimuxRunCommand
|
||||||
|
map <Leader>vl :VimuxRunLastCommand<CR>
|
||||||
|
<
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
*VimuxInspectRunner*
|
||||||
|
VimuxInspectRunner~
|
||||||
|
|
||||||
|
Move into the tmux runner pane created by `VimuxRunCommand` and enter copy
|
||||||
|
pmode (scroll mode).
|
||||||
|
>
|
||||||
|
" Inspect runner pane map
|
||||||
|
map <Leader>vi :VimuxInspectRunner<CR>
|
||||||
|
<
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
*VimuxCloseRunner*
|
||||||
|
VimuxCloseRunner~
|
||||||
|
|
||||||
|
Close the tmux runner created by `VimuxRunCommand`
|
||||||
|
>
|
||||||
|
" Close vim tmux runner opened by VimuxRunCommand
|
||||||
|
map <Leader>vq :VimuxCloseRunner<CR>
|
||||||
|
<
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
*VimuxInterruptRunner*
|
||||||
|
VimuxInterruptRunner~
|
||||||
|
|
||||||
|
Interrupt any command that is running inside the
|
||||||
|
runner pane.
|
||||||
|
>
|
||||||
|
" Interrupt any command running in the runner pane map
|
||||||
|
map <Leader>vs :VimuxInterruptRunner<CR>
|
||||||
|
<
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
*VimuxClearRunnerHistory*
|
||||||
|
VimuxClearRunnerHistory~
|
||||||
|
|
||||||
|
Clear the tmux history of the runner pane for when
|
||||||
|
you enter tmux scroll mode inside the runner pane.
|
||||||
|
>
|
||||||
|
" Clear the tmux history of the runner pane
|
||||||
|
map <Leader>vc :VimuxClearRunnerHistory<CR>
|
||||||
|
<
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
*VimuxZoomRunner*
|
||||||
|
VimuxZoomRunner~
|
||||||
|
|
||||||
|
Zoom the runner pane. Once its zoomed, you will need
|
||||||
|
to use tmux "<bind-key> z" to restore the runner pane.
|
||||||
|
Zoom requires tmux version >= 1.8
|
||||||
|
>
|
||||||
|
|
||||||
|
" Zoom the tmux runner page
|
||||||
|
map <Leader>vz :VimuxZoomRunner<CR>
|
||||||
|
<
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
*VimuxRunCommandInDir*
|
||||||
|
VimuxRunCommandInDir~
|
||||||
|
|
||||||
|
Runs the specified command inside the directory of
|
||||||
|
the currently opened file. Takes two arguments. command and inFile
|
||||||
|
|
||||||
|
command: The command to run
|
||||||
|
inFile: If 1 the filename will be appended to the command
|
||||||
|
>
|
||||||
|
|
||||||
|
" Compile currently opened latex file to pdf
|
||||||
|
autocmd Filetype tex nnoremap <buffer> <Leader>rr :update<Bar>:call VimuxRunCommandInDir('latexmk -pdf', 1)<CR>
|
||||||
|
" Push the repository of the currently opened file
|
||||||
|
nnoremap <leader>gp :call VimuxRunCommandInDir("git push", 0)<CR>
|
||||||
|
<
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
MISC (3) *VimuxMisc*
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
*VimuxExampleKeybinding*
|
||||||
|
Full Keybind Example~
|
||||||
|
|
||||||
|
>
|
||||||
|
" Run the current file with rspec
|
||||||
|
map <Leader>rb :call VimuxRunCommand("clear; rspec " . bufname("%"))<CR>
|
||||||
|
|
||||||
|
" Prompt for a command to run
|
||||||
|
map <Leader>vp :VimuxPromptCommand<CR>
|
||||||
|
|
||||||
|
" Run last command executed by VimuxRunCommand
|
||||||
|
map <Leader>vl :VimuxRunLastCommand<CR>
|
||||||
|
|
||||||
|
" Inspect runner pane
|
||||||
|
map <Leader>vi :VimuxInspectRunner<CR>
|
||||||
|
|
||||||
|
" Close vim tmux runner opened by VimuxRunCommand
|
||||||
|
map <Leader>vq :VimuxCloseRunner<CR>
|
||||||
|
|
||||||
|
" Interrupt any command running in the runner pane
|
||||||
|
map <Leader>vx :VimuxInterruptRunner<CR>
|
||||||
|
|
||||||
|
" Zoom the runner pane (use <bind-key> z to restore runner pane)
|
||||||
|
map <Leader>vz :call VimuxZoomRunner()<CR>
|
||||||
|
>
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
*VimuxTslimeReplacement*
|
||||||
|
Vimux as tslime replacement~
|
||||||
|
|
||||||
|
Here is how to use vimux to send code to a REPL. This is similar to tslime.
|
||||||
|
First, add some helpful mappings.
|
||||||
|
|
||||||
|
>
|
||||||
|
function! VimuxSlime()
|
||||||
|
call VimuxSendText(@v)
|
||||||
|
call VimuxSendKeys("Enter")
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" If text is selected, save it in the v buffer and send that buffer it to tmux
|
||||||
|
vmap <LocalLeader>vs "vy :call VimuxSlime()<CR>
|
||||||
|
|
||||||
|
" Select current paragraph and send it to tmux
|
||||||
|
nmap <LocalLeader>vs vip<LocalLeader>vs<CR>
|
||||||
|
<
|
||||||
|
|
||||||
|
Now, open a clojure file. Let's say your leader is backslash (\). Type \vp,
|
||||||
|
and then type lein repl at the prompt. This opens a tmux split running a REPL.
|
||||||
|
Then, select text or put the cursor on a function and type \vs. This will send
|
||||||
|
it to the REPL and evaluate it. The reason we pass `0` to `VimuxRunCommand`
|
||||||
|
is to stop the normal return that is sent to the runner pane and use our own
|
||||||
|
new line so the clojure REPL will evaluate the selected text without adding an
|
||||||
|
extra return. Thanks to @trptcolin for discovering this issue.
|
||||||
|
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
CONFIGURATION (4) *VimuxConfiguration*
|
||||||
|
|
||||||
|
You can configure Vimux like this:
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
*VimuxConfiguration_height*
|
||||||
|
2.1 g:VimuxHeight~
|
||||||
|
|
||||||
|
The percent of the screen the split pane Vimux will spawn should take up.
|
||||||
|
|
||||||
|
let g:VimuxHeight = "40"
|
||||||
|
|
||||||
|
Default: "20"
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
*VimuxConfiguration_orientation*
|
||||||
|
2.2 g:VimuxOrientation~
|
||||||
|
|
||||||
|
The default orientation of the split tmux pane. This tells tmux to make the
|
||||||
|
pane either vertically or horizontally, which is backward from how Vim handles
|
||||||
|
creating splits.
|
||||||
|
|
||||||
|
let g:VimuxOrientation = "h"
|
||||||
|
|
||||||
|
Options:
|
||||||
|
"v": vertical
|
||||||
|
"h": horizontal
|
||||||
|
|
||||||
|
Default: "v"
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
*VimuxConfiguration_use_nearest*
|
||||||
|
2.3 g:VimuxUseNearest
|
||||||
|
|
||||||
|
Use exising pane or window (not used by vim) if found instead of running
|
||||||
|
split-window.
|
||||||
|
|
||||||
|
let VimuxUseNearest = 1
|
||||||
|
|
||||||
|
Default: 1
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
*VimuxConfiguration_reset_sequence*
|
||||||
|
2.4 g:VimuxResetSequence~
|
||||||
|
|
||||||
|
The keys sent to the runner pane before running a command. By default it sends
|
||||||
|
`q` to make sure the pane is not in scroll-mode and `C-u` to clear the line.
|
||||||
|
|
||||||
|
let VimuxResetSequence = ""
|
||||||
|
|
||||||
|
Default: "q C-u"
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
*VimuxPromptString*
|
||||||
|
2.5 g:VimuxPromptString~
|
||||||
|
|
||||||
|
The string presented in the vim command line when Vimux is invoked. Be sure
|
||||||
|
to put a space at the end of the string to allow for distinction between
|
||||||
|
the prompt and your input.
|
||||||
|
|
||||||
|
let g:VimuxPromptString = ""
|
||||||
|
|
||||||
|
Default: "Command? "
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
*VimuxRunnerType*
|
||||||
|
2.6 g:VimuxRunnerType~
|
||||||
|
|
||||||
|
The type of view object Vimux should use for the runner. For reference, a
|
||||||
|
tmux session is a group of windows, and a window is a layout of panes.
|
||||||
|
|
||||||
|
let g:VimuxRunnerType = "window"
|
||||||
|
|
||||||
|
Options:
|
||||||
|
"pane": for panes
|
||||||
|
"window": for windows
|
||||||
|
|
||||||
|
Default: "pane"
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
vim:tw=78:ts=2:sw=2:expandtab:ft=help:norl:
|
||||||
1
dot_vim/bundle/vimux.git/dot_gitignore
Normal file
1
dot_vim/bundle/vimux.git/dot_gitignore
Normal file
@@ -0,0 +1 @@
|
|||||||
|
doc/tags
|
||||||
198
dot_vim/bundle/vimux.git/plugin/vimux.vim
Normal file
198
dot_vim/bundle/vimux.git/plugin/vimux.vim
Normal file
@@ -0,0 +1,198 @@
|
|||||||
|
if exists("g:loaded_vimux") || &cp
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
let g:loaded_vimux = 1
|
||||||
|
|
||||||
|
command -nargs=* VimuxRunCommand :call VimuxRunCommand(<args>)
|
||||||
|
command VimuxRunLastCommand :call VimuxRunLastCommand()
|
||||||
|
command VimuxCloseRunner :call VimuxCloseRunner()
|
||||||
|
command VimuxZoomRunner :call VimuxZoomRunner()
|
||||||
|
command VimuxInspectRunner :call VimuxInspectRunner()
|
||||||
|
command VimuxScrollUpInspect :call VimuxScrollUpInspect()
|
||||||
|
command VimuxScrollDownInspect :call VimuxScrollDownInspect()
|
||||||
|
command VimuxInterruptRunner :call VimuxInterruptRunner()
|
||||||
|
command -nargs=? VimuxPromptCommand :call VimuxPromptCommand(<args>)
|
||||||
|
command VimuxClearRunnerHistory :call VimuxClearRunnerHistory()
|
||||||
|
command VimuxTogglePane :call VimuxTogglePane()
|
||||||
|
|
||||||
|
function! VimuxRunCommandInDir(command, useFile)
|
||||||
|
let l:file = ""
|
||||||
|
if a:useFile ==# 1
|
||||||
|
let l:file = shellescape(expand('%:t'), 1)
|
||||||
|
endif
|
||||||
|
call VimuxRunCommand("cd ".shellescape(expand('%:p:h'), 1)." && ".a:command." ".l:file." && cd - > /dev/null")
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! VimuxRunLastCommand()
|
||||||
|
if exists("g:VimuxRunnerIndex")
|
||||||
|
call VimuxRunCommand(g:VimuxLastCommand)
|
||||||
|
else
|
||||||
|
echo "No last vimux command."
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! VimuxRunCommand(command, ...)
|
||||||
|
if !exists("g:VimuxRunnerIndex") || _VimuxHasRunner(g:VimuxRunnerIndex) == -1
|
||||||
|
call VimuxOpenRunner()
|
||||||
|
endif
|
||||||
|
|
||||||
|
let l:autoreturn = 1
|
||||||
|
if exists("a:1")
|
||||||
|
let l:autoreturn = a:1
|
||||||
|
endif
|
||||||
|
|
||||||
|
let resetSequence = _VimuxOption("g:VimuxResetSequence", "q C-u")
|
||||||
|
let g:VimuxLastCommand = a:command
|
||||||
|
|
||||||
|
call VimuxSendKeys(resetSequence)
|
||||||
|
call VimuxSendText(a:command)
|
||||||
|
|
||||||
|
if l:autoreturn == 1
|
||||||
|
call VimuxSendKeys("Enter")
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! VimuxSendText(text)
|
||||||
|
call VimuxSendKeys('"'.escape(a:text, '"$').'"')
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! VimuxSendKeys(keys)
|
||||||
|
if exists("g:VimuxRunnerIndex")
|
||||||
|
call system("tmux send-keys -t ".g:VimuxRunnerIndex." ".a:keys)
|
||||||
|
else
|
||||||
|
echo "No vimux runner pane/window. Create one with VimuxOpenRunner"
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! VimuxOpenRunner()
|
||||||
|
let nearestIndex = _VimuxNearestIndex()
|
||||||
|
|
||||||
|
if _VimuxOption("g:VimuxUseNearest", 1) == 1 && nearestIndex != -1
|
||||||
|
let g:VimuxRunnerIndex = nearestIndex
|
||||||
|
else
|
||||||
|
if _VimuxRunnerType() == "pane"
|
||||||
|
let height = _VimuxOption("g:VimuxHeight", 20)
|
||||||
|
let orientation = _VimuxOption("g:VimuxOrientation", "v")
|
||||||
|
call system("tmux split-window -p ".height." -".orientation)
|
||||||
|
elseif _VimuxRunnerType() == "window"
|
||||||
|
call system("tmux new-window")
|
||||||
|
endif
|
||||||
|
|
||||||
|
let g:VimuxRunnerIndex = _VimuxTmuxIndex()
|
||||||
|
call system("tmux last-"._VimuxRunnerType())
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! VimuxCloseRunner()
|
||||||
|
if exists("g:VimuxRunnerIndex")
|
||||||
|
call system("tmux kill-"._VimuxRunnerType()." -t ".g:VimuxRunnerIndex)
|
||||||
|
unlet g:VimuxRunnerIndex
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! VimuxTogglePane()
|
||||||
|
if exists("g:VimuxRunnerIndex")
|
||||||
|
if _VimuxRunnerType() == "window"
|
||||||
|
call system("tmux join-pane -d -s ".g:VimuxRunnerIndex." -p "._VimuxOption("g:VimuxHeight", 20))
|
||||||
|
let g:VimuxRunnerType = "pane"
|
||||||
|
elseif _VimuxRunnerType() == "pane"
|
||||||
|
let g:VimuxRunnerIndex=substitute(system("tmux break-pane -d -t ".g:VimuxRunnerIndex." -P -F '#{window_index}'"), "\n", "", "")
|
||||||
|
let g:VimuxRunnerType = "window"
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! VimuxZoomRunner()
|
||||||
|
if exists("g:VimuxRunnerIndex")
|
||||||
|
if _VimuxRunnerType() == "pane"
|
||||||
|
call system("tmux resize-pane -Z -t ".g:VimuxRunnerIndex)
|
||||||
|
elseif _VimuxRunnerType() == "window"
|
||||||
|
call system("tmux select-window -t ".g:VimuxRunnerIndex)
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! VimuxInspectRunner()
|
||||||
|
call system("tmux select-"._VimuxRunnerType()." -t ".g:VimuxRunnerIndex)
|
||||||
|
call system("tmux copy-mode")
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! VimuxScrollUpInspect()
|
||||||
|
call VimuxInspectRunner()
|
||||||
|
call system("tmux last-"._VimuxRunnerType())
|
||||||
|
call VimuxSendKeys("C-u")
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! VimuxScrollDownInspect()
|
||||||
|
call VimuxInspectRunner()
|
||||||
|
call system("tmux last-"._VimuxRunnerType())
|
||||||
|
call VimuxSendKeys("C-d")
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! VimuxInterruptRunner()
|
||||||
|
call VimuxSendKeys("^c")
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! VimuxClearRunnerHistory()
|
||||||
|
if exists("g:VimuxRunnerIndex")
|
||||||
|
call system("tmux clear-history -t ".g:VimuxRunnerIndex)
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! VimuxPromptCommand(...)
|
||||||
|
let command = a:0 == 1 ? a:1 : ""
|
||||||
|
let l:command = input(_VimuxOption("g:VimuxPromptString", "Command? "), command)
|
||||||
|
call VimuxRunCommand(l:command)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! _VimuxTmuxSession()
|
||||||
|
return _VimuxTmuxProperty("#S")
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! _VimuxTmuxIndex()
|
||||||
|
if _VimuxRunnerType() == "pane"
|
||||||
|
return _VimuxTmuxPaneIndex()
|
||||||
|
else
|
||||||
|
return _VimuxTmuxWindowIndex()
|
||||||
|
end
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! _VimuxTmuxPaneIndex()
|
||||||
|
return _VimuxTmuxProperty("#I.#P")
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! _VimuxTmuxWindowIndex()
|
||||||
|
return _VimuxTmuxProperty("#I")
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! _VimuxNearestIndex()
|
||||||
|
let views = split(system("tmux list-"._VimuxRunnerType()."s"), "\n")
|
||||||
|
|
||||||
|
for view in views
|
||||||
|
if match(view, "(active)") == -1
|
||||||
|
return split(view, ":")[0]
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
|
||||||
|
return -1
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! _VimuxRunnerType()
|
||||||
|
return _VimuxOption("g:VimuxRunnerType", "pane")
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! _VimuxOption(option, default)
|
||||||
|
if exists(a:option)
|
||||||
|
return eval(a:option)
|
||||||
|
else
|
||||||
|
return a:default
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! _VimuxTmuxProperty(property)
|
||||||
|
return substitute(system("tmux display -p '".a:property."'"), '\n$', '', '')
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! _VimuxHasRunner(index)
|
||||||
|
return match(system("tmux list-"._VimuxRunnerType()."s -a"), a:index.":")
|
||||||
|
endfunction
|
||||||
347
dot_vim/colors/Tomorrow-Night-Blue.vim
Normal file
347
dot_vim/colors/Tomorrow-Night-Blue.vim
Normal file
@@ -0,0 +1,347 @@
|
|||||||
|
" Tomorrow Night Blue - Full Colour and 256 Colour
|
||||||
|
" http://chriskempson.com
|
||||||
|
"
|
||||||
|
" Hex colour conversion functions borrowed from the theme "Desert256""
|
||||||
|
|
||||||
|
" Default GUI Colours
|
||||||
|
let s:foreground = "ffffff"
|
||||||
|
let s:background = "002451"
|
||||||
|
let s:selection = "003f8e"
|
||||||
|
let s:line = "00346e"
|
||||||
|
let s:comment = "7285b7"
|
||||||
|
let s:red = "ff9da4"
|
||||||
|
let s:orange = "ffc58f"
|
||||||
|
let s:yellow = "ffeead"
|
||||||
|
let s:green = "d1f1a9"
|
||||||
|
let s:aqua = "99ffff"
|
||||||
|
let s:blue = "bbdaff"
|
||||||
|
let s:purple = "ebbbff"
|
||||||
|
let s:window = "4d5057"
|
||||||
|
|
||||||
|
set background=dark
|
||||||
|
hi clear
|
||||||
|
syntax reset
|
||||||
|
|
||||||
|
let g:colors_name = "Tomorrow-Night-Blue"
|
||||||
|
|
||||||
|
if has("gui_running") || &t_Co == 88 || &t_Co == 256
|
||||||
|
" Returns an approximate grey index for the given grey level
|
||||||
|
fun <SID>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 <SID>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 <SID>grey_colour(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 colour index for the given colour level
|
||||||
|
fun <SID>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 colour level for the given colour index
|
||||||
|
fun <SID>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 colour indices
|
||||||
|
fun <SID>rgb_colour(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 colour levels
|
||||||
|
fun <SID>colour(r, g, b)
|
||||||
|
" Get the closest grey
|
||||||
|
let l:gx = <SID>grey_number(a:r)
|
||||||
|
let l:gy = <SID>grey_number(a:g)
|
||||||
|
let l:gz = <SID>grey_number(a:b)
|
||||||
|
|
||||||
|
" Get the closest colour
|
||||||
|
let l:x = <SID>rgb_number(a:r)
|
||||||
|
let l:y = <SID>rgb_number(a:g)
|
||||||
|
let l:z = <SID>rgb_number(a:b)
|
||||||
|
|
||||||
|
if l:gx == l:gy && l:gy == l:gz
|
||||||
|
" There are two possibilities
|
||||||
|
let l:dgr = <SID>grey_level(l:gx) - a:r
|
||||||
|
let l:dgg = <SID>grey_level(l:gy) - a:g
|
||||||
|
let l:dgb = <SID>grey_level(l:gz) - a:b
|
||||||
|
let l:dgrey = (l:dgr * l:dgr) + (l:dgg * l:dgg) + (l:dgb * l:dgb)
|
||||||
|
let l:dr = <SID>rgb_level(l:gx) - a:r
|
||||||
|
let l:dg = <SID>rgb_level(l:gy) - a:g
|
||||||
|
let l:db = <SID>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 <SID>grey_colour(l:gx)
|
||||||
|
else
|
||||||
|
" Use the colour
|
||||||
|
return <SID>rgb_colour(l:x, l:y, l:z)
|
||||||
|
endif
|
||||||
|
else
|
||||||
|
" Only one possibility
|
||||||
|
return <SID>rgb_colour(l:x, l:y, l:z)
|
||||||
|
endif
|
||||||
|
endfun
|
||||||
|
|
||||||
|
" Returns the palette index to approximate the 'rrggbb' hex string
|
||||||
|
fun <SID>rgb(rgb)
|
||||||
|
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 <SID>colour(l:r, l:g, l:b)
|
||||||
|
endfun
|
||||||
|
|
||||||
|
" Sets the highlighting for the given group
|
||||||
|
fun <SID>X(group, fg, bg, attr)
|
||||||
|
if a:fg != ""
|
||||||
|
exec "hi " . a:group . " guifg=#" . a:fg . " ctermfg=" . <SID>rgb(a:fg)
|
||||||
|
endif
|
||||||
|
if a:bg != ""
|
||||||
|
exec "hi " . a:group . " guibg=#" . a:bg . " ctermbg=" . <SID>rgb(a:bg)
|
||||||
|
endif
|
||||||
|
if a:attr != ""
|
||||||
|
exec "hi " . a:group . " gui=" . a:attr . " cterm=" . a:attr
|
||||||
|
endif
|
||||||
|
endfun
|
||||||
|
|
||||||
|
" Vim Highlighting
|
||||||
|
call <SID>X("Normal", s:foreground, s:background, "")
|
||||||
|
call <SID>X("LineNr", s:selection, "", "")
|
||||||
|
call <SID>X("NonText", s:selection, "", "")
|
||||||
|
call <SID>X("SpecialKey", s:selection, "", "")
|
||||||
|
call <SID>X("Search", s:background, s:yellow, "")
|
||||||
|
call <SID>X("TabLine", s:foreground, s:background, "reverse")
|
||||||
|
call <SID>X("StatusLine", s:window, s:yellow, "reverse")
|
||||||
|
call <SID>X("StatusLineNC", s:window, s:foreground, "reverse")
|
||||||
|
call <SID>X("VertSplit", s:window, s:window, "none")
|
||||||
|
call <SID>X("Visual", "", s:selection, "")
|
||||||
|
call <SID>X("Directory", s:blue, "", "")
|
||||||
|
call <SID>X("ModeMsg", s:green, "", "")
|
||||||
|
call <SID>X("MoreMsg", s:green, "", "")
|
||||||
|
call <SID>X("Question", s:green, "", "")
|
||||||
|
call <SID>X("WarningMsg", s:red, "", "")
|
||||||
|
call <SID>X("MatchParen", "", s:selection, "")
|
||||||
|
call <SID>X("Folded", s:comment, s:background, "")
|
||||||
|
call <SID>X("FoldColumn", "", s:background, "")
|
||||||
|
if version >= 700
|
||||||
|
call <SID>X("CursorLine", "", s:line, "none")
|
||||||
|
call <SID>X("CursorColumn", "", s:line, "none")
|
||||||
|
call <SID>X("PMenu", s:foreground, s:selection, "none")
|
||||||
|
call <SID>X("PMenuSel", s:foreground, s:selection, "reverse")
|
||||||
|
end
|
||||||
|
if version >= 703
|
||||||
|
call <SID>X("ColorColumn", "", s:line, "none")
|
||||||
|
end
|
||||||
|
|
||||||
|
" Standard Highlighting
|
||||||
|
call <SID>X("Comment", s:comment, "", "")
|
||||||
|
call <SID>X("Todo", s:comment, s:background, "")
|
||||||
|
call <SID>X("Title", s:comment, "", "")
|
||||||
|
call <SID>X("Identifier", s:red, "", "none")
|
||||||
|
call <SID>X("Statement", s:foreground, "", "")
|
||||||
|
call <SID>X("Conditional", s:foreground, "", "")
|
||||||
|
call <SID>X("Repeat", s:foreground, "", "")
|
||||||
|
call <SID>X("Structure", s:purple, "", "")
|
||||||
|
call <SID>X("Function", s:blue, "", "")
|
||||||
|
call <SID>X("Constant", s:orange, "", "")
|
||||||
|
call <SID>X("String", s:green, "", "")
|
||||||
|
call <SID>X("Special", s:foreground, "", "")
|
||||||
|
call <SID>X("PreProc", s:purple, "", "")
|
||||||
|
call <SID>X("Operator", s:aqua, "", "none")
|
||||||
|
call <SID>X("Type", s:blue, "", "none")
|
||||||
|
call <SID>X("Define", s:purple, "", "none")
|
||||||
|
call <SID>X("Include", s:blue, "", "")
|
||||||
|
"call <SID>X("Ignore", "666666", "", "")
|
||||||
|
|
||||||
|
" Vim Highlighting
|
||||||
|
call <SID>X("vimCommand", s:red, "", "none")
|
||||||
|
|
||||||
|
" C Highlighting
|
||||||
|
call <SID>X("cType", s:yellow, "", "")
|
||||||
|
call <SID>X("cStorageClass", s:purple, "", "")
|
||||||
|
call <SID>X("cConditional", s:purple, "", "")
|
||||||
|
call <SID>X("cRepeat", s:purple, "", "")
|
||||||
|
|
||||||
|
" PHP Highlighting
|
||||||
|
call <SID>X("phpVarSelector", s:red, "", "")
|
||||||
|
call <SID>X("phpKeyword", s:purple, "", "")
|
||||||
|
call <SID>X("phpRepeat", s:purple, "", "")
|
||||||
|
call <SID>X("phpConditional", s:purple, "", "")
|
||||||
|
call <SID>X("phpStatement", s:purple, "", "")
|
||||||
|
call <SID>X("phpMemberSelector", s:foreground, "", "")
|
||||||
|
|
||||||
|
" Ruby Highlighting
|
||||||
|
call <SID>X("rubySymbol", s:green, "", "")
|
||||||
|
call <SID>X("rubyConstant", s:yellow, "", "")
|
||||||
|
call <SID>X("rubyAttribute", s:blue, "", "")
|
||||||
|
call <SID>X("rubyInclude", s:blue, "", "")
|
||||||
|
call <SID>X("rubyLocalVariableOrMethod", s:orange, "", "")
|
||||||
|
call <SID>X("rubyCurlyBlock", s:orange, "", "")
|
||||||
|
call <SID>X("rubyStringDelimiter", s:green, "", "")
|
||||||
|
call <SID>X("rubyInterpolationDelimiter", s:orange, "", "")
|
||||||
|
call <SID>X("rubyConditional", s:purple, "", "")
|
||||||
|
call <SID>X("rubyRepeat", s:purple, "", "")
|
||||||
|
|
||||||
|
" Python Highlighting
|
||||||
|
call <SID>X("pythonInclude", s:purple, "", "")
|
||||||
|
call <SID>X("pythonStatement", s:purple, "", "")
|
||||||
|
call <SID>X("pythonConditional", s:purple, "", "")
|
||||||
|
call <SID>X("pythonFunction", s:blue, "", "")
|
||||||
|
|
||||||
|
" JavaScript Highlighting
|
||||||
|
call <SID>X("javaScriptBraces", s:foreground, "", "")
|
||||||
|
call <SID>X("javaScriptFunction", s:purple, "", "")
|
||||||
|
call <SID>X("javaScriptConditional", s:purple, "", "")
|
||||||
|
call <SID>X("javaScriptRepeat", s:purple, "", "")
|
||||||
|
call <SID>X("javaScriptNumber", s:orange, "", "")
|
||||||
|
call <SID>X("javaScriptMember", s:orange, "", "")
|
||||||
|
|
||||||
|
" HTML Highlighting
|
||||||
|
call <SID>X("htmlTag", s:red, "", "")
|
||||||
|
call <SID>X("htmlTagName", s:red, "", "")
|
||||||
|
call <SID>X("htmlArg", s:red, "", "")
|
||||||
|
call <SID>X("htmlScriptTag", s:red, "", "")
|
||||||
|
|
||||||
|
" Diff Highlighting
|
||||||
|
call <SID>X("diffAdded", s:green, "", "")
|
||||||
|
call <SID>X("diffRemoved", s:red, "", "")
|
||||||
|
|
||||||
|
" Delete Functions
|
||||||
|
delf <SID>X
|
||||||
|
delf <SID>rgb
|
||||||
|
delf <SID>colour
|
||||||
|
delf <SID>rgb_colour
|
||||||
|
delf <SID>rgb_level
|
||||||
|
delf <SID>rgb_number
|
||||||
|
delf <SID>grey_colour
|
||||||
|
delf <SID>grey_level
|
||||||
|
delf <SID>grey_number
|
||||||
|
endif
|
||||||
347
dot_vim/colors/Tomorrow-Night-Bright.vim
Normal file
347
dot_vim/colors/Tomorrow-Night-Bright.vim
Normal file
@@ -0,0 +1,347 @@
|
|||||||
|
" Tomorrow Night Bright - Full Colour and 256 Colour
|
||||||
|
" http://chriskempson.com
|
||||||
|
"
|
||||||
|
" Hex colour conversion functions borrowed from the theme "Desert256""
|
||||||
|
|
||||||
|
" Default GUI Colours
|
||||||
|
let s:foreground = "eaeaea"
|
||||||
|
let s:background = "000000"
|
||||||
|
let s:selection = "424242"
|
||||||
|
let s:line = "2a2a2a"
|
||||||
|
let s:comment = "969896"
|
||||||
|
let s:red = "d54e53"
|
||||||
|
let s:orange = "e78c45"
|
||||||
|
let s:yellow = "e7c547"
|
||||||
|
let s:green = "b9ca4a"
|
||||||
|
let s:aqua = "70c0b1"
|
||||||
|
let s:blue = "7aa6da"
|
||||||
|
let s:purple = "c397d8"
|
||||||
|
let s:window = "4d5057"
|
||||||
|
|
||||||
|
set background=dark
|
||||||
|
hi clear
|
||||||
|
syntax reset
|
||||||
|
|
||||||
|
let g:colors_name = "Tomorrow-Night-Bright"
|
||||||
|
|
||||||
|
if has("gui_running") || &t_Co == 88 || &t_Co == 256
|
||||||
|
" Returns an approximate grey index for the given grey level
|
||||||
|
fun <SID>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 <SID>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 <SID>grey_colour(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 colour index for the given colour level
|
||||||
|
fun <SID>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 colour level for the given colour index
|
||||||
|
fun <SID>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 colour indices
|
||||||
|
fun <SID>rgb_colour(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 colour levels
|
||||||
|
fun <SID>colour(r, g, b)
|
||||||
|
" Get the closest grey
|
||||||
|
let l:gx = <SID>grey_number(a:r)
|
||||||
|
let l:gy = <SID>grey_number(a:g)
|
||||||
|
let l:gz = <SID>grey_number(a:b)
|
||||||
|
|
||||||
|
" Get the closest colour
|
||||||
|
let l:x = <SID>rgb_number(a:r)
|
||||||
|
let l:y = <SID>rgb_number(a:g)
|
||||||
|
let l:z = <SID>rgb_number(a:b)
|
||||||
|
|
||||||
|
if l:gx == l:gy && l:gy == l:gz
|
||||||
|
" There are two possibilities
|
||||||
|
let l:dgr = <SID>grey_level(l:gx) - a:r
|
||||||
|
let l:dgg = <SID>grey_level(l:gy) - a:g
|
||||||
|
let l:dgb = <SID>grey_level(l:gz) - a:b
|
||||||
|
let l:dgrey = (l:dgr * l:dgr) + (l:dgg * l:dgg) + (l:dgb * l:dgb)
|
||||||
|
let l:dr = <SID>rgb_level(l:gx) - a:r
|
||||||
|
let l:dg = <SID>rgb_level(l:gy) - a:g
|
||||||
|
let l:db = <SID>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 <SID>grey_colour(l:gx)
|
||||||
|
else
|
||||||
|
" Use the colour
|
||||||
|
return <SID>rgb_colour(l:x, l:y, l:z)
|
||||||
|
endif
|
||||||
|
else
|
||||||
|
" Only one possibility
|
||||||
|
return <SID>rgb_colour(l:x, l:y, l:z)
|
||||||
|
endif
|
||||||
|
endfun
|
||||||
|
|
||||||
|
" Returns the palette index to approximate the 'rrggbb' hex string
|
||||||
|
fun <SID>rgb(rgb)
|
||||||
|
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 <SID>colour(l:r, l:g, l:b)
|
||||||
|
endfun
|
||||||
|
|
||||||
|
" Sets the highlighting for the given group
|
||||||
|
fun <SID>X(group, fg, bg, attr)
|
||||||
|
if a:fg != ""
|
||||||
|
exec "hi " . a:group . " guifg=#" . a:fg . " ctermfg=" . <SID>rgb(a:fg)
|
||||||
|
endif
|
||||||
|
if a:bg != ""
|
||||||
|
exec "hi " . a:group . " guibg=#" . a:bg . " ctermbg=" . <SID>rgb(a:bg)
|
||||||
|
endif
|
||||||
|
if a:attr != ""
|
||||||
|
exec "hi " . a:group . " gui=" . a:attr . " cterm=" . a:attr
|
||||||
|
endif
|
||||||
|
endfun
|
||||||
|
|
||||||
|
" Vim Highlighting
|
||||||
|
call <SID>X("Normal", s:foreground, s:background, "")
|
||||||
|
call <SID>X("LineNr", s:selection, "", "")
|
||||||
|
call <SID>X("NonText", s:selection, "", "")
|
||||||
|
call <SID>X("SpecialKey", s:selection, "", "")
|
||||||
|
call <SID>X("Search", s:background, s:yellow, "")
|
||||||
|
call <SID>X("TabLine", s:foreground, s:background, "reverse")
|
||||||
|
call <SID>X("StatusLine", s:window, s:yellow, "reverse")
|
||||||
|
call <SID>X("StatusLineNC", s:window, s:foreground, "reverse")
|
||||||
|
call <SID>X("VertSplit", s:window, s:window, "none")
|
||||||
|
call <SID>X("Visual", "", s:selection, "")
|
||||||
|
call <SID>X("Directory", s:blue, "", "")
|
||||||
|
call <SID>X("ModeMsg", s:green, "", "")
|
||||||
|
call <SID>X("MoreMsg", s:green, "", "")
|
||||||
|
call <SID>X("Question", s:green, "", "")
|
||||||
|
call <SID>X("WarningMsg", s:red, "", "")
|
||||||
|
call <SID>X("MatchParen", "", s:selection, "")
|
||||||
|
call <SID>X("Folded", s:comment, s:background, "")
|
||||||
|
call <SID>X("FoldColumn", "", s:background, "")
|
||||||
|
if version >= 700
|
||||||
|
call <SID>X("CursorLine", "", s:line, "none")
|
||||||
|
call <SID>X("CursorColumn", "", s:line, "none")
|
||||||
|
call <SID>X("PMenu", s:foreground, s:selection, "none")
|
||||||
|
call <SID>X("PMenuSel", s:foreground, s:selection, "reverse")
|
||||||
|
end
|
||||||
|
if version >= 703
|
||||||
|
call <SID>X("ColorColumn", "", s:line, "none")
|
||||||
|
end
|
||||||
|
|
||||||
|
" Standard Highlighting
|
||||||
|
call <SID>X("Comment", s:comment, "", "")
|
||||||
|
call <SID>X("Todo", s:comment, s:background, "")
|
||||||
|
call <SID>X("Title", s:comment, "", "")
|
||||||
|
call <SID>X("Identifier", s:red, "", "none")
|
||||||
|
call <SID>X("Statement", s:foreground, "", "")
|
||||||
|
call <SID>X("Conditional", s:foreground, "", "")
|
||||||
|
call <SID>X("Repeat", s:foreground, "", "")
|
||||||
|
call <SID>X("Structure", s:purple, "", "")
|
||||||
|
call <SID>X("Function", s:blue, "", "")
|
||||||
|
call <SID>X("Constant", s:orange, "", "")
|
||||||
|
call <SID>X("String", s:green, "", "")
|
||||||
|
call <SID>X("Special", s:foreground, "", "")
|
||||||
|
call <SID>X("PreProc", s:purple, "", "")
|
||||||
|
call <SID>X("Operator", s:aqua, "", "none")
|
||||||
|
call <SID>X("Type", s:blue, "", "none")
|
||||||
|
call <SID>X("Define", s:purple, "", "none")
|
||||||
|
call <SID>X("Include", s:blue, "", "")
|
||||||
|
"call <SID>X("Ignore", "666666", "", "")
|
||||||
|
|
||||||
|
" Vim Highlighting
|
||||||
|
call <SID>X("vimCommand", s:red, "", "none")
|
||||||
|
|
||||||
|
" C Highlighting
|
||||||
|
call <SID>X("cType", s:yellow, "", "")
|
||||||
|
call <SID>X("cStorageClass", s:purple, "", "")
|
||||||
|
call <SID>X("cConditional", s:purple, "", "")
|
||||||
|
call <SID>X("cRepeat", s:purple, "", "")
|
||||||
|
|
||||||
|
" PHP Highlighting
|
||||||
|
call <SID>X("phpVarSelector", s:red, "", "")
|
||||||
|
call <SID>X("phpKeyword", s:purple, "", "")
|
||||||
|
call <SID>X("phpRepeat", s:purple, "", "")
|
||||||
|
call <SID>X("phpConditional", s:purple, "", "")
|
||||||
|
call <SID>X("phpStatement", s:purple, "", "")
|
||||||
|
call <SID>X("phpMemberSelector", s:foreground, "", "")
|
||||||
|
|
||||||
|
" Ruby Highlighting
|
||||||
|
call <SID>X("rubySymbol", s:green, "", "")
|
||||||
|
call <SID>X("rubyConstant", s:yellow, "", "")
|
||||||
|
call <SID>X("rubyAttribute", s:blue, "", "")
|
||||||
|
call <SID>X("rubyInclude", s:blue, "", "")
|
||||||
|
call <SID>X("rubyLocalVariableOrMethod", s:orange, "", "")
|
||||||
|
call <SID>X("rubyCurlyBlock", s:orange, "", "")
|
||||||
|
call <SID>X("rubyStringDelimiter", s:green, "", "")
|
||||||
|
call <SID>X("rubyInterpolationDelimiter", s:orange, "", "")
|
||||||
|
call <SID>X("rubyConditional", s:purple, "", "")
|
||||||
|
call <SID>X("rubyRepeat", s:purple, "", "")
|
||||||
|
|
||||||
|
" Python Highlighting
|
||||||
|
call <SID>X("pythonInclude", s:purple, "", "")
|
||||||
|
call <SID>X("pythonStatement", s:purple, "", "")
|
||||||
|
call <SID>X("pythonConditional", s:purple, "", "")
|
||||||
|
call <SID>X("pythonFunction", s:blue, "", "")
|
||||||
|
|
||||||
|
" JavaScript Highlighting
|
||||||
|
call <SID>X("javaScriptBraces", s:foreground, "", "")
|
||||||
|
call <SID>X("javaScriptFunction", s:purple, "", "")
|
||||||
|
call <SID>X("javaScriptConditional", s:purple, "", "")
|
||||||
|
call <SID>X("javaScriptRepeat", s:purple, "", "")
|
||||||
|
call <SID>X("javaScriptNumber", s:orange, "", "")
|
||||||
|
call <SID>X("javaScriptMember", s:orange, "", "")
|
||||||
|
|
||||||
|
" HTML Highlighting
|
||||||
|
call <SID>X("htmlTag", s:red, "", "")
|
||||||
|
call <SID>X("htmlTagName", s:red, "", "")
|
||||||
|
call <SID>X("htmlArg", s:red, "", "")
|
||||||
|
call <SID>X("htmlScriptTag", s:red, "", "")
|
||||||
|
|
||||||
|
" Diff Highlighting
|
||||||
|
call <SID>X("diffAdded", s:green, "", "")
|
||||||
|
call <SID>X("diffRemoved", s:red, "", "")
|
||||||
|
|
||||||
|
" Delete Functions
|
||||||
|
delf <SID>X
|
||||||
|
delf <SID>rgb
|
||||||
|
delf <SID>colour
|
||||||
|
delf <SID>rgb_colour
|
||||||
|
delf <SID>rgb_level
|
||||||
|
delf <SID>rgb_number
|
||||||
|
delf <SID>grey_colour
|
||||||
|
delf <SID>grey_level
|
||||||
|
delf <SID>grey_number
|
||||||
|
endif
|
||||||
347
dot_vim/colors/Tomorrow-Night-Eighties.vim
Normal file
347
dot_vim/colors/Tomorrow-Night-Eighties.vim
Normal file
@@ -0,0 +1,347 @@
|
|||||||
|
" Tomorrow Night Eighties - Full Colour and 256 Colour
|
||||||
|
" http://chriskempson.com
|
||||||
|
"
|
||||||
|
" Hex colour conversion functions borrowed from the theme "Desert256""
|
||||||
|
|
||||||
|
" Default GUI Colours
|
||||||
|
let s:foreground = "cccccc"
|
||||||
|
let s:background = "2d2d2d"
|
||||||
|
let s:selection = "515151"
|
||||||
|
let s:line = "393939"
|
||||||
|
let s:comment = "999999"
|
||||||
|
let s:red = "f2777a"
|
||||||
|
let s:orange = "f99157"
|
||||||
|
let s:yellow = "ffcc66"
|
||||||
|
let s:green = "99cc99"
|
||||||
|
let s:aqua = "009999"
|
||||||
|
let s:blue = "99cccc"
|
||||||
|
let s:purple = "cc99cc"
|
||||||
|
let s:window = "4d5057"
|
||||||
|
|
||||||
|
set background=dark
|
||||||
|
hi clear
|
||||||
|
syntax reset
|
||||||
|
|
||||||
|
let g:colors_name = "Tomorrow-Night-Eighties"
|
||||||
|
|
||||||
|
if has("gui_running") || &t_Co == 88 || &t_Co == 256
|
||||||
|
" Returns an approximate grey index for the given grey level
|
||||||
|
fun <SID>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 <SID>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 <SID>grey_colour(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 colour index for the given colour level
|
||||||
|
fun <SID>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 colour level for the given colour index
|
||||||
|
fun <SID>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 colour indices
|
||||||
|
fun <SID>rgb_colour(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 colour levels
|
||||||
|
fun <SID>colour(r, g, b)
|
||||||
|
" Get the closest grey
|
||||||
|
let l:gx = <SID>grey_number(a:r)
|
||||||
|
let l:gy = <SID>grey_number(a:g)
|
||||||
|
let l:gz = <SID>grey_number(a:b)
|
||||||
|
|
||||||
|
" Get the closest colour
|
||||||
|
let l:x = <SID>rgb_number(a:r)
|
||||||
|
let l:y = <SID>rgb_number(a:g)
|
||||||
|
let l:z = <SID>rgb_number(a:b)
|
||||||
|
|
||||||
|
if l:gx == l:gy && l:gy == l:gz
|
||||||
|
" There are two possibilities
|
||||||
|
let l:dgr = <SID>grey_level(l:gx) - a:r
|
||||||
|
let l:dgg = <SID>grey_level(l:gy) - a:g
|
||||||
|
let l:dgb = <SID>grey_level(l:gz) - a:b
|
||||||
|
let l:dgrey = (l:dgr * l:dgr) + (l:dgg * l:dgg) + (l:dgb * l:dgb)
|
||||||
|
let l:dr = <SID>rgb_level(l:gx) - a:r
|
||||||
|
let l:dg = <SID>rgb_level(l:gy) - a:g
|
||||||
|
let l:db = <SID>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 <SID>grey_colour(l:gx)
|
||||||
|
else
|
||||||
|
" Use the colour
|
||||||
|
return <SID>rgb_colour(l:x, l:y, l:z)
|
||||||
|
endif
|
||||||
|
else
|
||||||
|
" Only one possibility
|
||||||
|
return <SID>rgb_colour(l:x, l:y, l:z)
|
||||||
|
endif
|
||||||
|
endfun
|
||||||
|
|
||||||
|
" Returns the palette index to approximate the 'rrggbb' hex string
|
||||||
|
fun <SID>rgb(rgb)
|
||||||
|
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 <SID>colour(l:r, l:g, l:b)
|
||||||
|
endfun
|
||||||
|
|
||||||
|
" Sets the highlighting for the given group
|
||||||
|
fun <SID>X(group, fg, bg, attr)
|
||||||
|
if a:fg != ""
|
||||||
|
exec "hi " . a:group . " guifg=#" . a:fg . " ctermfg=" . <SID>rgb(a:fg)
|
||||||
|
endif
|
||||||
|
if a:bg != ""
|
||||||
|
exec "hi " . a:group . " guibg=#" . a:bg . " ctermbg=" . <SID>rgb(a:bg)
|
||||||
|
endif
|
||||||
|
if a:attr != ""
|
||||||
|
exec "hi " . a:group . " gui=" . a:attr . " cterm=" . a:attr
|
||||||
|
endif
|
||||||
|
endfun
|
||||||
|
|
||||||
|
" Vim Highlighting
|
||||||
|
call <SID>X("Normal", s:foreground, s:background, "")
|
||||||
|
call <SID>X("LineNr", s:selection, "", "")
|
||||||
|
call <SID>X("NonText", s:selection, "", "")
|
||||||
|
call <SID>X("SpecialKey", s:selection, "", "")
|
||||||
|
call <SID>X("Search", s:background, s:yellow, "")
|
||||||
|
call <SID>X("TabLine", s:foreground, s:background, "reverse")
|
||||||
|
call <SID>X("StatusLine", s:window, s:yellow, "reverse")
|
||||||
|
call <SID>X("StatusLineNC", s:window, s:foreground, "reverse")
|
||||||
|
call <SID>X("VertSplit", s:window, s:window, "none")
|
||||||
|
call <SID>X("Visual", "", s:selection, "")
|
||||||
|
call <SID>X("Directory", s:blue, "", "")
|
||||||
|
call <SID>X("ModeMsg", s:green, "", "")
|
||||||
|
call <SID>X("MoreMsg", s:green, "", "")
|
||||||
|
call <SID>X("Question", s:green, "", "")
|
||||||
|
call <SID>X("WarningMsg", s:red, "", "")
|
||||||
|
call <SID>X("MatchParen", "", s:selection, "")
|
||||||
|
call <SID>X("Folded", s:comment, s:background, "")
|
||||||
|
call <SID>X("FoldColumn", "", s:background, "")
|
||||||
|
if version >= 700
|
||||||
|
call <SID>X("CursorLine", "", s:line, "none")
|
||||||
|
call <SID>X("CursorColumn", "", s:line, "none")
|
||||||
|
call <SID>X("PMenu", s:foreground, s:selection, "none")
|
||||||
|
call <SID>X("PMenuSel", s:foreground, s:selection, "reverse")
|
||||||
|
end
|
||||||
|
if version >= 703
|
||||||
|
call <SID>X("ColorColumn", "", s:line, "none")
|
||||||
|
end
|
||||||
|
|
||||||
|
" Standard Highlighting
|
||||||
|
call <SID>X("Comment", s:comment, "", "")
|
||||||
|
call <SID>X("Todo", s:comment, s:background, "")
|
||||||
|
call <SID>X("Title", s:comment, "", "")
|
||||||
|
call <SID>X("Identifier", s:red, "", "none")
|
||||||
|
call <SID>X("Statement", s:foreground, "", "")
|
||||||
|
call <SID>X("Conditional", s:foreground, "", "")
|
||||||
|
call <SID>X("Repeat", s:foreground, "", "")
|
||||||
|
call <SID>X("Structure", s:purple, "", "")
|
||||||
|
call <SID>X("Function", s:blue, "", "")
|
||||||
|
call <SID>X("Constant", s:orange, "", "")
|
||||||
|
call <SID>X("String", s:green, "", "")
|
||||||
|
call <SID>X("Special", s:foreground, "", "")
|
||||||
|
call <SID>X("PreProc", s:purple, "", "")
|
||||||
|
call <SID>X("Operator", s:aqua, "", "none")
|
||||||
|
call <SID>X("Type", s:blue, "", "none")
|
||||||
|
call <SID>X("Define", s:purple, "", "none")
|
||||||
|
call <SID>X("Include", s:blue, "", "")
|
||||||
|
"call <SID>X("Ignore", "666666", "", "")
|
||||||
|
|
||||||
|
" Vim Highlighting
|
||||||
|
call <SID>X("vimCommand", s:red, "", "none")
|
||||||
|
|
||||||
|
" C Highlighting
|
||||||
|
call <SID>X("cType", s:yellow, "", "")
|
||||||
|
call <SID>X("cStorageClass", s:purple, "", "")
|
||||||
|
call <SID>X("cConditional", s:purple, "", "")
|
||||||
|
call <SID>X("cRepeat", s:purple, "", "")
|
||||||
|
|
||||||
|
" PHP Highlighting
|
||||||
|
call <SID>X("phpVarSelector", s:red, "", "")
|
||||||
|
call <SID>X("phpKeyword", s:purple, "", "")
|
||||||
|
call <SID>X("phpRepeat", s:purple, "", "")
|
||||||
|
call <SID>X("phpConditional", s:purple, "", "")
|
||||||
|
call <SID>X("phpStatement", s:purple, "", "")
|
||||||
|
call <SID>X("phpMemberSelector", s:foreground, "", "")
|
||||||
|
|
||||||
|
" Ruby Highlighting
|
||||||
|
call <SID>X("rubySymbol", s:green, "", "")
|
||||||
|
call <SID>X("rubyConstant", s:yellow, "", "")
|
||||||
|
call <SID>X("rubyAttribute", s:blue, "", "")
|
||||||
|
call <SID>X("rubyInclude", s:blue, "", "")
|
||||||
|
call <SID>X("rubyLocalVariableOrMethod", s:orange, "", "")
|
||||||
|
call <SID>X("rubyCurlyBlock", s:orange, "", "")
|
||||||
|
call <SID>X("rubyStringDelimiter", s:green, "", "")
|
||||||
|
call <SID>X("rubyInterpolationDelimiter", s:orange, "", "")
|
||||||
|
call <SID>X("rubyConditional", s:purple, "", "")
|
||||||
|
call <SID>X("rubyRepeat", s:purple, "", "")
|
||||||
|
|
||||||
|
" Python Highlighting
|
||||||
|
call <SID>X("pythonInclude", s:purple, "", "")
|
||||||
|
call <SID>X("pythonStatement", s:purple, "", "")
|
||||||
|
call <SID>X("pythonConditional", s:purple, "", "")
|
||||||
|
call <SID>X("pythonFunction", s:blue, "", "")
|
||||||
|
|
||||||
|
" JavaScript Highlighting
|
||||||
|
call <SID>X("javaScriptBraces", s:foreground, "", "")
|
||||||
|
call <SID>X("javaScriptFunction", s:purple, "", "")
|
||||||
|
call <SID>X("javaScriptConditional", s:purple, "", "")
|
||||||
|
call <SID>X("javaScriptRepeat", s:purple, "", "")
|
||||||
|
call <SID>X("javaScriptNumber", s:orange, "", "")
|
||||||
|
call <SID>X("javaScriptMember", s:orange, "", "")
|
||||||
|
|
||||||
|
" HTML Highlighting
|
||||||
|
call <SID>X("htmlTag", s:red, "", "")
|
||||||
|
call <SID>X("htmlTagName", s:red, "", "")
|
||||||
|
call <SID>X("htmlArg", s:red, "", "")
|
||||||
|
call <SID>X("htmlScriptTag", s:red, "", "")
|
||||||
|
|
||||||
|
" Diff Highlighting
|
||||||
|
call <SID>X("diffAdded", s:green, "", "")
|
||||||
|
call <SID>X("diffRemoved", s:red, "", "")
|
||||||
|
|
||||||
|
" Delete Functions
|
||||||
|
delf <SID>X
|
||||||
|
delf <SID>rgb
|
||||||
|
delf <SID>colour
|
||||||
|
delf <SID>rgb_colour
|
||||||
|
delf <SID>rgb_level
|
||||||
|
delf <SID>rgb_number
|
||||||
|
delf <SID>grey_colour
|
||||||
|
delf <SID>grey_level
|
||||||
|
delf <SID>grey_number
|
||||||
|
endif
|
||||||
362
dot_vim/colors/Tomorrow-Night.vim
Normal file
362
dot_vim/colors/Tomorrow-Night.vim
Normal file
@@ -0,0 +1,362 @@
|
|||||||
|
" Tomorrow Night - Full Colour and 256 Colour
|
||||||
|
" http://chriskempson.com
|
||||||
|
"
|
||||||
|
" Hex colour conversion functions borrowed from the theme "Desert256""
|
||||||
|
|
||||||
|
" Default GUI Colours
|
||||||
|
let s:foreground = "c5c8c6"
|
||||||
|
let s:background = "1d1f21"
|
||||||
|
let s:selection = "373b41"
|
||||||
|
let s:line = "282a2e"
|
||||||
|
let s:comment = "969896"
|
||||||
|
let s:red = "cc6666"
|
||||||
|
let s:orange = "de935f"
|
||||||
|
let s:yellow = "f0c674"
|
||||||
|
let s:green = "b5bd68"
|
||||||
|
let s:aqua = "8abeb7"
|
||||||
|
let s:blue = "81a2be"
|
||||||
|
let s:purple = "b294bb"
|
||||||
|
let s:window = "4d5057"
|
||||||
|
|
||||||
|
" Console 256 Colours
|
||||||
|
if !has("gui_running")
|
||||||
|
let s:background = "303030"
|
||||||
|
let s:window = "5e5e5e"
|
||||||
|
let s:line = "3a3a3a"
|
||||||
|
let s:selection = "585858"
|
||||||
|
end
|
||||||
|
|
||||||
|
set background=dark
|
||||||
|
hi clear
|
||||||
|
syntax reset
|
||||||
|
|
||||||
|
let g:colors_name = "Tomorrow-Night"
|
||||||
|
|
||||||
|
if has("gui_running") || &t_Co == 88 || &t_Co == 256
|
||||||
|
" Returns an approximate grey index for the given grey level
|
||||||
|
fun <SID>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 <SID>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 <SID>grey_colour(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 colour index for the given colour level
|
||||||
|
fun <SID>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 colour level for the given colour index
|
||||||
|
fun <SID>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 colour indices
|
||||||
|
fun <SID>rgb_colour(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 colour levels
|
||||||
|
fun <SID>colour(r, g, b)
|
||||||
|
" Get the closest grey
|
||||||
|
let l:gx = <SID>grey_number(a:r)
|
||||||
|
let l:gy = <SID>grey_number(a:g)
|
||||||
|
let l:gz = <SID>grey_number(a:b)
|
||||||
|
|
||||||
|
" Get the closest colour
|
||||||
|
let l:x = <SID>rgb_number(a:r)
|
||||||
|
let l:y = <SID>rgb_number(a:g)
|
||||||
|
let l:z = <SID>rgb_number(a:b)
|
||||||
|
|
||||||
|
if l:gx == l:gy && l:gy == l:gz
|
||||||
|
" There are two possibilities
|
||||||
|
let l:dgr = <SID>grey_level(l:gx) - a:r
|
||||||
|
let l:dgg = <SID>grey_level(l:gy) - a:g
|
||||||
|
let l:dgb = <SID>grey_level(l:gz) - a:b
|
||||||
|
let l:dgrey = (l:dgr * l:dgr) + (l:dgg * l:dgg) + (l:dgb * l:dgb)
|
||||||
|
let l:dr = <SID>rgb_level(l:gx) - a:r
|
||||||
|
let l:dg = <SID>rgb_level(l:gy) - a:g
|
||||||
|
let l:db = <SID>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 <SID>grey_colour(l:gx)
|
||||||
|
else
|
||||||
|
" Use the colour
|
||||||
|
return <SID>rgb_colour(l:x, l:y, l:z)
|
||||||
|
endif
|
||||||
|
else
|
||||||
|
" Only one possibility
|
||||||
|
return <SID>rgb_colour(l:x, l:y, l:z)
|
||||||
|
endif
|
||||||
|
endfun
|
||||||
|
|
||||||
|
" Returns the palette index to approximate the 'rrggbb' hex string
|
||||||
|
fun <SID>rgb(rgb)
|
||||||
|
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 <SID>colour(l:r, l:g, l:b)
|
||||||
|
endfun
|
||||||
|
|
||||||
|
" Sets the highlighting for the given group
|
||||||
|
fun <SID>X(group, fg, bg, attr)
|
||||||
|
if a:fg != ""
|
||||||
|
exec "hi " . a:group . " guifg=#" . a:fg . " ctermfg=" . <SID>rgb(a:fg)
|
||||||
|
endif
|
||||||
|
if a:bg != ""
|
||||||
|
exec "hi " . a:group . " guibg=#" . a:bg . " ctermbg=" . <SID>rgb(a:bg)
|
||||||
|
endif
|
||||||
|
if a:attr != ""
|
||||||
|
exec "hi " . a:group . " gui=" . a:attr . " cterm=" . a:attr
|
||||||
|
endif
|
||||||
|
endfun
|
||||||
|
|
||||||
|
" Vim Highlighting
|
||||||
|
call <SID>X("Normal", s:foreground, s:background, "")
|
||||||
|
call <SID>X("LineNr", s:selection, "", "")
|
||||||
|
call <SID>X("NonText", s:selection, "", "")
|
||||||
|
call <SID>X("SpecialKey", s:selection, "", "")
|
||||||
|
call <SID>X("Search", s:background, s:yellow, "")
|
||||||
|
call <SID>X("TabLine", s:foreground, s:background, "reverse")
|
||||||
|
call <SID>X("StatusLine", s:window, s:yellow, "reverse")
|
||||||
|
call <SID>X("StatusLineNC", s:window, s:foreground, "reverse")
|
||||||
|
call <SID>X("VertSplit", s:window, s:window, "none")
|
||||||
|
call <SID>X("Visual", "", s:selection, "")
|
||||||
|
call <SID>X("Directory", s:blue, "", "")
|
||||||
|
call <SID>X("ModeMsg", s:green, "", "")
|
||||||
|
call <SID>X("MoreMsg", s:green, "", "")
|
||||||
|
call <SID>X("Question", s:green, "", "")
|
||||||
|
call <SID>X("WarningMsg", s:red, "", "")
|
||||||
|
call <SID>X("MatchParen", "", s:selection, "")
|
||||||
|
call <SID>X("Folded", s:comment, s:background, "")
|
||||||
|
call <SID>X("FoldColumn", "", s:background, "")
|
||||||
|
if version >= 700
|
||||||
|
call <SID>X("CursorLine", "", s:line, "none")
|
||||||
|
call <SID>X("CursorColumn", "", s:line, "none")
|
||||||
|
call <SID>X("PMenu", s:foreground, s:selection, "none")
|
||||||
|
call <SID>X("PMenuSel", s:foreground, s:selection, "reverse")
|
||||||
|
call <SID>X("SignColumn", "", s:background, "none")
|
||||||
|
end
|
||||||
|
if version >= 703
|
||||||
|
call <SID>X("ColorColumn", "", s:line, "none")
|
||||||
|
end
|
||||||
|
|
||||||
|
" Standard Highlighting
|
||||||
|
call <SID>X("Comment", s:comment, "", "")
|
||||||
|
call <SID>X("Todo", s:comment, s:background, "")
|
||||||
|
call <SID>X("Title", s:comment, "", "")
|
||||||
|
call <SID>X("Identifier", s:red, "", "none")
|
||||||
|
call <SID>X("Statement", s:foreground, "", "")
|
||||||
|
call <SID>X("Conditional", s:foreground, "", "")
|
||||||
|
call <SID>X("Repeat", s:foreground, "", "")
|
||||||
|
call <SID>X("Structure", s:purple, "", "")
|
||||||
|
call <SID>X("Function", s:blue, "", "")
|
||||||
|
call <SID>X("Constant", s:orange, "", "")
|
||||||
|
call <SID>X("String", s:green, "", "")
|
||||||
|
call <SID>X("Special", s:foreground, "", "")
|
||||||
|
call <SID>X("PreProc", s:purple, "", "")
|
||||||
|
call <SID>X("Operator", s:aqua, "", "none")
|
||||||
|
call <SID>X("Type", s:blue, "", "none")
|
||||||
|
call <SID>X("Define", s:purple, "", "none")
|
||||||
|
call <SID>X("Include", s:blue, "", "")
|
||||||
|
"call <SID>X("Ignore", "666666", "", "")
|
||||||
|
|
||||||
|
" Vim Highlighting
|
||||||
|
call <SID>X("vimCommand", s:red, "", "none")
|
||||||
|
|
||||||
|
" C Highlighting
|
||||||
|
call <SID>X("cType", s:yellow, "", "")
|
||||||
|
call <SID>X("cStorageClass", s:purple, "", "")
|
||||||
|
call <SID>X("cConditional", s:purple, "", "")
|
||||||
|
call <SID>X("cRepeat", s:purple, "", "")
|
||||||
|
|
||||||
|
" PHP Highlighting
|
||||||
|
call <SID>X("phpVarSelector", s:red, "", "")
|
||||||
|
call <SID>X("phpKeyword", s:purple, "", "")
|
||||||
|
call <SID>X("phpRepeat", s:purple, "", "")
|
||||||
|
call <SID>X("phpConditional", s:purple, "", "")
|
||||||
|
call <SID>X("phpStatement", s:purple, "", "")
|
||||||
|
call <SID>X("phpMemberSelector", s:foreground, "", "")
|
||||||
|
|
||||||
|
" Ruby Highlighting
|
||||||
|
call <SID>X("rubySymbol", s:green, "", "")
|
||||||
|
call <SID>X("rubyConstant", s:yellow, "", "")
|
||||||
|
call <SID>X("rubyAttribute", s:blue, "", "")
|
||||||
|
call <SID>X("rubyInclude", s:blue, "", "")
|
||||||
|
call <SID>X("rubyLocalVariableOrMethod", s:orange, "", "")
|
||||||
|
call <SID>X("rubyCurlyBlock", s:orange, "", "")
|
||||||
|
call <SID>X("rubyStringDelimiter", s:green, "", "")
|
||||||
|
call <SID>X("rubyInterpolationDelimiter", s:orange, "", "")
|
||||||
|
call <SID>X("rubyConditional", s:purple, "", "")
|
||||||
|
call <SID>X("rubyRepeat", s:purple, "", "")
|
||||||
|
|
||||||
|
" Python Highlighting
|
||||||
|
call <SID>X("pythonInclude", s:purple, "", "")
|
||||||
|
call <SID>X("pythonStatement", s:purple, "", "")
|
||||||
|
call <SID>X("pythonConditional", s:purple, "", "")
|
||||||
|
call <SID>X("pythonFunction", s:blue, "", "")
|
||||||
|
|
||||||
|
" JavaScript Highlighting
|
||||||
|
call <SID>X("javaScriptBraces", s:foreground, "", "")
|
||||||
|
call <SID>X("javaScriptFunction", s:purple, "", "")
|
||||||
|
call <SID>X("javaScriptConditional", s:purple, "", "")
|
||||||
|
call <SID>X("javaScriptRepeat", s:purple, "", "")
|
||||||
|
call <SID>X("javaScriptNumber", s:orange, "", "")
|
||||||
|
call <SID>X("javaScriptMember", s:orange, "", "")
|
||||||
|
|
||||||
|
" HTML Highlighting
|
||||||
|
call <SID>X("htmlTag", s:red, "", "")
|
||||||
|
call <SID>X("htmlTagName", s:red, "", "")
|
||||||
|
call <SID>X("htmlArg", s:red, "", "")
|
||||||
|
call <SID>X("htmlScriptTag", s:red, "", "")
|
||||||
|
|
||||||
|
" Diff Highlighting
|
||||||
|
call <SID>X("diffAdded", s:green, "", "")
|
||||||
|
call <SID>X("diffRemoved", s:red, "", "")
|
||||||
|
|
||||||
|
" ShowMarks Highlighting
|
||||||
|
call <SID>X("ShowMarksHLl", s:orange, s:background, "none")
|
||||||
|
call <SID>X("ShowMarksHLo", s:purple, s:background, "none")
|
||||||
|
call <SID>X("ShowMarksHLu", s:yellow, s:background, "none")
|
||||||
|
call <SID>X("ShowMarksHLm", s:aqua, s:background, "none")
|
||||||
|
|
||||||
|
" Delete Functions
|
||||||
|
delf <SID>X
|
||||||
|
delf <SID>rgb
|
||||||
|
delf <SID>colour
|
||||||
|
delf <SID>rgb_colour
|
||||||
|
delf <SID>rgb_level
|
||||||
|
delf <SID>rgb_number
|
||||||
|
delf <SID>grey_colour
|
||||||
|
delf <SID>grey_level
|
||||||
|
delf <SID>grey_number
|
||||||
|
endif
|
||||||
347
dot_vim/colors/Tomorrow.vim
Normal file
347
dot_vim/colors/Tomorrow.vim
Normal file
@@ -0,0 +1,347 @@
|
|||||||
|
" Tomorrow - Full Colour and 256 Colour
|
||||||
|
" http://chriskempson.com
|
||||||
|
"
|
||||||
|
" Hex colour conversion functions borrowed from the theme "Desert256""
|
||||||
|
|
||||||
|
" Default GUI Colours
|
||||||
|
let s:foreground = "4d4d4c"
|
||||||
|
let s:background = "fafafa"
|
||||||
|
let s:selection = "d6d6d6"
|
||||||
|
let s:line = "efefef"
|
||||||
|
let s:comment = "8e908c"
|
||||||
|
let s:red = "c82829"
|
||||||
|
let s:orange = "f5871f"
|
||||||
|
let s:yellow = "eab700"
|
||||||
|
let s:green = "718c00"
|
||||||
|
let s:aqua = "3e999f"
|
||||||
|
let s:blue = "4271ae"
|
||||||
|
let s:purple = "8959a8"
|
||||||
|
let s:window = "efefef"
|
||||||
|
|
||||||
|
set background=light
|
||||||
|
hi clear
|
||||||
|
syntax reset
|
||||||
|
|
||||||
|
let g:colors_name = "Tomorrow"
|
||||||
|
|
||||||
|
if has("gui_running") || &t_Co == 88 || &t_Co == 256
|
||||||
|
" Returns an approximate grey index for the given grey level
|
||||||
|
fun <SID>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 <SID>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 <SID>grey_colour(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 colour index for the given colour level
|
||||||
|
fun <SID>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 colour level for the given colour index
|
||||||
|
fun <SID>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 colour indices
|
||||||
|
fun <SID>rgb_colour(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 colour levels
|
||||||
|
fun <SID>colour(r, g, b)
|
||||||
|
" Get the closest grey
|
||||||
|
let l:gx = <SID>grey_number(a:r)
|
||||||
|
let l:gy = <SID>grey_number(a:g)
|
||||||
|
let l:gz = <SID>grey_number(a:b)
|
||||||
|
|
||||||
|
" Get the closest colour
|
||||||
|
let l:x = <SID>rgb_number(a:r)
|
||||||
|
let l:y = <SID>rgb_number(a:g)
|
||||||
|
let l:z = <SID>rgb_number(a:b)
|
||||||
|
|
||||||
|
if l:gx == l:gy && l:gy == l:gz
|
||||||
|
" There are two possibilities
|
||||||
|
let l:dgr = <SID>grey_level(l:gx) - a:r
|
||||||
|
let l:dgg = <SID>grey_level(l:gy) - a:g
|
||||||
|
let l:dgb = <SID>grey_level(l:gz) - a:b
|
||||||
|
let l:dgrey = (l:dgr * l:dgr) + (l:dgg * l:dgg) + (l:dgb * l:dgb)
|
||||||
|
let l:dr = <SID>rgb_level(l:gx) - a:r
|
||||||
|
let l:dg = <SID>rgb_level(l:gy) - a:g
|
||||||
|
let l:db = <SID>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 <SID>grey_colour(l:gx)
|
||||||
|
else
|
||||||
|
" Use the colour
|
||||||
|
return <SID>rgb_colour(l:x, l:y, l:z)
|
||||||
|
endif
|
||||||
|
else
|
||||||
|
" Only one possibility
|
||||||
|
return <SID>rgb_colour(l:x, l:y, l:z)
|
||||||
|
endif
|
||||||
|
endfun
|
||||||
|
|
||||||
|
" Returns the palette index to approximate the 'rrggbb' hex string
|
||||||
|
fun <SID>rgb(rgb)
|
||||||
|
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 <SID>colour(l:r, l:g, l:b)
|
||||||
|
endfun
|
||||||
|
|
||||||
|
" Sets the highlighting for the given group
|
||||||
|
fun <SID>X(group, fg, bg, attr)
|
||||||
|
if a:fg != ""
|
||||||
|
exec "hi " . a:group . " guifg=#" . a:fg . " ctermfg=" . <SID>rgb(a:fg)
|
||||||
|
endif
|
||||||
|
if a:bg != ""
|
||||||
|
exec "hi " . a:group . " guibg=#" . a:bg . " ctermbg=" . <SID>rgb(a:bg)
|
||||||
|
endif
|
||||||
|
if a:attr != ""
|
||||||
|
exec "hi " . a:group . " gui=" . a:attr . " cterm=" . a:attr
|
||||||
|
endif
|
||||||
|
endfun
|
||||||
|
|
||||||
|
" Vim Highlighting
|
||||||
|
call <SID>X("Normal", s:foreground, s:background, "")
|
||||||
|
highlight LineNr term=bold cterm=NONE ctermfg=DarkGrey ctermbg=NONE gui=NONE guifg=DarkGrey guibg=NONE
|
||||||
|
call <SID>X("NonText", s:selection, "", "")
|
||||||
|
call <SID>X("SpecialKey", s:selection, "", "")
|
||||||
|
call <SID>X("Search", s:foreground, s:yellow, "")
|
||||||
|
call <SID>X("TabLine", s:foreground, s:background, "reverse")
|
||||||
|
call <SID>X("StatusLine", s:window, s:yellow, "reverse")
|
||||||
|
call <SID>X("StatusLineNC", s:window, s:foreground, "reverse")
|
||||||
|
call <SID>X("VertSplit", s:window, s:window, "none")
|
||||||
|
call <SID>X("Visual", "", s:selection, "")
|
||||||
|
call <SID>X("Directory", s:blue, "", "")
|
||||||
|
call <SID>X("ModeMsg", s:green, "", "")
|
||||||
|
call <SID>X("MoreMsg", s:green, "", "")
|
||||||
|
call <SID>X("Question", s:green, "", "")
|
||||||
|
call <SID>X("WarningMsg", s:red, "", "")
|
||||||
|
call <SID>X("MatchParen", "", s:selection, "")
|
||||||
|
call <SID>X("Folded", s:comment, s:background, "")
|
||||||
|
call <SID>X("FoldColumn", "", s:background, "")
|
||||||
|
if version >= 700
|
||||||
|
call <SID>X("CursorLine", "", s:line, "none")
|
||||||
|
call <SID>X("CursorColumn", "", s:line, "none")
|
||||||
|
call <SID>X("PMenu", s:foreground, s:selection, "none")
|
||||||
|
call <SID>X("PMenuSel", s:foreground, s:selection, "reverse")
|
||||||
|
end
|
||||||
|
if version >= 703
|
||||||
|
call <SID>X("ColorColumn", "", s:line, "none")
|
||||||
|
end
|
||||||
|
|
||||||
|
" Standard Highlighting
|
||||||
|
call <SID>X("Comment", s:comment, "", "")
|
||||||
|
call <SID>X("Todo", s:comment, s:background, "")
|
||||||
|
call <SID>X("Title", s:comment, "", "")
|
||||||
|
call <SID>X("Identifier", s:red, "", "none")
|
||||||
|
call <SID>X("Statement", s:foreground, "", "")
|
||||||
|
call <SID>X("Conditional", s:foreground, "", "")
|
||||||
|
call <SID>X("Repeat", s:foreground, "", "")
|
||||||
|
call <SID>X("Structure", s:purple, "", "")
|
||||||
|
call <SID>X("Function", s:blue, "", "")
|
||||||
|
call <SID>X("Constant", s:orange, "", "")
|
||||||
|
call <SID>X("String", s:green, "", "")
|
||||||
|
call <SID>X("Special", s:foreground, "", "")
|
||||||
|
call <SID>X("PreProc", s:purple, "", "")
|
||||||
|
call <SID>X("Operator", s:aqua, "", "none")
|
||||||
|
call <SID>X("Type", s:blue, "", "none")
|
||||||
|
call <SID>X("Define", s:purple, "", "none")
|
||||||
|
call <SID>X("Include", s:blue, "", "")
|
||||||
|
"call <SID>X("Ignore", "666666", "", "")
|
||||||
|
|
||||||
|
" Vim Highlighting
|
||||||
|
call <SID>X("vimCommand", s:red, "", "none")
|
||||||
|
|
||||||
|
" C Highlighting
|
||||||
|
call <SID>X("cType", s:yellow, "", "")
|
||||||
|
call <SID>X("cStorageClass", s:purple, "", "")
|
||||||
|
call <SID>X("cConditional", s:purple, "", "")
|
||||||
|
call <SID>X("cRepeat", s:purple, "", "")
|
||||||
|
|
||||||
|
" PHP Highlighting
|
||||||
|
call <SID>X("phpVarSelector", s:red, "", "")
|
||||||
|
call <SID>X("phpKeyword", s:purple, "", "")
|
||||||
|
call <SID>X("phpRepeat", s:purple, "", "")
|
||||||
|
call <SID>X("phpConditional", s:purple, "", "")
|
||||||
|
call <SID>X("phpStatement", s:purple, "", "")
|
||||||
|
call <SID>X("phpMemberSelector", s:foreground, "", "")
|
||||||
|
|
||||||
|
" Ruby Highlighting
|
||||||
|
call <SID>X("rubySymbol", s:green, "", "")
|
||||||
|
call <SID>X("rubyConstant", s:yellow, "", "")
|
||||||
|
call <SID>X("rubyAttribute", s:blue, "", "")
|
||||||
|
call <SID>X("rubyInclude", s:blue, "", "")
|
||||||
|
call <SID>X("rubyLocalVariableOrMethod", s:orange, "", "")
|
||||||
|
call <SID>X("rubyCurlyBlock", s:orange, "", "")
|
||||||
|
call <SID>X("rubyStringDelimiter", s:green, "", "")
|
||||||
|
call <SID>X("rubyInterpolationDelimiter", s:orange, "", "")
|
||||||
|
call <SID>X("rubyConditional", s:purple, "", "")
|
||||||
|
call <SID>X("rubyRepeat", s:purple, "", "")
|
||||||
|
|
||||||
|
" Python Highlighting
|
||||||
|
call <SID>X("pythonInclude", s:purple, "", "")
|
||||||
|
call <SID>X("pythonStatement", s:purple, "", "")
|
||||||
|
call <SID>X("pythonConditional", s:purple, "", "")
|
||||||
|
call <SID>X("pythonFunction", s:blue, "", "")
|
||||||
|
|
||||||
|
" JavaScript Highlighting
|
||||||
|
call <SID>X("javaScriptBraces", s:foreground, "", "")
|
||||||
|
call <SID>X("javaScriptFunction", s:purple, "", "")
|
||||||
|
call <SID>X("javaScriptConditional", s:purple, "", "")
|
||||||
|
call <SID>X("javaScriptRepeat", s:purple, "", "")
|
||||||
|
call <SID>X("javaScriptNumber", s:orange, "", "")
|
||||||
|
call <SID>X("javaScriptMember", s:orange, "", "")
|
||||||
|
|
||||||
|
" HTML Highlighting
|
||||||
|
call <SID>X("htmlTag", s:red, "", "")
|
||||||
|
call <SID>X("htmlTagName", s:red, "", "")
|
||||||
|
call <SID>X("htmlArg", s:red, "", "")
|
||||||
|
call <SID>X("htmlScriptTag", s:red, "", "")
|
||||||
|
|
||||||
|
" Diff Highlighting
|
||||||
|
call <SID>X("diffAdded", s:green, "", "")
|
||||||
|
call <SID>X("diffRemoved", s:red, "", "")
|
||||||
|
|
||||||
|
" Delete Functions
|
||||||
|
delf <SID>X
|
||||||
|
delf <SID>rgb
|
||||||
|
delf <SID>colour
|
||||||
|
delf <SID>rgb_colour
|
||||||
|
delf <SID>rgb_level
|
||||||
|
delf <SID>rgb_number
|
||||||
|
delf <SID>grey_colour
|
||||||
|
delf <SID>grey_level
|
||||||
|
delf <SID>grey_number
|
||||||
|
endif
|
||||||
109
dot_vim/doc/live-latex-preview.txt
Normal file
109
dot_vim/doc/live-latex-preview.txt
Normal file
@@ -0,0 +1,109 @@
|
|||||||
|
*live-latex-preview.txt* For Vim version 7.4. Last change: 2014 Feb 01
|
||||||
|
|
||||||
|
*live-latex-preview*
|
||||||
|
|
||||||
|
A plugin for creating a live-updating PDF preview for a LaTeX file in MuPDF
|
||||||
|
|
||||||
|
Default key bindings:~
|
||||||
|
|
||||||
|
\o = Begin/end auto-compilation and live-updating (Note:
|
||||||
|
starting live compilation will also open PDF preview.)
|
||||||
|
\p = Open/close PDF preview window. (Note: closing the
|
||||||
|
PDF preview will also stop auto-compilation.)
|
||||||
|
\s = Check the result of the last compilation;
|
||||||
|
jump to first error in case of errors.
|
||||||
|
\f = Forward search to page in PDF matching cursor
|
||||||
|
position in source.
|
||||||
|
\r = Reverse/inverse search to position in source
|
||||||
|
matching active page in MuPDF. (Very approximate.)
|
||||||
|
\c = End any compilations in progress, and begin new compilation
|
||||||
|
now. (Useful for un-"stick"ing stalled compilations.)
|
||||||
|
Note: if auto-compilation is turned off, this will still
|
||||||
|
compile and show the results inside vim.
|
||||||
|
|
||||||
|
\<PageUp>, \<PageDown>, \<Up>, \<Down>, \<Right>, \<Left>, \G
|
||||||
|
\m, \t, \-, \+, \= = Send the corresponding keystrokes
|
||||||
|
to the MuPDF preview without losing focus on vim Window
|
||||||
|
|
||||||
|
The '\' can be changed by changing <LocalLeader>.
|
||||||
|
|
||||||
|
To suppress the default key mappings, insert:
|
||||||
|
|
||||||
|
let no_tex_maps = 1
|
||||||
|
|
||||||
|
into your .vimrc file. You may then define your own mappings which
|
||||||
|
execute the command :call FunctionName(). The important function
|
||||||
|
names defined by the plugin are:
|
||||||
|
*LaunchMuPDF()* which opens the PDF preview;
|
||||||
|
*CloseMuPDF()* which closes the PDF preview;
|
||||||
|
*PDFViewingToggle()* which toggles the PDF preview on/off;
|
||||||
|
*UpdatingToggle()* which toggles live-updating on/off;
|
||||||
|
*CheckLiveUpdateStatus()* which returns the results of the last
|
||||||
|
compilation, and jumps to the first error, if any; and
|
||||||
|
*MuPDFForward()* and *MuPDFReverse()* for forward and reverse search.
|
||||||
|
|
||||||
|
Autosaving~
|
||||||
|
|
||||||
|
Be aware that when live updating is active, your file is saved whenever
|
||||||
|
the cursor moves. Be sure to take the appropriate measures to keep
|
||||||
|
back-up saves and undo files so you can undo changes if need be. If
|
||||||
|
you would like the file to save with each keystroke even when the
|
||||||
|
preview is not active, then put
|
||||||
|
|
||||||
|
let tex_preview_always_autosave = 1
|
||||||
|
|
||||||
|
into your .vimrc file.
|
||||||
|
|
||||||
|
*LaTeX-compilation* options
|
||||||
|
|
||||||
|
Using XeLaTeX~
|
||||||
|
|
||||||
|
To compile with XeLaTeX rather than PDFLaTeX, include the string
|
||||||
|
'xelatex' somewhere in the first five lines of your file (e.g., in a
|
||||||
|
comment).
|
||||||
|
|
||||||
|
Using LaTeX > dvips > ps2pdf (for, e.g., PSTricks support)~
|
||||||
|
|
||||||
|
If pstricks or related pst-* package is loaded in your preamble, this option
|
||||||
|
will be automatically used. Otherwise, pdflatex or xelatex will be used.
|
||||||
|
(Thanks to Hong Ying for implementing this.)
|
||||||
|
|
||||||
|
(Support for LuaLaTeX may be added in the future.)
|
||||||
|
|
||||||
|
Using biber instead of bibTeX~
|
||||||
|
|
||||||
|
To process bibliographic citations with biber instead of bibTeX, include
|
||||||
|
the string 'biber' somewhere in the first five lines of your file (e.g.,
|
||||||
|
in a comment).
|
||||||
|
|
||||||
|
Using -shell-escape~
|
||||||
|
|
||||||
|
To enable the -shell-escape command-line option, to allow
|
||||||
|
LaTeX's \write18{..} command (for, e.g., the minted package), include
|
||||||
|
the string 'shell-escape' somewhere in the first five lines of your file
|
||||||
|
(e.g., in a comment).
|
||||||
|
|
||||||
|
LaTeX *subdocuments*
|
||||||
|
LaTeX *root*
|
||||||
|
|
||||||
|
Working with subdocuments~
|
||||||
|
|
||||||
|
If you want to use the live preview feature while editing a
|
||||||
|
sub-document, i.e., a document included in another document by means
|
||||||
|
of LaTeX's \input{..} or \include{..} commands, then put a comment
|
||||||
|
in the first five lines of the subdocument containing the string
|
||||||
|
'root = main.tex' (replacing 'main.tex' with the actual name
|
||||||
|
of the master file). This is meant to be compatible with the convention
|
||||||
|
adopted by other editors such as TeXworks and TeXshop, which use
|
||||||
|
the convention:
|
||||||
|
|
||||||
|
% !TeX root = main.tex
|
||||||
|
|
||||||
|
to indicate that the master document for a given file is named "main.tex".
|
||||||
|
|
||||||
|
All files should be in the same folder.
|
||||||
|
|
||||||
|
|
||||||
|
Contact Kevin C. Klement <klement@philos.umass.edu> with bug reports.
|
||||||
|
|
||||||
|
vim:tw=78:ts=8:ft=help:norl:
|
||||||
77
dot_vim/doc/tags
Normal file
77
dot_vim/doc/tags
Normal file
@@ -0,0 +1,77 @@
|
|||||||
|
CheckLiveUpdateStatus() live-latex-preview.txt /*CheckLiveUpdateStatus()*
|
||||||
|
CloseMuPDF() live-latex-preview.txt /*CloseMuPDF()*
|
||||||
|
LaTeX-compilation live-latex-preview.txt /*LaTeX-compilation*
|
||||||
|
LaunchMuPDF() live-latex-preview.txt /*LaunchMuPDF()*
|
||||||
|
MuPDFForward() live-latex-preview.txt /*MuPDFForward()*
|
||||||
|
MuPDFReverse() live-latex-preview.txt /*MuPDFReverse()*
|
||||||
|
PDFViewingToggle() live-latex-preview.txt /*PDFViewingToggle()*
|
||||||
|
UpdatingToggle() live-latex-preview.txt /*UpdatingToggle()*
|
||||||
|
clang_close-preview clang_complete.txt /*clang_close-preview*
|
||||||
|
clang_complete clang_complete.txt /*clang_complete*
|
||||||
|
clang_complete-author clang_complete.txt /*clang_complete-author*
|
||||||
|
clang_complete-auto_select clang_complete.txt /*clang_complete-auto_select*
|
||||||
|
clang_complete-auto_user_options clang_complete.txt /*clang_complete-auto_user_options*
|
||||||
|
clang_complete-cc_args clang_complete.txt /*clang_complete-cc_args*
|
||||||
|
clang_complete-clang_restore_cr_imap clang_complete.txt /*clang_complete-clang_restore_cr_imap*
|
||||||
|
clang_complete-clang_trailing_placeholder clang_complete.txt /*clang_complete-clang_trailing_placeholder*
|
||||||
|
clang_complete-compilation_database clang_complete.txt /*clang_complete-compilation_database*
|
||||||
|
clang_complete-compl_kinds clang_complete.txt /*clang_complete-compl_kinds*
|
||||||
|
clang_complete-complete_auto clang_complete.txt /*clang_complete-complete_auto*
|
||||||
|
clang_complete-complete_macros clang_complete.txt /*clang_complete-complete_macros*
|
||||||
|
clang_complete-complete_patterns clang_complete.txt /*clang_complete-complete_patterns*
|
||||||
|
clang_complete-conceal_snippets clang_complete.txt /*clang_complete-conceal_snippets*
|
||||||
|
clang_complete-configuration clang_complete.txt /*clang_complete-configuration*
|
||||||
|
clang_complete-copen clang_complete.txt /*clang_complete-copen*
|
||||||
|
clang_complete-description clang_complete.txt /*clang_complete-description*
|
||||||
|
clang_complete-faq clang_complete.txt /*clang_complete-faq*
|
||||||
|
clang_complete-hl_errors clang_complete.txt /*clang_complete-hl_errors*
|
||||||
|
clang_complete-issues clang_complete.txt /*clang_complete-issues*
|
||||||
|
clang_complete-jumpto_back_key clang_complete.txt /*clang_complete-jumpto_back_key*
|
||||||
|
clang_complete-jumpto_declaration_in_preview_key clang_complete.txt /*clang_complete-jumpto_declaration_in_preview_key*
|
||||||
|
clang_complete-jumpto_declaration_key clang_complete.txt /*clang_complete-jumpto_declaration_key*
|
||||||
|
clang_complete-keybindings clang_complete.txt /*clang_complete-keybindings*
|
||||||
|
clang_complete-library_path clang_complete.txt /*clang_complete-library_path*
|
||||||
|
clang_complete-license clang_complete.txt /*clang_complete-license*
|
||||||
|
clang_complete-loaded clang_complete.txt /*clang_complete-loaded*
|
||||||
|
clang_complete-make_default_keymappings clang_complete.txt /*clang_complete-make_default_keymappings*
|
||||||
|
clang_complete-omnicppcomplete_compliance clang_complete.txt /*clang_complete-omnicppcomplete_compliance*
|
||||||
|
clang_complete-optional_args_in_snippets clang_complete.txt /*clang_complete-optional_args_in_snippets*
|
||||||
|
clang_complete-options clang_complete.txt /*clang_complete-options*
|
||||||
|
clang_complete-periodic_quickfix clang_complete.txt /*clang_complete-periodic_quickfix*
|
||||||
|
clang_complete-snippets clang_complete.txt /*clang_complete-snippets*
|
||||||
|
clang_complete-snippets_engine clang_complete.txt /*clang_complete-snippets_engine*
|
||||||
|
clang_complete-sort_algo clang_complete.txt /*clang_complete-sort_algo*
|
||||||
|
clang_complete-todo clang_complete.txt /*clang_complete-todo*
|
||||||
|
clang_complete-use_library clang_complete.txt /*clang_complete-use_library*
|
||||||
|
clang_complete-user_options clang_complete.txt /*clang_complete-user_options*
|
||||||
|
clang_complete.txt clang_complete.txt /*clang_complete.txt*
|
||||||
|
g:clang_auto_select clang_complete.txt /*g:clang_auto_select*
|
||||||
|
g:clang_auto_user_options clang_complete.txt /*g:clang_auto_user_options*
|
||||||
|
g:clang_close_preview clang_complete.txt /*g:clang_close_preview*
|
||||||
|
g:clang_compilation_database clang_complete.txt /*g:clang_compilation_database*
|
||||||
|
g:clang_complete_auto clang_complete.txt /*g:clang_complete_auto*
|
||||||
|
g:clang_complete_copen clang_complete.txt /*g:clang_complete_copen*
|
||||||
|
g:clang_complete_loaded clang_complete.txt /*g:clang_complete_loaded*
|
||||||
|
g:clang_complete_macros clang_complete.txt /*g:clang_complete_macros*
|
||||||
|
g:clang_complete_optional_args_in_snippets clang_complete.txt /*g:clang_complete_optional_args_in_snippets*
|
||||||
|
g:clang_complete_patterns clang_complete.txt /*g:clang_complete_patterns*
|
||||||
|
g:clang_conceal_snippets clang_complete.txt /*g:clang_conceal_snippets*
|
||||||
|
g:clang_hl_errors clang_complete.txt /*g:clang_hl_errors*
|
||||||
|
g:clang_jumpto_back_key clang_complete.txt /*g:clang_jumpto_back_key*
|
||||||
|
g:clang_jumpto_declaration_in_preview_key clang_complete.txt /*g:clang_jumpto_declaration_in_preview_key*
|
||||||
|
g:clang_jumpto_declaration_key clang_complete.txt /*g:clang_jumpto_declaration_key*
|
||||||
|
g:clang_library_path clang_complete.txt /*g:clang_library_path*
|
||||||
|
g:clang_make_default_keymappings clang_complete.txt /*g:clang_make_default_keymappings*
|
||||||
|
g:clang_omnicppcomplete_compliance clang_complete.txt /*g:clang_omnicppcomplete_compliance*
|
||||||
|
g:clang_periodic_quickfix clang_complete.txt /*g:clang_periodic_quickfix*
|
||||||
|
g:clang_restore_cr_imap clang_complete.txt /*g:clang_restore_cr_imap*
|
||||||
|
g:clang_snippets clang_complete.txt /*g:clang_snippets*
|
||||||
|
g:clang_snippets_engine clang_complete.txt /*g:clang_snippets_engine*
|
||||||
|
g:clang_sort_algo clang_complete.txt /*g:clang_sort_algo*
|
||||||
|
g:clang_trailing_placeholder clang_complete.txt /*g:clang_trailing_placeholder*
|
||||||
|
g:clang_use_library clang_complete.txt /*g:clang_use_library*
|
||||||
|
g:clang_user_options clang_complete.txt /*g:clang_user_options*
|
||||||
|
live-latex-preview live-latex-preview.txt /*live-latex-preview*
|
||||||
|
live-latex-preview.txt live-latex-preview.txt /*live-latex-preview.txt*
|
||||||
|
root live-latex-preview.txt /*root*
|
||||||
|
subdocuments live-latex-preview.txt /*subdocuments*
|
||||||
1
dot_vim/dot_gitignore
Normal file
1
dot_vim/dot_gitignore
Normal file
@@ -0,0 +1 @@
|
|||||||
|
.netrwhist
|
||||||
27
dot_vim/dot_gitmodules
Normal file
27
dot_vim/dot_gitmodules
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
[submodule "bundle/vim-colors-solarized"]
|
||||||
|
path = bundle/vim-colors-solarized
|
||||||
|
url = git://github.com/altercation/vim-colors-solarized.git
|
||||||
|
[submodule "bundle/ctrlp.vim"]
|
||||||
|
path = bundle/ctrlp.vim
|
||||||
|
url = https://github.com/kien/ctrlp.vim.git
|
||||||
|
[submodule "bundle/ctx"]
|
||||||
|
path = bundle/ctx
|
||||||
|
url = https://github.com/vim-scripts/ctx.git
|
||||||
|
[submodule "bundle/vim-surround"]
|
||||||
|
path = bundle/vim-surround
|
||||||
|
url = https://github.com/tpope/vim-surround.git
|
||||||
|
[submodule "bundle/vim-project"]
|
||||||
|
path = bundle/vim-project
|
||||||
|
url = https://github.com/shemerey/vim-project.git
|
||||||
|
[submodule "bundle/2048"]
|
||||||
|
path = bundle/2048
|
||||||
|
url = https://github.com/AshyIsMe/2048
|
||||||
|
[submodule "bundle/vim-coffee-script"]
|
||||||
|
path = bundle/vim-coffee-script
|
||||||
|
url = https://github.com/kchmck/vim-coffee-script.git
|
||||||
|
[submodule "bundle/nerdtree"]
|
||||||
|
path = bundle/nerdtree
|
||||||
|
url = https://github.com/scrooloose/nerdtree.git
|
||||||
|
[submodule "bundle/semantic-highlight.vim"]
|
||||||
|
path = bundle/semantic-highlight.vim
|
||||||
|
url = https://github.com/jaxbot/semantic-highlight.vim.git
|
||||||
3
dot_vim/dot_netrwhist
Normal file
3
dot_vim/dot_netrwhist
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
let g:netrw_dirhistmax =10
|
||||||
|
let g:netrw_dirhistcnt =1
|
||||||
|
let g:netrw_dirhist_1='/home/linly/Code/RMI_THINGS/RMIServer/lib/src/main/java/rmiserver'
|
||||||
53
dot_vim/ftplugin/lisp/limp.vim
Normal file
53
dot_vim/ftplugin/lisp/limp.vim
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
"
|
||||||
|
" limp/vim/limp.vim
|
||||||
|
"
|
||||||
|
" URL:
|
||||||
|
" http://mikael.jansson.be/hacking
|
||||||
|
"
|
||||||
|
" Description:
|
||||||
|
" Setup the Limp environment
|
||||||
|
"
|
||||||
|
" Version:
|
||||||
|
" 0.2
|
||||||
|
"
|
||||||
|
" Date:
|
||||||
|
" 2008-04-28
|
||||||
|
"
|
||||||
|
" Authors:
|
||||||
|
" Mikael Jansson <mail@mikael.jansson.be>
|
||||||
|
"
|
||||||
|
" Changelog:
|
||||||
|
" * 2008-04-28 by Mikael Jansson <mail@mikael.jansson.be>
|
||||||
|
" Only change colorscheme and nocompatible when not previously set.
|
||||||
|
"
|
||||||
|
" * 2008-04-25 by Mikael Jansson <mail@mikael.jansson.be>
|
||||||
|
" Catch-all key <F12> for Lisp boot, connect & display
|
||||||
|
"
|
||||||
|
" * 2008-04-20 by Mikael Jansson <mail@mikael.jansson.be>
|
||||||
|
" Initial version.
|
||||||
|
|
||||||
|
"-------------------------------------------------------------------
|
||||||
|
|
||||||
|
if exists("b:did_ftplugin")
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
let b:did_ftplugin = 1
|
||||||
|
|
||||||
|
"-------------------------------------------------------------------
|
||||||
|
" external dependencies
|
||||||
|
"-------------------------------------------------------------------
|
||||||
|
silent! runtime plugin/matchit.vim
|
||||||
|
|
||||||
|
"-------------------------------------------------------------------
|
||||||
|
" the Limp library
|
||||||
|
"-------------------------------------------------------------------
|
||||||
|
|
||||||
|
runtime ftplugin/lisp/limp/cursor.vim
|
||||||
|
runtime ftplugin/lisp/limp/highlight.vim
|
||||||
|
runtime ftplugin/lisp/limp/sexp.vim
|
||||||
|
runtime ftplugin/lisp/limp/bridge.vim
|
||||||
|
runtime ftplugin/lisp/limp/autoclose.vim
|
||||||
|
runtime ftplugin/lisp/limp/keys.vim
|
||||||
|
runtime ftplugin/lisp/limp/mode.vim
|
||||||
|
|
||||||
|
|
||||||
208
dot_vim/ftplugin/lisp/limp/autoclose.vim
Normal file
208
dot_vim/ftplugin/lisp/limp/autoclose.vim
Normal file
@@ -0,0 +1,208 @@
|
|||||||
|
"
|
||||||
|
" limp/vim/autoclose.vim
|
||||||
|
"
|
||||||
|
" URL:
|
||||||
|
" http://mikael.jansson.be/hacking
|
||||||
|
"
|
||||||
|
" Description:
|
||||||
|
" AutoClose, closes what's opened.
|
||||||
|
"
|
||||||
|
" This plugin closes opened parenthesis, braces, brackets, quotes as you
|
||||||
|
" type them. As of 1.1, if you type the open brace twice ({{), the closing
|
||||||
|
" brace will be pushed down to a new line.
|
||||||
|
"
|
||||||
|
" You can enable or disable this plugin by typing \a (or <Leader>a if
|
||||||
|
" you've redefined your leader character) in normal mode. You'll also
|
||||||
|
" probably want to know you can type <C-V> (<C-Q> if mswin is set) and the next
|
||||||
|
" character you type doesn't have mappings applied. This is useful when you
|
||||||
|
" want to insert only an opening paren or something.
|
||||||
|
"
|
||||||
|
" Version:
|
||||||
|
" 0.2
|
||||||
|
"
|
||||||
|
" Date:
|
||||||
|
" September 20, 2007
|
||||||
|
"
|
||||||
|
" Authors:
|
||||||
|
" Karl Guertin <grayrest@gr.ayre.st>
|
||||||
|
" Mikael Jansson <mail@mikael.jansson.be>
|
||||||
|
"
|
||||||
|
" Changelog:
|
||||||
|
" 2008-04-20 by Mikael Jansson <mail@mikael.jansson.be>
|
||||||
|
" * Factored out start/stop functions.
|
||||||
|
" * Removed the default mappings to toggle autoclose
|
||||||
|
"
|
||||||
|
" 2007-09-20 by Karl Guertin <grayrest@gr.ayre.st>
|
||||||
|
" 1.1.2 -- Fixed a mapping typo and caught a double brace problem
|
||||||
|
" 1.1.1 -- Missed a bug in 1.1, September 19, 2007
|
||||||
|
" 1.1 -- When not inserting at the end, previous version would eat chars
|
||||||
|
" at end of line, added double open->newline, September 19, 2007
|
||||||
|
" 1.0.1 -- Cruft from other parts of the mapping, knew I shouldn't have
|
||||||
|
" released the first as 1.0, April 3, 2007
|
||||||
|
|
||||||
|
" Setup -----------------------------------------------------{{{1
|
||||||
|
|
||||||
|
let s:omni_active = 0
|
||||||
|
let s:cotstate = &completeopt
|
||||||
|
|
||||||
|
if !exists('g:autoclose_on')
|
||||||
|
let g:autoclose_on = 0
|
||||||
|
endif
|
||||||
|
|
||||||
|
" assume everything has been defined already if one of the functions are
|
||||||
|
" defined.
|
||||||
|
if exists("*AutoClose_start")
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
|
||||||
|
if !exists("*AutoClose_stop")
|
||||||
|
fun! AutoClose_stop()
|
||||||
|
if g:autoclose_on
|
||||||
|
iunmap "
|
||||||
|
iunmap (
|
||||||
|
iunmap )
|
||||||
|
iunmap [
|
||||||
|
iunmap ]
|
||||||
|
iunmap {
|
||||||
|
iunmap }
|
||||||
|
iunmap <BS>
|
||||||
|
iunmap <C-h>
|
||||||
|
iunmap <Esc>
|
||||||
|
""iunmap <C-[>
|
||||||
|
let g:autoclose_on = 0
|
||||||
|
endif
|
||||||
|
endfun
|
||||||
|
endif
|
||||||
|
|
||||||
|
if !exists("*AutoClose_start")
|
||||||
|
fun! AutoClose_start()
|
||||||
|
if !g:autoclose_on
|
||||||
|
inoremap <silent> " <C-R>=<SID>QuoteDelim('"')<CR>
|
||||||
|
inoremap <silent> ( (<C-R>=<SID>CloseStackPush(')')<CR>
|
||||||
|
inoremap <silent> ) <C-R>=<SID>CloseStackPop(')')<CR>
|
||||||
|
inoremap <silent> [ [<C-R>=<SID>CloseStackPush(']')<CR>
|
||||||
|
inoremap <silent> ] <C-R>=<SID>CloseStackPop(']')<CR>
|
||||||
|
inoremap <silent> { <C-R>=<SID>OpenSpecial('{','}')<CR>
|
||||||
|
inoremap <silent> } <C-R>=<SID>CloseStackPop('}')<CR>
|
||||||
|
inoremap <silent> <BS> <C-R>=<SID>OpenCloseBackspace()<CR>
|
||||||
|
inoremap <silent> <C-h> <C-R>=<SID>OpenCloseBackspace()<CR>
|
||||||
|
inoremap <silent> <Esc> <C-R>=<SID>CloseStackPop('')<CR><Esc>
|
||||||
|
inoremap <silent> <C-[> <C-R>=<SID>CloseStackPop('')<CR><C-[>
|
||||||
|
let g:autoclose_on = 1
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
endif
|
||||||
|
let s:closeStack = []
|
||||||
|
|
||||||
|
" AutoClose Utilities -----------------------------------------{{{1
|
||||||
|
if !exists("*<SID>OpenSpecial")
|
||||||
|
function <SID>OpenSpecial(ochar,cchar) " ---{{{2
|
||||||
|
let line = getline('.')
|
||||||
|
let col = col('.') - 2
|
||||||
|
"echom string(col).':'.line[:(col)].'|'.line[(col+1):]
|
||||||
|
if a:ochar == line[(col)] && a:cchar == line[(col+1)] "&& strlen(line) - (col) == 2
|
||||||
|
"echom string(s:closeStack)
|
||||||
|
while len(s:closeStack) > 0
|
||||||
|
call remove(s:closeStack, 0)
|
||||||
|
endwhile
|
||||||
|
return "\<esc>a\<CR>a\<CR>".a:cchar."\<esc>\"_xk$\"_xa"
|
||||||
|
endif
|
||||||
|
return a:ochar.<SID>CloseStackPush(a:cchar)
|
||||||
|
endfunction
|
||||||
|
endif
|
||||||
|
|
||||||
|
if !exists("*<SID>CloseStackPush")
|
||||||
|
function <SID>CloseStackPush(char) " ---{{{2
|
||||||
|
"echom "push"
|
||||||
|
let line = getline('.')
|
||||||
|
let col = col('.')-2
|
||||||
|
if (col) < 0
|
||||||
|
call setline('.',a:char.line)
|
||||||
|
else
|
||||||
|
"echom string(col).':'.line[:(col)].'|'.line[(col+1):]
|
||||||
|
call setline('.',line[:(col)].a:char.line[(col+1):])
|
||||||
|
endif
|
||||||
|
call insert(s:closeStack, a:char)
|
||||||
|
"echom join(s:closeStack,'').' -- '.a:char
|
||||||
|
return ''
|
||||||
|
endfunction
|
||||||
|
endif
|
||||||
|
|
||||||
|
if !exists("*<SID>CloseStackPop")
|
||||||
|
function <SID>CloseStackPop(char) " ---{{{2
|
||||||
|
"echom "pop"
|
||||||
|
if len(s:closeStack) == 0
|
||||||
|
return a:char
|
||||||
|
endif
|
||||||
|
let popped = ''
|
||||||
|
let lastpop = ''
|
||||||
|
"echom join(s:closeStack,'').' || '.lastpop
|
||||||
|
while len(s:closeStack) > 0 && ((lastpop == '' && popped == '') || lastpop != a:char)
|
||||||
|
let lastpop = remove(s:closeStack,0)
|
||||||
|
let popped .= lastpop
|
||||||
|
"echom join(s:closeStack,'').' || '.lastpop.' || '.popped
|
||||||
|
endwhile
|
||||||
|
"echom ' --> '.popped
|
||||||
|
let col = col('.') - 2
|
||||||
|
let line = getline('.')
|
||||||
|
let splits = split(line[:col],popped,1)
|
||||||
|
"echom string(splits)
|
||||||
|
"echom col.' '.line[(col+2):].' '.popped
|
||||||
|
call setline('.',join(splits,popped).line[(col+strlen(popped)+1):])
|
||||||
|
return popped
|
||||||
|
endfunction
|
||||||
|
endif
|
||||||
|
|
||||||
|
if !exists("*<SID>QuoteDelim")
|
||||||
|
function <SID>QuoteDelim(char) " ---{{{2
|
||||||
|
let line = getline('.')
|
||||||
|
let col = col('.')
|
||||||
|
if line[col - 2] == "\\"
|
||||||
|
"Inserting a quoted quotation mark into the string
|
||||||
|
return a:char
|
||||||
|
elseif line[col - 1] == a:char
|
||||||
|
"Escaping out of the string
|
||||||
|
return "\<C-R>=".s:SID()."CloseStackPop(\"\\".a:char."\")\<CR>"
|
||||||
|
else
|
||||||
|
"Starting a string
|
||||||
|
return a:char."\<C-R>=".s:SID()."CloseStackPush(\"\\".a:char."\")\<CR>"
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
endif
|
||||||
|
|
||||||
|
" The strings returned from QuoteDelim aren't in scope for <SID>, so I
|
||||||
|
" have to fake it using this function (from the Vim help, but tweaked)
|
||||||
|
"
|
||||||
|
if !exists("*s:SID")
|
||||||
|
function s:SID()
|
||||||
|
return matchstr(expand('<sfile>'), '<SNR>\d\+_\zeSID$')
|
||||||
|
endfun
|
||||||
|
endif
|
||||||
|
|
||||||
|
if !exists("*<SID>OpenCloseBackspace")
|
||||||
|
function <SID>OpenCloseBackspace() " ---{{{2
|
||||||
|
"if pumvisible()
|
||||||
|
" pclose
|
||||||
|
" call <SID>StopOmni()
|
||||||
|
" return "\<C-E>"
|
||||||
|
"else
|
||||||
|
let curline = getline('.')
|
||||||
|
let curpos = col('.')
|
||||||
|
let curletter = curline[curpos-1]
|
||||||
|
let prevletter = curline[curpos-2]
|
||||||
|
if (prevletter == '"' && curletter == '"') ||
|
||||||
|
\ (prevletter == "'" && curletter == "'") ||
|
||||||
|
\ (prevletter == "(" && curletter == ")") ||
|
||||||
|
\ (prevletter == "{" && curletter == "}") ||
|
||||||
|
\ (prevletter == "[" && curletter == "]")
|
||||||
|
if len(s:closeStack) > 0
|
||||||
|
call remove(s:closeStack,0)
|
||||||
|
endif
|
||||||
|
return "\<Delete>\<BS>"
|
||||||
|
else
|
||||||
|
return "\<BS>"
|
||||||
|
endif
|
||||||
|
"endif
|
||||||
|
endf
|
||||||
|
endif
|
||||||
|
|
||||||
510
dot_vim/ftplugin/lisp/limp/bridge.vim
Normal file
510
dot_vim/ftplugin/lisp/limp/bridge.vim
Normal file
@@ -0,0 +1,510 @@
|
|||||||
|
"
|
||||||
|
" limp/vim/bridge.vim
|
||||||
|
"
|
||||||
|
" URL:
|
||||||
|
" http://mikael.jansson.be/hacking
|
||||||
|
"
|
||||||
|
" Description:
|
||||||
|
" Handle communication between Vim and Lisp, including boot, connect and
|
||||||
|
" display. Relies on 'lisp.sh' from the Limp package.
|
||||||
|
"
|
||||||
|
" Version:
|
||||||
|
" 0.2
|
||||||
|
"
|
||||||
|
" Date:
|
||||||
|
" 2008-04-25
|
||||||
|
"
|
||||||
|
" Authors:
|
||||||
|
" Mikael Jansson <mail@mikael.jansson.be>
|
||||||
|
" Larry Clapp <vim@theclapp.org>
|
||||||
|
|
||||||
|
" Changelog:
|
||||||
|
" 2008-08-26 by Mikael Jansson <mail@mikael.jansson.be>
|
||||||
|
" * Optionally specify core at startup and exit.
|
||||||
|
"
|
||||||
|
" 2008-08-25 by Mikael Jansson <mail@mikael.jansson.be>
|
||||||
|
" * Now boots a new Lisp or connects to an existing via screen.
|
||||||
|
" No longer needs the funnel (although it does need a file to read to/from
|
||||||
|
" screen: it doesn't seem as if 'stuff' can handle very large amounts of
|
||||||
|
" texts)
|
||||||
|
"
|
||||||
|
" 2008-08-18 by Mikael Jansson <mail@mikael.jansson.be>
|
||||||
|
" * Tab-completed prompt that lets you choose the Lisp process to connect to.
|
||||||
|
" Moved the startup to before the loaded check.
|
||||||
|
|
||||||
|
"-------------------------------------------------------------------
|
||||||
|
" startup
|
||||||
|
"-------------------------------------------------------------------
|
||||||
|
" only do these things once
|
||||||
|
|
||||||
|
let s:Limp_version="0.3.4"
|
||||||
|
|
||||||
|
let s:Limp_location = expand("$LIMPRUNTIME")
|
||||||
|
"if s:Limp_location == "" || s:Limp_location == "$LIMPRUNTIME"
|
||||||
|
if !filereadable(s:Limp_location . "/vim/limp.vim")
|
||||||
|
let s:Limp_location = "/usr/local/limp/" . s:Limp_version
|
||||||
|
endif
|
||||||
|
|
||||||
|
" prefix for the pipe used for communication
|
||||||
|
let s:limp_bridge_channel_base = $HOME . "/.limp_bridge_channel-"
|
||||||
|
let s:limp_bridge_connected=0
|
||||||
|
exe "setlocal complete+=s" . s:Limp_location . "/vim/thesaurus"
|
||||||
|
|
||||||
|
"-------------------------------------------------------------------
|
||||||
|
" talk to multiple Lisps using LimpBridge_connect()
|
||||||
|
"-------------------------------------------------------------------
|
||||||
|
fun! LimpBridge_complete_lisp(A,L,P)
|
||||||
|
let prefix = s:limp_bridge_channel_base
|
||||||
|
"echom "ls -1 ".prefix."*"
|
||||||
|
let output = system("ls -1 ".prefix."*")
|
||||||
|
if stridx(output, prefix."*") >= 0
|
||||||
|
echom "No Lisps started yet?"
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
let files = split(output, "\n")
|
||||||
|
let names = []
|
||||||
|
for f in files
|
||||||
|
let names += [f[strlen(prefix):]]
|
||||||
|
endfor
|
||||||
|
return names
|
||||||
|
endfun
|
||||||
|
|
||||||
|
" optionally specify the screen id to connect to
|
||||||
|
"
|
||||||
|
" return values:
|
||||||
|
"
|
||||||
|
" -1 if user didn't want to connect
|
||||||
|
" 0 if connection wasn't possible
|
||||||
|
" 1 if the user did connect
|
||||||
|
" 2 if the user was already connected
|
||||||
|
"
|
||||||
|
fun! LimpBridge_connect(...)
|
||||||
|
if s:limp_bridge_connected == 1
|
||||||
|
echom "Already connected to Lisp!"
|
||||||
|
return 2
|
||||||
|
endif
|
||||||
|
if a:0 == 1 && a:1 != ""
|
||||||
|
" format: 7213.limp_listener-foo
|
||||||
|
let pid = a:1[:stridx(a:1, '.')-1]
|
||||||
|
let fullname = a:1[stridx(a:1, '.')+1:]
|
||||||
|
let name = fullname[strlen("limp_listener-"):]
|
||||||
|
|
||||||
|
let s:limp_bridge_channel = s:limp_bridge_channel_base.name.".".pid
|
||||||
|
else
|
||||||
|
let s:limp_bridge_channel = s:limp_bridge_channel_base
|
||||||
|
let name = input("Connect to [boot new]: ", "", "customlist,LimpBridge_complete_lisp")
|
||||||
|
if name == ""
|
||||||
|
return -1
|
||||||
|
endif
|
||||||
|
let s:limp_bridge_channel .= name
|
||||||
|
if 0 == filewritable(s:limp_bridge_channel) "|| s:limp_bridge_channel = s:limp_bridge_channel_base
|
||||||
|
echom "Not a Limp channel."
|
||||||
|
return 0
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
" extract the PID from format: foo.104982
|
||||||
|
" (backward from screen sty naming to ease tab completion)
|
||||||
|
|
||||||
|
" bridge id is the file used for communication between Vim and screen
|
||||||
|
let s:limp_bridge_id = strpart(s:limp_bridge_channel, strlen(s:limp_bridge_channel_base))
|
||||||
|
|
||||||
|
" bridge screenid is the screen in which the Lisp is running
|
||||||
|
let s:limp_bridge_screenid = s:limp_bridge_id[strridx(s:limp_bridge_id, '.')+1:]
|
||||||
|
"let s:limp_bridge_scratch = $HOME . "/.limp_bridge_scratch-" . s:limp_bridge_id
|
||||||
|
let s:limp_bridge_test = $HOME . '/.limp_bridge_test-' . s:limp_bridge_id
|
||||||
|
|
||||||
|
silent exe "new" s:limp_bridge_channel
|
||||||
|
if exists( "#BufEnter#*.lisp#" )
|
||||||
|
doauto BufEnter x.lisp
|
||||||
|
endif
|
||||||
|
setlocal syntax=lisp
|
||||||
|
" XXX: in ViLisp, buftype=nowrite, but w/ limp_bridge_channel, vim
|
||||||
|
" complains about the file being write-only.
|
||||||
|
"setlocal buftype=nowrite
|
||||||
|
setlocal bufhidden=hide
|
||||||
|
setlocal nobuflisted
|
||||||
|
setlocal noswapfile
|
||||||
|
hide
|
||||||
|
|
||||||
|
silent exe "new" s:limp_bridge_test
|
||||||
|
if exists( "#BufEnter#*.lisp#" )
|
||||||
|
doauto BufEnter x.lisp
|
||||||
|
endif
|
||||||
|
setlocal syntax=lisp
|
||||||
|
" setlocal buftype=nofile
|
||||||
|
setlocal bufhidden=hide
|
||||||
|
setlocal nobuflisted
|
||||||
|
" setlocal noswapfile
|
||||||
|
hide
|
||||||
|
|
||||||
|
" hide from the user that we created and deleted (hid, really) a couple of
|
||||||
|
" buffers
|
||||||
|
"normal!
|
||||||
|
redraw
|
||||||
|
|
||||||
|
let s:limp_bridge_connected=1
|
||||||
|
|
||||||
|
echom "Welcome to Limp. May your journey be pleasant."
|
||||||
|
|
||||||
|
return 1
|
||||||
|
endfun
|
||||||
|
|
||||||
|
fun! LimpBridge_connection_status()
|
||||||
|
if s:limp_bridge_connected == 1
|
||||||
|
return "Connected to ".s:limp_bridge_id
|
||||||
|
else
|
||||||
|
return "Disconnected"
|
||||||
|
endif
|
||||||
|
endfun
|
||||||
|
|
||||||
|
fun! LimpBridge_disconnect()
|
||||||
|
let s:limp_bridge_connected = 0
|
||||||
|
let s:limp_bridge_id = "<disconnected>"
|
||||||
|
endfun
|
||||||
|
|
||||||
|
"
|
||||||
|
" optionally, specify the path of the core to save to
|
||||||
|
"
|
||||||
|
fun! LimpBridge_quit_lisp(...)
|
||||||
|
" we were given a file
|
||||||
|
if a:0 == 1 && a:1 != ""
|
||||||
|
let core = a:1
|
||||||
|
call LimpBridge_send_to_lisp("(sb-ext:save-lisp-and-die \"".core."\")\n")
|
||||||
|
echom "Lisp ".s:limp_bridge_id." is gone, core saved to ".core."."
|
||||||
|
else
|
||||||
|
call LimpBridge_send_to_lisp("(sb-ext:quit)\n")
|
||||||
|
echom "Lisp ".s:limp_bridge_id." is gone."
|
||||||
|
endif
|
||||||
|
call LimpBridge_disconnect()
|
||||||
|
endfun
|
||||||
|
|
||||||
|
fun! LimpBridge_shutdown_lisp()
|
||||||
|
if s:limp_bridge_connected == 1
|
||||||
|
let core = input("Name of core to save [none]: ", "", "file")
|
||||||
|
call LimpBridge_quit_lisp(core)
|
||||||
|
else
|
||||||
|
echom "Not connected."
|
||||||
|
endif
|
||||||
|
endfun
|
||||||
|
|
||||||
|
"
|
||||||
|
" when not connected, start new or connect to existing
|
||||||
|
" otherwise, switch to Lisp (screen)
|
||||||
|
fun! LimpBridge_boot_or_connect_or_display()
|
||||||
|
if s:limp_bridge_connected
|
||||||
|
" is it still running?
|
||||||
|
let status = system("screen -ls")
|
||||||
|
if stridx(status, s:limp_bridge_screenid) == -1
|
||||||
|
call LimpBridge_disconnect()
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
let cmd = "screen -x ".s:limp_bridge_screenid
|
||||||
|
if has("gui_running") || b:listener_always_open_window == 1
|
||||||
|
let cmd = "xterm -e " . cmd
|
||||||
|
if b:listener_keep_open == 1
|
||||||
|
let cmd .= " &"
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
silent exe "!".cmd
|
||||||
|
redraw!
|
||||||
|
else
|
||||||
|
" connect to a fresh Lisp
|
||||||
|
let what = LimpBridge_connect()
|
||||||
|
if what <= 0
|
||||||
|
" user didn't want to connect, let's boot!
|
||||||
|
let name = input("Name the Lisp: ")
|
||||||
|
if strlen(name) == 0
|
||||||
|
" give up
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
let core = input("Path to core to boot [use system-default]: ", "", "file")
|
||||||
|
let core_opt = ""
|
||||||
|
if filereadable(core)
|
||||||
|
let core_opt = "-c ".core
|
||||||
|
echom "Booting ".core."..."
|
||||||
|
else
|
||||||
|
echom "Booting..."
|
||||||
|
endif
|
||||||
|
let styfile = tempname()
|
||||||
|
let cmd = s:Limp_location . "/bin/lisp.sh ".core_opt."-s ".styfile." -b ".name
|
||||||
|
call system(cmd)
|
||||||
|
while getfsize(styfile) <= len("limp_listener")
|
||||||
|
sleep 200m
|
||||||
|
endwhile
|
||||||
|
" needs to be binary, or readfile() expects a newline...
|
||||||
|
let lines = readfile(styfile, 'b')
|
||||||
|
if len(lines) < 1
|
||||||
|
echom "Error getting screen ID!"
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
let sty = lines[0]
|
||||||
|
call delete(styfile)
|
||||||
|
call LimpBridge_connect(sty)
|
||||||
|
call LimpBridge_boot_or_connect_or_display()
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endfun
|
||||||
|
|
||||||
|
augroup LimpBridge
|
||||||
|
au!
|
||||||
|
autocmd BufLeave .LimpBridge_* setlocal nobuflisted
|
||||||
|
autocmd BufLeave *.lisp let g:limp_bridge_last_lisp = bufname( "%" )
|
||||||
|
augroup END
|
||||||
|
|
||||||
|
|
||||||
|
"-------------------------------------------------------------------
|
||||||
|
" plugin <-> function mappings
|
||||||
|
"-------------------------------------------------------------------
|
||||||
|
|
||||||
|
nnoremap <silent> <buffer> <Plug>LimpBootConnectDisplay :call LimpBridge_boot_or_connect_or_display()<CR>
|
||||||
|
nnoremap <silent> <buffer> <Plug>LimpDisconnect :call LimpBridge_disconnect()<CR>
|
||||||
|
nnoremap <silent> <buffer> <Plug>LimpShutdownLisp :call LimpBridge_shutdown_lisp()<CR>
|
||||||
|
|
||||||
|
nnoremap <silent> <buffer> <Plug>EvalTop :call LimpBridge_eval_top_form()<CR>
|
||||||
|
nnoremap <silent> <buffer> <Plug>EvalCurrent :call LimpBridge_eval_current_form()<CR>
|
||||||
|
nnoremap <silent> <buffer> <Plug>EvalExpression :call LimpBridge_prompt_eval_expression()<CR>
|
||||||
|
|
||||||
|
vnoremap <silent> <buffer> <Plug>EvalBlock :call LimpBridge_eval_block()<cr>
|
||||||
|
|
||||||
|
nnoremap <silent> <buffer> <Plug>AbortReset :call LimpBridge_send_to_lisp( "ABORT\n" )<CR>
|
||||||
|
nnoremap <silent> <buffer> <Plug>AbortInterrupt :call LimpBridge_send_to_lisp( "" )<CR>
|
||||||
|
|
||||||
|
nnoremap <silent> <buffer> <Plug>TestCurrent :call LimpBridge_stuff_current_form()<CR>
|
||||||
|
nnoremap <silent> <buffer> <Plug>TestTop :call LimpBridge_stuff_top_form()<CR>
|
||||||
|
|
||||||
|
nnoremap <silent> <buffer> <Plug>LoadThisFile :call LimpBridge_send_to_lisp( "(load \"" . expand( "%:p" ) . "\")\n")<CR>
|
||||||
|
nnoremap <silent> <buffer> <Plug>LoadAnyFile :call LimpBridge_send_to_lisp( "(load \"" . expand( "%:p:r" ) . "\")\n")<CR>
|
||||||
|
|
||||||
|
nnoremap <silent> <buffer> <Plug>CompileFile :w! <bar> call LimpBridge_send_to_lisp("(compile-file \"".expand("%:p")."\")\n")<CR>
|
||||||
|
|
||||||
|
" XXX: What's the proprer syntax for calling >1 Plug?
|
||||||
|
""nnoremap <buffer> <Plug>CompileAndLoadFile <Plug>CompileFile <bar> <Plug>LoadAnyFile
|
||||||
|
nnoremap <silent> <buffer> <Plug>CompileAndLoadFile :w! <bar> call LimpBridge_send_to_lisp("(compile-file \"".expand("%:p")."\")\n") <bar> call LimpBridge_send_to_lisp( "(load \"" . expand( "%:p:r" ) . "\")\n")<CR>
|
||||||
|
|
||||||
|
" Goto Test Buffer:
|
||||||
|
" Goto Split: split current buffer and goto test buffer
|
||||||
|
nnoremap <silent> <buffer> <Plug>GotoTestBuffer :call LimpBridge_goto_buffer_or_window(g:limp_bridge_test)<CR>
|
||||||
|
nnoremap <silent> <buffer> <Plug>GotoTestBufferAndSplit :sb <bar> call LimpBridge_goto_buffer_or_window(g:limp_bridge_test)<CR>
|
||||||
|
|
||||||
|
" Goto Last: return to g:limp_bridge_last_lisp, i.e. last buffer
|
||||||
|
nnoremap <silent> <buffer> <Plug>GotoLastLispBuffer :call LimpBridge_goto_buffer_or_window(g:limp_bridge_last_lisp)<CR>
|
||||||
|
|
||||||
|
" HyperSpec:
|
||||||
|
nnoremap <silent> <buffer> <Plug>HyperspecExact :call LimpBridge_hyperspec("exact", 0)<CR>
|
||||||
|
nnoremap <silent> <buffer> <Plug>HyperspecPrefix :call LimpBridge_hyperspec("prefix", 1)<CR>
|
||||||
|
nnoremap <silent> <buffer> <Plug>HyperspecSuffix :call LimpBridge_hyperspec("suffix", 1)<CR>
|
||||||
|
nnoremap <silent> <buffer> <Plug>HyperspecGrep :call LimpBridge_hyperspec("grep", 1)<CR>
|
||||||
|
nnoremap <silent> <buffer> <Plug>HyperspecFirstLetterIndex :call LimpBridge_hyperspec("index", 0)<CR>
|
||||||
|
nnoremap <silent> <buffer> <Plug>HyperspecFullIndex :call LimpBridge_hyperspec("index-page", 0)<CR>
|
||||||
|
|
||||||
|
" Help Describe: ask Lisp about the current symbol
|
||||||
|
nnoremap <silent> <buffer> <Plug>HelpDescribe :call LimpBridge_send_to_lisp("(describe '".expand("<cword>").")")<CR>
|
||||||
|
|
||||||
|
|
||||||
|
"-------------------------------------------------------------------
|
||||||
|
" library
|
||||||
|
"-------------------------------------------------------------------
|
||||||
|
" assume that all of the file has been loaded & defined once
|
||||||
|
" if one of the functions are defined.
|
||||||
|
if exists("*LimpBridge_goto_buffer_or_window")
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
|
||||||
|
function! LimpBridge_goto_buffer_or_window( buff )
|
||||||
|
if -1 == bufwinnr( a:buff )
|
||||||
|
exe "hide bu" a:buff
|
||||||
|
else
|
||||||
|
exe bufwinnr( a:buff ) . "wincmd w"
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
|
||||||
|
function! LimpBridge_get_pos()
|
||||||
|
" what buffer are we in?
|
||||||
|
let bufnr = bufnr( "%" )
|
||||||
|
|
||||||
|
" get current position
|
||||||
|
let c_cur = virtcol( "." )
|
||||||
|
let l_cur = line( "." )
|
||||||
|
normal! H
|
||||||
|
let l_top = line( "." )
|
||||||
|
|
||||||
|
let pos = bufnr . "|" . l_top . "," . l_cur . "," . c_cur
|
||||||
|
|
||||||
|
" go back
|
||||||
|
exe "normal! " l_cur . "G" . c_cur . "|"
|
||||||
|
|
||||||
|
return( pos )
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
|
||||||
|
function! LimpBridge_goto_pos( pos )
|
||||||
|
let mx = '\(\d\+\)|\(\d\+\),\(\d\+\),\(\d\+\)'
|
||||||
|
let bufnr = substitute( a:pos, mx, '\1', '' )
|
||||||
|
let l_top = substitute( a:pos, mx, '\2', '' )
|
||||||
|
let l_cur = substitute( a:pos, mx, '\3', '' )
|
||||||
|
let c_cur = substitute( a:pos, mx, '\4', '' )
|
||||||
|
|
||||||
|
silent exe "hide bu" bufnr
|
||||||
|
silent exe "normal! " . l_top . "Gzt" . l_cur . "G" . c_cur . "|"
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
|
||||||
|
function! LimpBridge_yank( motion )
|
||||||
|
let value = ''
|
||||||
|
|
||||||
|
let p = LimpBridge_get_pos()
|
||||||
|
silent! exec 'normal!' a:motion
|
||||||
|
let new_p = LimpBridge_get_pos()
|
||||||
|
|
||||||
|
" did we move?
|
||||||
|
if p != new_p
|
||||||
|
" go back
|
||||||
|
silent! exec 'normal!' a:motion
|
||||||
|
|
||||||
|
let old_l = @l
|
||||||
|
exec 'normal! "ly' . a:motion
|
||||||
|
let value = @l
|
||||||
|
let @l = old_l
|
||||||
|
endif
|
||||||
|
|
||||||
|
call LimpBridge_goto_pos( p )
|
||||||
|
|
||||||
|
return( value )
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
|
||||||
|
" copy an expression to a buffer
|
||||||
|
function! LimpBridge_send_sexp_to_buffer( sexp, buffer )
|
||||||
|
let p = LimpBridge_get_pos()
|
||||||
|
|
||||||
|
" go to the given buffer, go to the bottom
|
||||||
|
exe "hide bu" a:buffer
|
||||||
|
silent normal! G
|
||||||
|
|
||||||
|
" tried append() -- doesn't work the way I need it to
|
||||||
|
let old_l = @l
|
||||||
|
let @l = a:sexp
|
||||||
|
silent exe "put l"
|
||||||
|
" normal! "lp
|
||||||
|
let @l = old_l
|
||||||
|
|
||||||
|
call LimpBridge_goto_pos( p )
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
|
||||||
|
" destroys contents of LimpBridge_channel buffer
|
||||||
|
function! LimpBridge_send_to_lisp( sexp )
|
||||||
|
if a:sexp == ''
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
if !s:limp_bridge_connected
|
||||||
|
echom "Not connected to Lisp!"
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
let p = LimpBridge_get_pos()
|
||||||
|
|
||||||
|
" goto LimpBridge_channel, delete it, put s-exp, write it to lisp
|
||||||
|
try
|
||||||
|
exe "hide bu" s:limp_bridge_channel
|
||||||
|
exe "%d"
|
||||||
|
normal! 1G
|
||||||
|
|
||||||
|
" tried append() -- doesn't work the way I need it to
|
||||||
|
let old_l = @l
|
||||||
|
let @l = a:sexp
|
||||||
|
normal! "lP
|
||||||
|
let @l = old_l
|
||||||
|
|
||||||
|
silent exe 'w!'
|
||||||
|
call system('screen -x '.s:limp_bridge_screenid.' -p 0 -X eval "readbuf" "paste ."')
|
||||||
|
catch /^Vim:E211:/
|
||||||
|
echom "Lisp is gone!"
|
||||||
|
" file not available, Lisp disappeared
|
||||||
|
call LimpBridge_disconnect()
|
||||||
|
endtry
|
||||||
|
|
||||||
|
call LimpBridge_goto_pos( p )
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! LimpBridge_prompt_eval_expression()
|
||||||
|
let whatwhat = input("Eval: ")
|
||||||
|
call LimpBridge_send_to_lisp(whatwhat)
|
||||||
|
endfun
|
||||||
|
|
||||||
|
|
||||||
|
" Actually evals current top level form
|
||||||
|
function! LimpBridge_eval_top_form()
|
||||||
|
" save position
|
||||||
|
let p = LimpBridge_get_pos()
|
||||||
|
|
||||||
|
silent! exec "normal! 99[("
|
||||||
|
call LimpBridge_send_to_lisp( LimpBridge_yank( "%" ) )
|
||||||
|
|
||||||
|
" fix cursor position, in case of error below
|
||||||
|
call LimpBridge_goto_pos( p )
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
|
||||||
|
function! LimpBridge_eval_current_form()
|
||||||
|
" save position
|
||||||
|
let pos = LimpBridge_get_pos()
|
||||||
|
|
||||||
|
" find & yank current s-exp
|
||||||
|
normal! [(
|
||||||
|
let sexp = LimpBridge_yank( "%" )
|
||||||
|
call LimpBridge_send_to_lisp( sexp )
|
||||||
|
call LimpBridge_goto_pos( pos )
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
|
||||||
|
function! LimpBridge_eval_block() range
|
||||||
|
" save position
|
||||||
|
let pos = LimpBridge_get_pos()
|
||||||
|
|
||||||
|
" yank current visual block
|
||||||
|
let old_l = @l
|
||||||
|
'<,'> yank l
|
||||||
|
let sexp = @l
|
||||||
|
let @l = old_l
|
||||||
|
|
||||||
|
call LimpBridge_send_to_lisp( sexp )
|
||||||
|
call LimpBridge_goto_pos( pos )
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
|
||||||
|
function! LimpBridge_stuff_current_form()
|
||||||
|
" save position
|
||||||
|
let pos = LimpBridge_get_pos()
|
||||||
|
|
||||||
|
" find & yank current s-exp
|
||||||
|
normal! [(
|
||||||
|
call LimpBridge_send_sexp_to_buffer( LimpBridge_yank( "%" ), s:limp_bridge_test )
|
||||||
|
|
||||||
|
call LimpBridge_goto_pos( pos )
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! LimpBridge_stuff_top_form()
|
||||||
|
" save position
|
||||||
|
let pos = LimpBridge_get_pos()
|
||||||
|
|
||||||
|
" find & yank top-level s-exp
|
||||||
|
silent! exec "normal! 99[("
|
||||||
|
call LimpBridge_send_sexp_to_buffer( LimpBridge_yank( "%" ), s:limp_bridge_test )
|
||||||
|
|
||||||
|
call LimpBridge_goto_pos( pos )
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! LimpBridge_hyperspec(type, make_page)
|
||||||
|
" get current word under cursor
|
||||||
|
let word = expand( "<cword>" )
|
||||||
|
let cmd = "! perl " . s:Limp_location . "/bin/limp-hyperspec.pl"
|
||||||
|
let cmd = cmd . " " . a:type . " " . a:make_page . " '" . word . "'"
|
||||||
|
silent! exe cmd
|
||||||
|
redraw!
|
||||||
|
endfunction
|
||||||
|
|
||||||
207
dot_vim/ftplugin/lisp/limp/cursor.vim
Normal file
207
dot_vim/ftplugin/lisp/limp/cursor.vim
Normal file
@@ -0,0 +1,207 @@
|
|||||||
|
"
|
||||||
|
" limp/vim/cursor.vim
|
||||||
|
"
|
||||||
|
" URL:
|
||||||
|
" http://mikael.jansson.be/hacking
|
||||||
|
"
|
||||||
|
" Description:
|
||||||
|
" Save/restore cursor position in window (mostly obsoleted by Vim7 though)
|
||||||
|
"
|
||||||
|
" Version:
|
||||||
|
" 0.2
|
||||||
|
"
|
||||||
|
" Date:
|
||||||
|
" 2008-04-25
|
||||||
|
"
|
||||||
|
" Authors:
|
||||||
|
" Mikael Jansson <mail@mikael.jansson.be>
|
||||||
|
" Charles E. Campbell, Jr. <drNchipO@ScampbellPfamilyA.Mbiz>-NOSPAM
|
||||||
|
"
|
||||||
|
" Changelog:
|
||||||
|
" 2008-04-18
|
||||||
|
" * Removed all leader mappings
|
||||||
|
"
|
||||||
|
" Usage:
|
||||||
|
" call Cursor_push()
|
||||||
|
" let cursor = Cursor_get()
|
||||||
|
"
|
||||||
|
" call Cursor_pop()
|
||||||
|
" call Cursor_set(cursor)
|
||||||
|
"
|
||||||
|
|
||||||
|
" Load Once: {{{1
|
||||||
|
|
||||||
|
let s:keepcpo = &cpo
|
||||||
|
set cpo&vim
|
||||||
|
|
||||||
|
" -----------------------
|
||||||
|
" Public Interface: {{{1
|
||||||
|
" -----------------------
|
||||||
|
let s:modifier= "sil keepj "
|
||||||
|
|
||||||
|
|
||||||
|
" assume that all of the file has been loaded & defined once
|
||||||
|
" if one of the functions are defined.
|
||||||
|
if exists("*Cursor_get")
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Cursor_get: {{{1
|
||||||
|
" Return the current cursor (as an executable command!)
|
||||||
|
"
|
||||||
|
fun! Cursor_get()
|
||||||
|
if line(".") == 1 && getline(1) == ""
|
||||||
|
return ""
|
||||||
|
endif
|
||||||
|
|
||||||
|
" disable various scrolling trickery
|
||||||
|
let so_keep = &so
|
||||||
|
let siso_keep = &siso
|
||||||
|
let ss_keep = &ss
|
||||||
|
set so=0 siso=0 ss=0
|
||||||
|
|
||||||
|
let swline = line(".")
|
||||||
|
let swcol = col(".")
|
||||||
|
let swwline = winline() - 1
|
||||||
|
let swwcol = virtcol(".") - wincol()
|
||||||
|
let cursordata = "call Window_goto_by_buffer_number(".winbufnr(0).")|silent ".swline
|
||||||
|
let cursordata = cursordata."|".s:modifier."norm! 0z\<cr>"
|
||||||
|
if swwline > 0
|
||||||
|
let cursordata = cursordata.":".s:modifier."norm! ".swwline."\<c-y>\<cr>"
|
||||||
|
endif
|
||||||
|
if swwcol > 0
|
||||||
|
let cursordata = cursordata.":".s:modifier."norm! 0".swwcol."zl\<cr>"
|
||||||
|
endif
|
||||||
|
let cursordata = cursordata.":".s:modifier."call cursor(".swline.",".swcol.")\<cr>"
|
||||||
|
|
||||||
|
" restore scrolling flags
|
||||||
|
let &so = so_keep
|
||||||
|
let &siso = siso_keep
|
||||||
|
let &ss = ss_keep
|
||||||
|
|
||||||
|
return cursordata
|
||||||
|
endfun
|
||||||
|
|
||||||
|
" Cursor_set: {{{1
|
||||||
|
" Set the current cursor to an old one
|
||||||
|
"
|
||||||
|
fun! Cursor_set(cursordata)
|
||||||
|
exe "silent ".a:cursordata
|
||||||
|
endfun
|
||||||
|
|
||||||
|
|
||||||
|
" ---------------------------------------------------------------------
|
||||||
|
" Cursor_push {{{1
|
||||||
|
" let cursor = Cursor_push() save window position in b:cursor_position_{b:cursor_position_index}
|
||||||
|
" and return cursor.
|
||||||
|
fun! Cursor_push(...)
|
||||||
|
let cursordata = Cursor_get()
|
||||||
|
|
||||||
|
" save window position in
|
||||||
|
" b:cursor_position_{b:cursor_position_index} (stack)
|
||||||
|
if !exists("b:cursor_position_index")
|
||||||
|
let b:cursor_position_index= 1
|
||||||
|
else
|
||||||
|
let b:cursor_position_index = b:cursor_position_index + 1
|
||||||
|
endif
|
||||||
|
|
||||||
|
let b:cursor_position_{b:cursor_position_index} = cursordata
|
||||||
|
|
||||||
|
return cursordata
|
||||||
|
endfun
|
||||||
|
|
||||||
|
" ---------------------------------------------------------------------
|
||||||
|
" Cursor_pop: {{{1
|
||||||
|
fun! Cursor_pop()
|
||||||
|
if line(".") == 1 && getline(1) == ""
|
||||||
|
return ""
|
||||||
|
endif
|
||||||
|
let so_keep = &so
|
||||||
|
let siso_keep = &siso
|
||||||
|
let ss_keep = &ss
|
||||||
|
set so=0 siso=0 ss=0
|
||||||
|
|
||||||
|
" use saved window position in b:cursor_position_{b:cursor_position_index} if it exists
|
||||||
|
if exists("b:cursor_position_index") && exists("b:cursor_position_{b:cursor_position_index}")
|
||||||
|
try
|
||||||
|
exe "silent! ".b:cursor_position_{b:cursor_position_index}
|
||||||
|
catch /^Vim\%((\a\+)\)\=:E749/
|
||||||
|
" ignore empty buffer error messages
|
||||||
|
endtry
|
||||||
|
" normally drop top-of-stack by one
|
||||||
|
" but while new top-of-stack doesn't exist
|
||||||
|
" drop top-of-stack index by one again
|
||||||
|
if b:cursor_position_index >= 1
|
||||||
|
unlet b:cursor_position_{b:cursor_position_index}
|
||||||
|
let b:cursor_position_index= b:cursor_position_index - 1
|
||||||
|
while b:cursor_position_index >= 1 && !exists("b:cursor_position_{b:cursor_position_index}")
|
||||||
|
let b:cursor_position_index= b:cursor_position_index - 1
|
||||||
|
endwhile
|
||||||
|
if b:cursor_position_index < 1
|
||||||
|
unlet b:cursor_position_index
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
else
|
||||||
|
echohl WarningMsg
|
||||||
|
echomsg "***warning*** need to cursor_save() first!"
|
||||||
|
echohl None
|
||||||
|
endif
|
||||||
|
|
||||||
|
" seems to be something odd: vertical motions after RWP
|
||||||
|
" cause jump to first column. Following fixes that
|
||||||
|
if wincol() > 1
|
||||||
|
silent norm! hl
|
||||||
|
elseif virtcol(".") < virtcol("$")
|
||||||
|
silent norm! lh
|
||||||
|
endif
|
||||||
|
|
||||||
|
let &so = so_keep
|
||||||
|
let &siso = siso_keep
|
||||||
|
let &ss = ss_keep
|
||||||
|
endfun
|
||||||
|
|
||||||
|
" ---------------------------------------------------------------------
|
||||||
|
" Window_goto_by_buffer_number: go to window holding given buffer (by number) {{{1
|
||||||
|
" Prefers current window; if its buffer number doesn't match,
|
||||||
|
" then will try from topleft to bottom right
|
||||||
|
fun! Window_goto_by_buffer_number(bufnum)
|
||||||
|
if winbufnr(0) == a:bufnum
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
winc t
|
||||||
|
let first=1
|
||||||
|
while winbufnr(0) != a:bufnum && (first || winnr() != 1)
|
||||||
|
winc w
|
||||||
|
let first= 0
|
||||||
|
endwhile
|
||||||
|
endfun
|
||||||
|
|
||||||
|
|
||||||
|
" ---------------------------------------------------------------------
|
||||||
|
" ListWinPosn:
|
||||||
|
"fun! ListWinPosn() " Decho
|
||||||
|
" if !exists("b:cursor_position_index") || b:cursor_position_index == 0 " Decho
|
||||||
|
" call Decho("nothing on SWP stack") " Decho
|
||||||
|
" else " Decho
|
||||||
|
" let jwinposn= b:cursor_position_index " Decho
|
||||||
|
" while jwinposn >= 1 " Decho
|
||||||
|
" if exists("b:cursor_position{jwinposn}") " Decho
|
||||||
|
" call Decho("winposn{".jwinposn."}<".b:cursor_position{jwinposn}.">") " Decho
|
||||||
|
" else " Decho
|
||||||
|
" call Decho("winposn{".jwinposn."} -- doesn't exist") " Decho
|
||||||
|
" endif " Decho
|
||||||
|
" let jwinposn= jwinposn - 1 " Decho
|
||||||
|
" endwhile " Decho
|
||||||
|
" endif " Decho
|
||||||
|
"endfun " Decho
|
||||||
|
"com! -nargs=0 LWP call ListWinPosn() " Decho
|
||||||
|
|
||||||
|
|
||||||
|
" ---------------------------------------------------------------------
|
||||||
|
" Restore: {{{1
|
||||||
|
let &cpo = s:keepcpo
|
||||||
|
unlet s:keepcpo
|
||||||
|
|
||||||
|
" ---------------------------------------------------------------------
|
||||||
|
" Modelines: {{{1
|
||||||
|
" vim: ts=4 fdm=marker
|
||||||
338
dot_vim/ftplugin/lisp/limp/desert256.vim
Normal file
338
dot_vim/ftplugin/lisp/limp/desert256.vim
Normal file
@@ -0,0 +1,338 @@
|
|||||||
|
" Vim color file
|
||||||
|
" Maintainer: Henry So, Jr. <henryso@panix.com>
|
||||||
|
|
||||||
|
" These are the colors of the "desert" theme by Hans Fugal with a few small
|
||||||
|
" modifications (namely that I lowered the intensity of the normal white and
|
||||||
|
" made the normal and nontext backgrounds black), modified to work with 88-
|
||||||
|
" and 256-color xterms.
|
||||||
|
"
|
||||||
|
" The original "desert" theme is available as part of the vim distribution or
|
||||||
|
" at http://hans.fugal.net/vim/colors/.
|
||||||
|
"
|
||||||
|
" The real feature of this color scheme, with a wink to the "inkpot" theme, is
|
||||||
|
" the programmatic approximation of the gui colors to the palettes of 88- and
|
||||||
|
" 256- color xterms. The functions that do this (folded away, for
|
||||||
|
" readability) are calibrated to the colors used for Thomas E. Dickey's xterm
|
||||||
|
" (version 200), which is available at http://dickey.his.com/xterm/xterm.html.
|
||||||
|
"
|
||||||
|
" I struggled with trying to parse the rgb.txt file to avoid the necessity of
|
||||||
|
" converting color names to #rrggbb form, but decided it was just not worth
|
||||||
|
" the effort. Maybe someone seeing this may decide otherwise...
|
||||||
|
|
||||||
|
set background=dark
|
||||||
|
if version > 580
|
||||||
|
" no guarantees for version 5.8 and below, but this makes it stop
|
||||||
|
" complaining
|
||||||
|
hi clear
|
||||||
|
if exists("syntax_on")
|
||||||
|
syntax reset
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
let g:colors_name="desert256"
|
||||||
|
|
||||||
|
if has("gui_running") || &t_Co == 88 || &t_Co == 256
|
||||||
|
" functions {{{
|
||||||
|
" returns an approximate grey index for the given grey level
|
||||||
|
fun <SID>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 <SID>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 <SID>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 <SID>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 <SID>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 <SID>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 <SID>color(r, g, b)
|
||||||
|
" get the closest grey
|
||||||
|
let l:gx = <SID>grey_number(a:r)
|
||||||
|
let l:gy = <SID>grey_number(a:g)
|
||||||
|
let l:gz = <SID>grey_number(a:b)
|
||||||
|
|
||||||
|
" get the closest color
|
||||||
|
let l:x = <SID>rgb_number(a:r)
|
||||||
|
let l:y = <SID>rgb_number(a:g)
|
||||||
|
let l:z = <SID>rgb_number(a:b)
|
||||||
|
|
||||||
|
if l:gx == l:gy && l:gy == l:gz
|
||||||
|
" there are two possibilities
|
||||||
|
let l:dgr = <SID>grey_level(l:gx) - a:r
|
||||||
|
let l:dgg = <SID>grey_level(l:gy) - a:g
|
||||||
|
let l:dgb = <SID>grey_level(l:gz) - a:b
|
||||||
|
let l:dgrey = (l:dgr * l:dgr) + (l:dgg * l:dgg) + (l:dgb * l:dgb)
|
||||||
|
let l:dr = <SID>rgb_level(l:gx) - a:r
|
||||||
|
let l:dg = <SID>rgb_level(l:gy) - a:g
|
||||||
|
let l:db = <SID>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 <SID>grey_color(l:gx)
|
||||||
|
else
|
||||||
|
" use the color
|
||||||
|
return <SID>rgb_color(l:x, l:y, l:z)
|
||||||
|
endif
|
||||||
|
else
|
||||||
|
" only one possibility
|
||||||
|
return <SID>rgb_color(l:x, l:y, l:z)
|
||||||
|
endif
|
||||||
|
endfun
|
||||||
|
|
||||||
|
" returns the palette index to approximate the 'rrggbb' hex string
|
||||||
|
fun <SID>rgb(rgb)
|
||||||
|
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 <SID>color(l:r, l:g, l:b)
|
||||||
|
endfun
|
||||||
|
|
||||||
|
" sets the highlighting for the given group
|
||||||
|
fun <SID>X(group, fg, bg, attr)
|
||||||
|
if a:fg != ""
|
||||||
|
exec "hi " . a:group . " guifg=#" . a:fg . " ctermfg=" . <SID>rgb(a:fg)
|
||||||
|
endif
|
||||||
|
if a:bg != ""
|
||||||
|
exec "hi " . a:group . " guibg=#" . a:bg . " ctermbg=" . <SID>rgb(a:bg)
|
||||||
|
endif
|
||||||
|
if a:attr != ""
|
||||||
|
exec "hi " . a:group . " gui=" . a:attr . " cterm=" . a:attr
|
||||||
|
endif
|
||||||
|
endfun
|
||||||
|
" }}}
|
||||||
|
|
||||||
|
call <SID>X("Normal", "cccccc", "000000", "")
|
||||||
|
|
||||||
|
" highlight groups
|
||||||
|
call <SID>X("Cursor", "708090", "f0e68c", "")
|
||||||
|
"CursorIM
|
||||||
|
"Directory
|
||||||
|
"DiffAdd
|
||||||
|
"DiffChange
|
||||||
|
"DiffDelete
|
||||||
|
"DiffText
|
||||||
|
"ErrorMsg
|
||||||
|
call <SID>X("VertSplit", "c2bfa5", "7f7f7f", "reverse")
|
||||||
|
call <SID>X("Folded", "ffd700", "4d4d4d", "")
|
||||||
|
call <SID>X("FoldColumn", "d2b48c", "4d4d4d", "")
|
||||||
|
call <SID>X("IncSearch", "708090", "f0e68c", "")
|
||||||
|
"LineNr
|
||||||
|
call <SID>X("ModeMsg", "daa520", "", "")
|
||||||
|
call <SID>X("MoreMsg", "2e8b57", "", "")
|
||||||
|
call <SID>X("NonText", "addbe7", "000000", "bold")
|
||||||
|
call <SID>X("Question", "00ff7f", "", "")
|
||||||
|
call <SID>X("Search", "f5deb3", "cd853f", "")
|
||||||
|
call <SID>X("SpecialKey", "9acd32", "", "")
|
||||||
|
call <SID>X("StatusLine", "c2bfa5", "000000", "reverse")
|
||||||
|
call <SID>X("StatusLineNC", "c2bfa5", "7f7f7f", "reverse")
|
||||||
|
call <SID>X("Title", "cd5c5c", "", "")
|
||||||
|
call <SID>X("Visual", "6b8e23", "f0e68c", "reverse")
|
||||||
|
"VisualNOS
|
||||||
|
call <SID>X("WarningMsg", "fa8072", "", "")
|
||||||
|
"WildMenu
|
||||||
|
"Menu
|
||||||
|
"Scrollbar
|
||||||
|
"Tooltip
|
||||||
|
|
||||||
|
" syntax highlighting groups
|
||||||
|
call <SID>X("Comment", "87ceeb", "", "")
|
||||||
|
call <SID>X("Constant", "ffa0a0", "", "")
|
||||||
|
call <SID>X("Identifier", "98fb98", "", "none")
|
||||||
|
call <SID>X("Statement", "f0e68c", "", "bold")
|
||||||
|
call <SID>X("PreProc", "cd5c5c", "", "")
|
||||||
|
call <SID>X("Type", "bdb76b", "", "bold")
|
||||||
|
call <SID>X("Special", "ffdead", "", "")
|
||||||
|
"Underlined
|
||||||
|
call <SID>X("Ignore", "666666", "", "")
|
||||||
|
"Error
|
||||||
|
call <SID>X("Todo", "ff4500", "eeee00", "")
|
||||||
|
|
||||||
|
" delete functions {{{
|
||||||
|
delf <SID>X
|
||||||
|
delf <SID>rgb
|
||||||
|
delf <SID>color
|
||||||
|
delf <SID>rgb_color
|
||||||
|
delf <SID>rgb_level
|
||||||
|
delf <SID>rgb_number
|
||||||
|
delf <SID>grey_color
|
||||||
|
delf <SID>grey_level
|
||||||
|
delf <SID>grey_number
|
||||||
|
" }}}
|
||||||
|
else
|
||||||
|
" color terminal definitions
|
||||||
|
hi SpecialKey ctermfg=darkgreen
|
||||||
|
hi NonText cterm=bold ctermfg=darkblue
|
||||||
|
hi Directory ctermfg=darkcyan
|
||||||
|
hi ErrorMsg cterm=bold ctermfg=7 ctermbg=1
|
||||||
|
hi IncSearch cterm=NONE ctermfg=yellow ctermbg=green
|
||||||
|
hi Search cterm=NONE ctermfg=grey ctermbg=blue
|
||||||
|
hi MoreMsg ctermfg=darkgreen
|
||||||
|
hi ModeMsg cterm=NONE ctermfg=brown
|
||||||
|
hi LineNr ctermfg=3
|
||||||
|
hi Question ctermfg=green
|
||||||
|
hi StatusLine cterm=bold,reverse
|
||||||
|
hi StatusLineNC cterm=reverse
|
||||||
|
hi VertSplit cterm=reverse
|
||||||
|
hi Title ctermfg=5
|
||||||
|
hi Visual cterm=reverse
|
||||||
|
hi VisualNOS cterm=bold,underline
|
||||||
|
hi WarningMsg ctermfg=1
|
||||||
|
hi WildMenu ctermfg=0 ctermbg=3
|
||||||
|
hi Folded ctermfg=darkgrey ctermbg=NONE
|
||||||
|
hi FoldColumn ctermfg=darkgrey ctermbg=NONE
|
||||||
|
hi DiffAdd ctermbg=4
|
||||||
|
hi DiffChange ctermbg=5
|
||||||
|
hi DiffDelete cterm=bold ctermfg=4 ctermbg=6
|
||||||
|
hi DiffText cterm=bold ctermbg=1
|
||||||
|
hi Comment ctermfg=darkcyan
|
||||||
|
hi Constant ctermfg=brown
|
||||||
|
hi Special ctermfg=5
|
||||||
|
hi Identifier ctermfg=6
|
||||||
|
hi Statement ctermfg=3
|
||||||
|
hi PreProc ctermfg=5
|
||||||
|
hi Type ctermfg=2
|
||||||
|
hi Underlined cterm=underline ctermfg=5
|
||||||
|
hi Ignore ctermfg=darkgrey
|
||||||
|
hi Error cterm=bold ctermfg=7 ctermbg=1
|
||||||
|
endif
|
||||||
|
|
||||||
|
" vim: set fdl=0 fdm=marker:
|
||||||
236
dot_vim/ftplugin/lisp/limp/highlight.vim
Normal file
236
dot_vim/ftplugin/lisp/limp/highlight.vim
Normal file
@@ -0,0 +1,236 @@
|
|||||||
|
"
|
||||||
|
" limp/vim/highlight.vim
|
||||||
|
"
|
||||||
|
" URL:
|
||||||
|
" http://mikael.jansson.be/hacking
|
||||||
|
"
|
||||||
|
" Description:
|
||||||
|
" Highlight parens and containing s-exps
|
||||||
|
"
|
||||||
|
" Version:
|
||||||
|
" 0.2
|
||||||
|
"
|
||||||
|
" Date:
|
||||||
|
" 2008-04-25
|
||||||
|
"
|
||||||
|
" Authors:
|
||||||
|
" Mikael Jansson <mail@mikael.jansson.be>
|
||||||
|
" Charles E. Campbell, Jr. <drNchipO@ScampbellPfamilyA.Mbiz>-NOSPAM
|
||||||
|
"
|
||||||
|
" Changelog:
|
||||||
|
" 2008-04-25
|
||||||
|
" * Fixed regressions. Now properly highlights blocks again.
|
||||||
|
"
|
||||||
|
" 2008-04-18
|
||||||
|
" * Removed all mappings
|
||||||
|
" * Removed < 7.00 compatibility
|
||||||
|
" * Renamed to Lim-Highlight
|
||||||
|
" * Changed from Search to Brackets[Block]
|
||||||
|
"
|
||||||
|
" Usage: {{{1
|
||||||
|
" Before loading:
|
||||||
|
" let g:LimpHighlight = 1
|
||||||
|
" or after loading:
|
||||||
|
" call LimpHighlight_start()
|
||||||
|
"
|
||||||
|
" ---------------------------------------------------------------------
|
||||||
|
" Load Once: {{{1
|
||||||
|
|
||||||
|
let s:keepcpo = &cpo
|
||||||
|
set cpo&vim
|
||||||
|
|
||||||
|
" disable matchparen: we do that ourselves.
|
||||||
|
let g:loaded_matchparen = 1
|
||||||
|
|
||||||
|
" assume that all of the file has been loaded & defined once
|
||||||
|
" if one of the functions are defined.
|
||||||
|
if exists("*LimpHighlight_start")
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
|
||||||
|
fun! LimpHighlight_start()
|
||||||
|
if exists("g:limp_highlight_active")
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
let g:limp_highlight_active = 1
|
||||||
|
|
||||||
|
if !exists("*Cursor_get")
|
||||||
|
" due to loading order, <limp/cursor.vim> may not have loaded yet.
|
||||||
|
" attempt to force a load now. Ditto for matchit!
|
||||||
|
silent! runtime limp/cursor.vim
|
||||||
|
endif
|
||||||
|
silent! runtime plugin/matchit.vim
|
||||||
|
|
||||||
|
" set whichwrap
|
||||||
|
let s:wwkeep = &ww
|
||||||
|
set ww=b,s,<,>,[,]
|
||||||
|
|
||||||
|
augroup LimpHighlight
|
||||||
|
au!
|
||||||
|
au CursorMoved * silent call s:LimpHighlight_handler()
|
||||||
|
augroup END
|
||||||
|
|
||||||
|
set lz
|
||||||
|
call s:LimpHighlight_handler()
|
||||||
|
set nolz
|
||||||
|
|
||||||
|
endfun
|
||||||
|
|
||||||
|
fun! LimpHighlight_stop()
|
||||||
|
"echom "Stopping highlight"
|
||||||
|
set lz
|
||||||
|
if exists("g:limp_highlight_active")
|
||||||
|
unlet g:limp_highlight_active
|
||||||
|
endif
|
||||||
|
match none
|
||||||
|
2match none
|
||||||
|
|
||||||
|
" remove cursorhold event for highlighting matching bracket
|
||||||
|
augroup LimpHighlight
|
||||||
|
au!
|
||||||
|
augroup END
|
||||||
|
|
||||||
|
let &ww = s:wwkeep
|
||||||
|
set nolz
|
||||||
|
endfun
|
||||||
|
|
||||||
|
|
||||||
|
" ---------------------------------------------------------------------
|
||||||
|
" LimpHighlight_handler: this routine actually performs the highlighting of {{{1
|
||||||
|
" the matching bracket.
|
||||||
|
fun! <SID>LimpHighlight_handler()
|
||||||
|
if mode() =~ '['."\<c-v>".'vV]'
|
||||||
|
" don't try to highlight matching/surrounding brackets while in
|
||||||
|
" visual-block mode
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
|
||||||
|
" save
|
||||||
|
let magickeep = &magic
|
||||||
|
let regdq = @"
|
||||||
|
let regunnamed = @@
|
||||||
|
let sokeep = &so
|
||||||
|
let sskeep = &ss
|
||||||
|
let sisokeep = &siso
|
||||||
|
let solkeep = &sol
|
||||||
|
let t_vbkeep = &t_vb
|
||||||
|
let vbkeep = &vb
|
||||||
|
silent! let regpaste = @*
|
||||||
|
|
||||||
|
" turn beep/visual flash off
|
||||||
|
set nosol vb t_vb= so=0 siso=0 ss=0 magic
|
||||||
|
|
||||||
|
" remove every other character from the mps option set
|
||||||
|
let mps = substitute(&mps,'\(.\).','\1','g')
|
||||||
|
|
||||||
|
" grab a copy of the character under the cursor into @0
|
||||||
|
silent! norm! yl
|
||||||
|
|
||||||
|
" if the character grabbed in @0 is in the mps option set, then highlight
|
||||||
|
" the matching character
|
||||||
|
if stridx(mps,@0) != -1
|
||||||
|
"------------------------------------------
|
||||||
|
" We are at a bracket character
|
||||||
|
"------------------------------------------
|
||||||
|
let curchr = @0
|
||||||
|
" determine match line, column.
|
||||||
|
" Restrict search to currently visible portion of window.
|
||||||
|
if &mps =~ curchr.':'
|
||||||
|
let stopline = line("w$")
|
||||||
|
let chrmatch = substitute(&mps,'^.*'.curchr.':\(.\).*$','\1','')
|
||||||
|
let [mtchline,mtchcol] = searchpairpos(escape(curchr,'[]'),'',escape(chrmatch,'[]'),'n','synIDattr(synID(line("."), col("."), 0), "name") =~? "string\\|comment"',stopline)
|
||||||
|
else
|
||||||
|
let stopline = line("w0")
|
||||||
|
let chrmatch = substitute(&mps,'^.*\(.\):'.curchr.'.*$','\1','')
|
||||||
|
let [mtchline,mtchcol] = searchpairpos(escape(chrmatch,'[]'),'',escape(curchr,'[]'),'bn','synIDattr(synID(line("."), col("."), 0), "name") =~? "string\\|comment"',stopline)
|
||||||
|
endif
|
||||||
|
|
||||||
|
if mtchline != 0 && mtchcol != 0
|
||||||
|
let mtchline2 = line('.')
|
||||||
|
let mtchcol2 = col('.')
|
||||||
|
let mtchline1 = mtchline
|
||||||
|
let mtchcol1 = mtchcol
|
||||||
|
|
||||||
|
call s:PerformMatch(mtchline1, mtchcol1, mtchline2, mtchcol2)
|
||||||
|
else
|
||||||
|
2match none
|
||||||
|
match none
|
||||||
|
endif
|
||||||
|
|
||||||
|
" if g:HiMtchBrkt_surround exists and is true, then highlight the surrounding brackets
|
||||||
|
"elseif exists("g:HiMtchBrkt_surround") && g:HiMtchBrkt_surround
|
||||||
|
else
|
||||||
|
"------------------------------------------
|
||||||
|
" We are inside brackets!
|
||||||
|
"------------------------------------------
|
||||||
|
let swp = Cursor_get()
|
||||||
|
let openers = '['.escape(substitute(&mps,':.,\=',"","g"),']').']'
|
||||||
|
let closers = '['.escape(substitute(&mps,',\=.:',"","g"),']').']'
|
||||||
|
call searchpair(openers,"",closers,'','synIDattr(synID(line("."), col("."), 0), "name") =~? "string\\|comment"')
|
||||||
|
silent! norm! yl
|
||||||
|
if stridx(mps,@0) != -1
|
||||||
|
let mtchline1 = line('.')
|
||||||
|
let mtchcol1 = virtcol('.')
|
||||||
|
keepj norm! %
|
||||||
|
let mtchline2 = line('.')
|
||||||
|
let mtchcol2 = virtcol('.')
|
||||||
|
call Cursor_set(swp)
|
||||||
|
|
||||||
|
call s:PerformMatch(mtchline1, mtchcol1, mtchline2, mtchcol2)
|
||||||
|
else
|
||||||
|
match none
|
||||||
|
2match none
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
" restore
|
||||||
|
let &magic = magickeep
|
||||||
|
let @" = regdq
|
||||||
|
let @@ = regunnamed
|
||||||
|
let &sol = solkeep
|
||||||
|
let &so = sokeep
|
||||||
|
let &siso = sisokeep
|
||||||
|
let &ss = sskeep
|
||||||
|
let &t_vb = t_vbkeep
|
||||||
|
let &vb = vbkeep
|
||||||
|
silent! let @* = regpaste
|
||||||
|
endfun
|
||||||
|
|
||||||
|
fun! s:PerformMatch(line1, col1, line2, col2)
|
||||||
|
let line1 = a:line1
|
||||||
|
let col1 = a:col1
|
||||||
|
let line2 = a:line2
|
||||||
|
let col2 = a:col2
|
||||||
|
|
||||||
|
if line1 == line2
|
||||||
|
" at a single line => sort points on columns
|
||||||
|
if col1 > col2
|
||||||
|
let tmp = col2
|
||||||
|
let col2 = col1
|
||||||
|
let col1 = tmp
|
||||||
|
let tmp = line2
|
||||||
|
let line2 = line1
|
||||||
|
let line1 = tmp
|
||||||
|
endif
|
||||||
|
exe '2match BracketsBlock /\%'.line1.'l\%>'.col1.'v\%<'.col2.'v/'
|
||||||
|
else
|
||||||
|
" at a single line => sort points on lines
|
||||||
|
if line1 > line2
|
||||||
|
let tmp = line2
|
||||||
|
let line2 = line1
|
||||||
|
let line1 = tmp
|
||||||
|
let tmp = col2
|
||||||
|
let col2 = col1
|
||||||
|
let col1 = tmp
|
||||||
|
endif
|
||||||
|
exe '2match BracketsBlock /\%'.line1.'l\%>'.col1.'v\|\%>'.line1.'l\%<'.line2.'l\|\%'.line2.'l\%<'.col2.'v/'
|
||||||
|
endif
|
||||||
|
|
||||||
|
exe 'match Brackets /\%'.line1.'l\%'.col1.'v\|\%'.line2.'l\%'.col2.'v/'
|
||||||
|
endfun
|
||||||
|
|
||||||
|
let &cpo = s:keepcpo
|
||||||
|
unlet s:keepcpo
|
||||||
|
|
||||||
|
|
||||||
96
dot_vim/ftplugin/lisp/limp/keys.vim
Normal file
96
dot_vim/ftplugin/lisp/limp/keys.vim
Normal file
@@ -0,0 +1,96 @@
|
|||||||
|
"
|
||||||
|
" limp/vim/keys.vim
|
||||||
|
"
|
||||||
|
" Description:
|
||||||
|
" Limp key bindings
|
||||||
|
"
|
||||||
|
" Authors:
|
||||||
|
" Mikael Jansson <mail@mikael.jansson.be>
|
||||||
|
"
|
||||||
|
|
||||||
|
nmap <buffer> <F12> <Plug>LimpBootConnectDisplay
|
||||||
|
nmap <buffer> <C-F12> <Plug>LimpDisconnect
|
||||||
|
nmap <buffer> <S-F12> <Plug>LimpShutdownLisp
|
||||||
|
|
||||||
|
" Eval Top: send top-level s-exp to Lisp
|
||||||
|
" Eval Current: send current s-exp to Lisp
|
||||||
|
" Eval Expression: send arbitrary code to Lisp
|
||||||
|
nmap <buffer> <LocalLeader>et <Plug>EvalTop
|
||||||
|
nmap <buffer> <LocalLeader>ec <Plug>EvalCurrent
|
||||||
|
nmap <buffer> <LocalLeader>ex <Plug>EvalExpression
|
||||||
|
|
||||||
|
" Eval Block: visual mode
|
||||||
|
vmap <buffer> <LocalLeader>et <Plug>EvalBlock
|
||||||
|
vmap <buffer> <LocalLeader>ec <Plug>EvalBlock
|
||||||
|
vmap <buffer> <LocalLeader>ex <Plug>EvalBlock
|
||||||
|
|
||||||
|
" SBCL Abort Reset: abort from the debugger
|
||||||
|
nmap <buffer> <LocalLeader>ar <Plug>AbortReset
|
||||||
|
|
||||||
|
" Abort Interrupt: send ^C to interpreter
|
||||||
|
nmap <buffer> <LocalLeader>ai <Plug>AbortInterrupt
|
||||||
|
|
||||||
|
" Test Current: copy current s-exp to test buffer
|
||||||
|
" Test Top: copy top s-exp to test buffer
|
||||||
|
nmap <buffer> <LocalLeader>tc <Plug>TestCurrent
|
||||||
|
nmap <buffer> <LocalLeader>tt <Plug>TestTop
|
||||||
|
|
||||||
|
" Load File: load /this/ file into Lisp
|
||||||
|
" Load Any File: load whichever version of this file (.lisp not given)
|
||||||
|
nmap <buffer> <LocalLeader>lf <Plug>LoadThisFile
|
||||||
|
nmap <buffer> <LocalLeader>la <Plug>LoadAnyFile
|
||||||
|
|
||||||
|
" Compile File: compile the current file
|
||||||
|
" Compile Load File: compile, then load the current file
|
||||||
|
nmap <buffer> <LocalLeader>cf <Plug>CompileFile
|
||||||
|
nmap <buffer> <LocalLeader>cl <Plug>CompileAndLoadFile
|
||||||
|
|
||||||
|
" Goto Test Buffer:
|
||||||
|
" Goto Split: split current buffer and goto test buffer
|
||||||
|
nmap <buffer> <LocalLeader>gt <Plug>GotoTestBuffer
|
||||||
|
nmap <buffer> <LocalLeader>gs <Plug>GotoTestBufferAndSplit
|
||||||
|
|
||||||
|
" Goto Last: return to last Lisp buffer
|
||||||
|
nmap <buffer> <LocalLeader>gl <Plug>GotoLastLispBuffer
|
||||||
|
|
||||||
|
" HyperSpec:
|
||||||
|
nmap <buffer> <LocalLeader>he <Plug>HyperspecExact
|
||||||
|
nmap <buffer> <LocalLeader>hp <Plug>HyperspecPrefix
|
||||||
|
nmap <buffer> <LocalLeader>hs <Plug>HyperspecSuffix
|
||||||
|
nmap <buffer> <LocalLeader>hg <Plug>HyperspecGrep
|
||||||
|
nmap <buffer> <LocalLeader>hi <Plug>HyperspecFirstLetterIndex
|
||||||
|
nmap <buffer> <LocalLeader>hI <Plug>HyperspecFullIndex
|
||||||
|
nmap <buffer> K <Plug>HyperspecExact
|
||||||
|
|
||||||
|
" Help Describe: ask Lisp about the current symbol
|
||||||
|
nmap <buffer> <LocalLeader>hd <Plug>HelpDescribe
|
||||||
|
|
||||||
|
" Mark Top: mark visual block
|
||||||
|
nmap <buffer> <LocalLeader>mt <Plug>MarkTop
|
||||||
|
|
||||||
|
" Format Current: reindent/format
|
||||||
|
" Format Top:
|
||||||
|
nmap <buffer> <LocalLeader>fc <Plug>FormatCurrent
|
||||||
|
nmap <buffer> <LocalLeader>ft <Plug>FormatTop
|
||||||
|
|
||||||
|
" Sexp Wrap: wrap the current form in a list
|
||||||
|
" Sexp Peel: peel a list off the current form
|
||||||
|
nmap <buffer> <LocalLeader>sw <Plug>SexpWrap
|
||||||
|
nmap <buffer> <LocalLeader>sp <Plug>SexpPeel
|
||||||
|
|
||||||
|
" Sexp Previous: navigate to previous s-exp
|
||||||
|
" Sexp Next: navigate to previous s-exp
|
||||||
|
nmap <buffer> ( <Plug>SexpPrevious
|
||||||
|
nmap <buffer> ) <Plug>SexpNext
|
||||||
|
|
||||||
|
" Sexp Move Back: swap this and previous s-exp
|
||||||
|
" Sexp Move Forward: swap this and next s-exp
|
||||||
|
nmap <buffer> { <Plug>SexpMoveBack
|
||||||
|
nmap <buffer> } <Plug>SexpMoveForward
|
||||||
|
|
||||||
|
" Sexp Comment: comment all the way from the top level
|
||||||
|
nmap <buffer> <LocalLeader>sc <Plug>SexpComment
|
||||||
|
|
||||||
|
" Sexp Comment Current: comment current form
|
||||||
|
nmap <buffer> <LocalLeader>sC <Plug>SexpCommentCurrent
|
||||||
|
|
||||||
53
dot_vim/ftplugin/lisp/limp/limp.vim
Normal file
53
dot_vim/ftplugin/lisp/limp/limp.vim
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
"
|
||||||
|
" limp/vim/limp.vim
|
||||||
|
"
|
||||||
|
" URL:
|
||||||
|
" http://mikael.jansson.be/hacking
|
||||||
|
"
|
||||||
|
" Description:
|
||||||
|
" Setup the Limp environment
|
||||||
|
"
|
||||||
|
" Version:
|
||||||
|
" 0.2
|
||||||
|
"
|
||||||
|
" Date:
|
||||||
|
" 2008-04-28
|
||||||
|
"
|
||||||
|
" Authors:
|
||||||
|
" Mikael Jansson <mail@mikael.jansson.be>
|
||||||
|
"
|
||||||
|
" Changelog:
|
||||||
|
" * 2008-04-28 by Mikael Jansson <mail@mikael.jansson.be>
|
||||||
|
" Only change colorscheme and nocompatible when not previously set.
|
||||||
|
"
|
||||||
|
" * 2008-04-25 by Mikael Jansson <mail@mikael.jansson.be>
|
||||||
|
" Catch-all key <F12> for Lisp boot, connect & display
|
||||||
|
"
|
||||||
|
" * 2008-04-20 by Mikael Jansson <mail@mikael.jansson.be>
|
||||||
|
" Initial version.
|
||||||
|
|
||||||
|
"-------------------------------------------------------------------
|
||||||
|
|
||||||
|
if exists("b:did_ftplugin")
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
let b:did_ftplugin = 1
|
||||||
|
|
||||||
|
"-------------------------------------------------------------------
|
||||||
|
" external dependencies
|
||||||
|
"-------------------------------------------------------------------
|
||||||
|
silent! runtime plugin/matchit.vim
|
||||||
|
|
||||||
|
"-------------------------------------------------------------------
|
||||||
|
" the Limp library
|
||||||
|
"-------------------------------------------------------------------
|
||||||
|
|
||||||
|
runtime ftplugin/lisp/limp/cursor.vim
|
||||||
|
runtime ftplugin/lisp/limp/highlight.vim
|
||||||
|
runtime ftplugin/lisp/limp/sexp.vim
|
||||||
|
runtime ftplugin/lisp/limp/bridge.vim
|
||||||
|
runtime ftplugin/lisp/limp/autoclose.vim
|
||||||
|
runtime ftplugin/lisp/limp/keys.vim
|
||||||
|
runtime ftplugin/lisp/limp/mode.vim
|
||||||
|
|
||||||
|
|
||||||
118
dot_vim/ftplugin/lisp/limp/mode.vim
Normal file
118
dot_vim/ftplugin/lisp/limp/mode.vim
Normal file
@@ -0,0 +1,118 @@
|
|||||||
|
"
|
||||||
|
" limp/vim/mode.vim
|
||||||
|
"
|
||||||
|
" URL:
|
||||||
|
" http://mikael.jansson.be
|
||||||
|
"
|
||||||
|
" Description:
|
||||||
|
" Lisp-mode specific functions
|
||||||
|
"
|
||||||
|
" Authors:
|
||||||
|
" Mikael Jansson <mail@mikael.jansson.be>
|
||||||
|
"
|
||||||
|
"Eval (say-hello 'mikael)
|
||||||
|
command! -buffer -nargs=* Eval silent call LimpBridge_send_to_lisp(<q-args>)
|
||||||
|
|
||||||
|
let b:listener_always_open_window=0
|
||||||
|
let b:listener_keep_open=0
|
||||||
|
|
||||||
|
let g:lisp_mode_active = 0
|
||||||
|
fun! LimpMode_start()
|
||||||
|
if g:lisp_mode_active
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
let g:lisp_mode_active = 1
|
||||||
|
"-------------------------------------------------------------------
|
||||||
|
" coloring
|
||||||
|
"-------------------------------------------------------------------
|
||||||
|
let g:lisp_rainbow=1
|
||||||
|
|
||||||
|
set t_Co=256
|
||||||
|
if !exists("g:colors_name")
|
||||||
|
colorscheme desert256
|
||||||
|
endif
|
||||||
|
|
||||||
|
hi Brackets ctermbg=53 ctermfg=white
|
||||||
|
hi BracketsBlock ctermbg=235 guibg=lightgray
|
||||||
|
hi StatusLine ctermbg=white ctermfg=160
|
||||||
|
hi StatusLineNC ctermbg=black ctermfg=gray
|
||||||
|
hi Pmenu ctermbg=53 ctermfg=255
|
||||||
|
hi PmenuSel ctermbg=255 ctermfg=53
|
||||||
|
|
||||||
|
"
|
||||||
|
" set all parens to gray
|
||||||
|
"
|
||||||
|
hi hlLevel0 ctermfg=238
|
||||||
|
hi hlLevel1 ctermfg=238
|
||||||
|
hi hlLevel2 ctermfg=238
|
||||||
|
hi hlLevel3 ctermfg=238
|
||||||
|
hi hlLevel4 ctermfg=238
|
||||||
|
hi hlLevel5 ctermfg=238
|
||||||
|
hi hlLevel6 ctermfg=238
|
||||||
|
hi hlLevel7 ctermfg=238
|
||||||
|
hi hlLevel8 ctermfg=238
|
||||||
|
hi hlLevel9 ctermfg=238
|
||||||
|
hi hlLevel10 ctermfg=238
|
||||||
|
hi hlLevel11 ctermfg=238
|
||||||
|
|
||||||
|
call LimpHighlight_start()
|
||||||
|
call AutoClose_start()
|
||||||
|
|
||||||
|
" for whatever reason, nocursorline isn't set after pressing F12... (i.e.,
|
||||||
|
" switching back to the buffer)
|
||||||
|
setlocal nocursorline
|
||||||
|
endfun
|
||||||
|
|
||||||
|
fun! LimpMode_stop()
|
||||||
|
let g:lisp_mode_active = 0
|
||||||
|
call LimpHighlight_stop()
|
||||||
|
call AutoClose_stop()
|
||||||
|
endfun
|
||||||
|
|
||||||
|
augroup LimpMode
|
||||||
|
au!
|
||||||
|
au BufEnter * :if &filetype == "lisp" | call LimpMode_start() | endif
|
||||||
|
au BufLeave * :if &filetype == "lisp" | call LimpMode_stop() | endif
|
||||||
|
augroup END
|
||||||
|
|
||||||
|
|
||||||
|
"-------------------------------------------------------------------
|
||||||
|
" init filetype plugin
|
||||||
|
"-------------------------------------------------------------------
|
||||||
|
syntax on
|
||||||
|
setlocal nocompatible nocursorline
|
||||||
|
setlocal lisp syntax=lisp
|
||||||
|
setlocal ls=2 bs=2 si et sw=2 ts=2 tw=0
|
||||||
|
setlocal statusline=%<%f\ \(%{LimpBridge_connection_status()}\)\ %h%m%r%=%-14.(%l,%c%V%)\ %P\ of\ %L\ \(%.45{getcwd()}\)
|
||||||
|
setlocal iskeyword=&,*,+,45,/,48-57,:,<,=,>,@,A-Z,a-z,_
|
||||||
|
setlocal cpoptions=-mp
|
||||||
|
setlocal foldmethod=marker foldmarker=(,) foldminlines=1
|
||||||
|
|
||||||
|
|
||||||
|
" This allows gf and :find to work. Fix path to your needs
|
||||||
|
setlocal suffixesadd=.lisp,cl path=/home/mikael/hacking/lisp/**
|
||||||
|
|
||||||
|
" This allows [d [i [D [I work across files if an ASDF buffer is opened
|
||||||
|
" If I used load, it would be there too.
|
||||||
|
setlocal include=(:file\
|
||||||
|
|
||||||
|
"-------------------------------------------------------------------
|
||||||
|
" reset to previous values
|
||||||
|
"-------------------------------------------------------------------
|
||||||
|
|
||||||
|
let s:save_cpo = &cpo
|
||||||
|
set cpo&vim
|
||||||
|
|
||||||
|
let b:undo_ftplugin = "setlocal syntax< lisp< ls< bs< si< et< sw< "
|
||||||
|
\ . "ts< tw< complete< nocursorline< nocompatible< statusline< iskeyword< "
|
||||||
|
\ . "cpoptions< foldmethod< foldmarker< foldminlines< "
|
||||||
|
\ . "suffixesadd< path< include< "
|
||||||
|
|
||||||
|
let &cpo = s:save_cpo
|
||||||
|
unlet s:save_cpo
|
||||||
|
|
||||||
|
|
||||||
|
"------------- boot!
|
||||||
|
|
||||||
|
call LimpMode_start()
|
||||||
|
|
||||||
308
dot_vim/ftplugin/lisp/limp/sexp.vim
Normal file
308
dot_vim/ftplugin/lisp/limp/sexp.vim
Normal file
@@ -0,0 +1,308 @@
|
|||||||
|
"
|
||||||
|
" limp/vim/sexp.vim
|
||||||
|
"
|
||||||
|
" URL:
|
||||||
|
" http://mikael.jansson.be/hacking
|
||||||
|
"
|
||||||
|
" Description:
|
||||||
|
" Things to help you out with s-exps.
|
||||||
|
"
|
||||||
|
" Version:
|
||||||
|
" 0.2
|
||||||
|
"
|
||||||
|
" Date:
|
||||||
|
" 2008-04-20
|
||||||
|
"
|
||||||
|
" Authors:
|
||||||
|
" Mikael Jansson <mail@mikael.jansson.be>
|
||||||
|
"
|
||||||
|
" Changelog:
|
||||||
|
" 2008-04-20
|
||||||
|
" * Initial version.
|
||||||
|
" * Based on ViLisp.vim by Larry Clapp <vim@theclapp.org>
|
||||||
|
|
||||||
|
" Mark Top: mark visual block
|
||||||
|
nnoremap <buffer> <Plug>MarkTop 99[(V%
|
||||||
|
|
||||||
|
" Format Current: reindent/format
|
||||||
|
" Format Top:
|
||||||
|
nnoremap <buffer> <Plug>FormatCurrent [(=%`'
|
||||||
|
nnoremap <buffer> <Plug>FormatTop 99[(=%`'
|
||||||
|
|
||||||
|
" Sexp Wrap: wrap the current form in a list
|
||||||
|
" Sexp Peel: peel a list off the current form
|
||||||
|
nnoremap <silent> <buffer> <Plug>SexpWrap :call Cursor_push()<CR>[(%a)<ESC>h%i(<ESC>:call Cursor_pop()<CR>
|
||||||
|
nnoremap <silent> <buffer> <Plug>SexpPeel :call Cursor_push()<CR>[(:call Cursor_push()<CR>%x:call Cursor_pop()<CR>x:call Cursor_pop()<CR>
|
||||||
|
|
||||||
|
" Sexp Previous: navigate to previous s-exp
|
||||||
|
" Sexp Next: navigate to previous s-exp
|
||||||
|
nnoremap <silent> <buffer> <Plug>SexpPrevious :call Sexp_Previous()<CR>
|
||||||
|
nnoremap <silent> <buffer> <Plug>SexpNext :call Sexp_Next()<CR>
|
||||||
|
|
||||||
|
" Sexp Move Back: swap this and previous s-exp
|
||||||
|
" Sexp Move Forward: swap this and next s-exp
|
||||||
|
nnoremap <silent> <buffer> <Plug>SexpMoveBack :call Sexp_MoveBack()<CR>
|
||||||
|
nnoremap <silent> <buffer> <Plug>SexpMoveForward :call Sexp_MoveForward()<CR>
|
||||||
|
|
||||||
|
" Sexp Comment: comment all the way from the top level
|
||||||
|
nnoremap <silent> <buffer> <Plug>SexpComment :call Cursor_push()<CR>99[(%a\|#<ESC>hh%i#\|<ESC>:call Cursor_pop()<CR>
|
||||||
|
|
||||||
|
" Sexp Comment Current: comment current form
|
||||||
|
nnoremap <silent> <buffer> <Plug>SexpCommentCurrent :call Cursor_push()<CR>[(%a\|#<ESC>hh%i#\|<ESC>:call Cursor_pop()<CR>
|
||||||
|
|
||||||
|
|
||||||
|
"-------------------------------------------------------------------
|
||||||
|
|
||||||
|
fun! Sexp_Next()
|
||||||
|
let [l, c] = Sexp_get_Next()
|
||||||
|
call cursor(l, c)
|
||||||
|
endfun
|
||||||
|
|
||||||
|
fun! Sexp_Previous()
|
||||||
|
let [l, c] = Sexp_get_Previous()
|
||||||
|
if l == 0 && c == 0
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
call cursor(l, c)
|
||||||
|
return
|
||||||
|
endfun
|
||||||
|
|
||||||
|
" return the position of the next s-exp
|
||||||
|
fun! Sexp_get_Next()
|
||||||
|
return searchpos('(', 'nW')
|
||||||
|
endfun
|
||||||
|
|
||||||
|
" return the position of the previous s-exp
|
||||||
|
fun! Sexp_get_Previous()
|
||||||
|
let p = getpos(".")
|
||||||
|
|
||||||
|
" If outside of *any* s-exps, move to the previous s-exp first.
|
||||||
|
let [l, c] = searchpairpos('(', '', ')', 'bnW')
|
||||||
|
if l == 0 && c == 0
|
||||||
|
call searchpos(')', 'Wb')
|
||||||
|
endif
|
||||||
|
|
||||||
|
" now, move to the start of this s-exp, wherever it may be.
|
||||||
|
let [l, c] = searchpos('(', 'Wnb')
|
||||||
|
|
||||||
|
call setpos(".", p)
|
||||||
|
|
||||||
|
return [l, c]
|
||||||
|
endfun
|
||||||
|
|
||||||
|
"XXX: MoveBack/MoveForward share much code
|
||||||
|
|
||||||
|
fun! Sexp_MoveBack()
|
||||||
|
" Inside an s-exp?
|
||||||
|
let [l, c] = searchpairpos('(', '', ')', 'bcnW')
|
||||||
|
if l == 0 || c == 0
|
||||||
|
" Nope,
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
silent! let regs = @*
|
||||||
|
|
||||||
|
" mark the start of this s-exp
|
||||||
|
silent! norm! yl
|
||||||
|
if @0 != "("
|
||||||
|
call Sexp_Previous()
|
||||||
|
endif
|
||||||
|
|
||||||
|
"
|
||||||
|
" Find out if the previous s-exp is the parent of the current
|
||||||
|
"
|
||||||
|
" This by searching to the previous s-exp, doing a % and checking either
|
||||||
|
" of the following conditions:
|
||||||
|
"
|
||||||
|
" * prev_line2 == this_line2 && prev_col2 > this_col2
|
||||||
|
" * prev_line2 > this_line2
|
||||||
|
"
|
||||||
|
" where prev_line2/prev_col2 = the ) of the previous match, and
|
||||||
|
" this_line2/this_col2 = the ) of the current s-exp.
|
||||||
|
"
|
||||||
|
|
||||||
|
" so we can get back.
|
||||||
|
silent! norm! ma
|
||||||
|
let [b, this_line1, this_col1, o] = getpos('.')
|
||||||
|
|
||||||
|
" where does the *current* s-exp end?
|
||||||
|
silent! norm! %
|
||||||
|
let [b, this_line2, this_col2, o] = getpos('.')
|
||||||
|
silent! norm! %
|
||||||
|
|
||||||
|
" where does the previous s-exp end?
|
||||||
|
call Sexp_Previous()
|
||||||
|
silent! norm! mb
|
||||||
|
|
||||||
|
let [b, prev_line1, prev_col1, o] = getpos('.')
|
||||||
|
silent! norm! %
|
||||||
|
let [b, prev_line2, prev_col2, o] = getpos('.')
|
||||||
|
|
||||||
|
if (prev_line2 == this_line2 && prev_col2 > this_col2) || (prev_line2 > this_line2)
|
||||||
|
" For now, just do nothing
|
||||||
|
echom "Error: Trying to transpose s-exp backwards with parent."
|
||||||
|
silent! norm! `a
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
" --------------------------------------------------------
|
||||||
|
|
||||||
|
" get the s-exps
|
||||||
|
silent! norm! `a
|
||||||
|
silent! norm! "ayab
|
||||||
|
silent! norm! `b
|
||||||
|
silent! norm! "byab
|
||||||
|
|
||||||
|
" copy and replace current s-exp with whitespace
|
||||||
|
let @c = Fill(" ", len(@b))
|
||||||
|
let @d = Fill(" ", len(@a))
|
||||||
|
|
||||||
|
silent! norm! `a"_dab
|
||||||
|
silent! norm! `a"cP
|
||||||
|
|
||||||
|
silent! norm! `b"_dab
|
||||||
|
silent! norm! `b"dP
|
||||||
|
|
||||||
|
if this_line1 == prev_line1
|
||||||
|
|
||||||
|
let diff = len(@a) - len(@b)
|
||||||
|
if diff > 0
|
||||||
|
let movement = ''.diff.'l'
|
||||||
|
elseif diff < 0
|
||||||
|
let movement = ''.(-diff).'h'
|
||||||
|
else
|
||||||
|
let movement = ''
|
||||||
|
endif
|
||||||
|
|
||||||
|
silent! norm! `b"aPl
|
||||||
|
silent! exe 'norm! '.len(@a).'x'
|
||||||
|
|
||||||
|
silent! exe 'norm! `a'.movement.'"bPl'
|
||||||
|
silent! exe 'norm! '.len(@b).'x'
|
||||||
|
|
||||||
|
silent! norm! `b
|
||||||
|
else
|
||||||
|
" different lines, so a simple paste will do
|
||||||
|
|
||||||
|
silent! norm! `a"bP
|
||||||
|
silent! exe 'norm! l'.len(@a).'x'
|
||||||
|
silent! norm! `b"aP
|
||||||
|
silent! exe 'norm! l'.len(@b).'x'
|
||||||
|
silent! norm! `b
|
||||||
|
endif
|
||||||
|
|
||||||
|
silent! let @* = regs
|
||||||
|
endfun
|
||||||
|
|
||||||
|
fun! Sexp_MoveForward()
|
||||||
|
" Inside an s-exp?
|
||||||
|
let [l, c] = searchpairpos('(', '', ')', 'bcnW')
|
||||||
|
if l == 0 || c == 0
|
||||||
|
" Nope,
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
silent! let regs = @*
|
||||||
|
|
||||||
|
" mark the start of this s-exp
|
||||||
|
silent! norm! yl
|
||||||
|
if @0 != "("
|
||||||
|
call Sexp_Previous()
|
||||||
|
endif
|
||||||
|
|
||||||
|
"
|
||||||
|
" Find out if the next s-exp is the parent of the current.
|
||||||
|
"
|
||||||
|
" Search for the next ')', then see where the matching '(' ends.
|
||||||
|
" Check for any of the following conditions.
|
||||||
|
"
|
||||||
|
" * prev_line1 == this_line1 && prev_col1 < this_col1
|
||||||
|
" * prev_line1 < this_line1
|
||||||
|
"
|
||||||
|
" where prev_line1/prev_col1 = the ( of the previous match, and
|
||||||
|
" this_line1/this_col1 = the ( of the current s-exp.
|
||||||
|
"
|
||||||
|
|
||||||
|
" so we can get back.
|
||||||
|
silent! norm! ma
|
||||||
|
let [b, this_line1, this_col1, o] = getpos('.')
|
||||||
|
|
||||||
|
" where does the *current* s-exp end?
|
||||||
|
silent! norm! %
|
||||||
|
let [b, this_line2, this_col2, o] = getpos('.')
|
||||||
|
|
||||||
|
" where does the next s-exp end?
|
||||||
|
call search(')', 'W')
|
||||||
|
|
||||||
|
let [b, prev_line2, prev_col2, o] = getpos('.')
|
||||||
|
silent! norm! %
|
||||||
|
|
||||||
|
silent! norm! mb
|
||||||
|
let [b, prev_line1, prev_col1, o] = getpos('.')
|
||||||
|
|
||||||
|
if (prev_line1 == this_line1 && prev_col1 < this_col1) || (prev_line1 < this_line1)
|
||||||
|
" For now, just do nothing
|
||||||
|
echom "Error: Trying to transpose s-exp forward with parent."
|
||||||
|
silent! norm! `a
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
" --------------------------------------------------------
|
||||||
|
|
||||||
|
" get the s-exps
|
||||||
|
silent! norm! `a
|
||||||
|
silent! norm! "ayab
|
||||||
|
silent! norm! `b
|
||||||
|
silent! norm! "byab
|
||||||
|
|
||||||
|
" copy and replace current s-exp with whitespace
|
||||||
|
let @c = Fill(" ", len(@b))
|
||||||
|
let @d = Fill(" ", len(@a))
|
||||||
|
|
||||||
|
silent! norm! `b"_dab
|
||||||
|
silent! norm! `b"dP
|
||||||
|
|
||||||
|
silent! norm! `a"_dab
|
||||||
|
silent! norm! `a"cP
|
||||||
|
|
||||||
|
if this_line1 == prev_line1
|
||||||
|
|
||||||
|
let diff = len(@a) - len(@b)
|
||||||
|
if diff > 0
|
||||||
|
let movement = ''.diff.'h'
|
||||||
|
elseif diff < 0
|
||||||
|
let movement = ''.(-diff).'l'
|
||||||
|
else
|
||||||
|
let movement = ''
|
||||||
|
endif
|
||||||
|
|
||||||
|
silent! norm! `a"bPl
|
||||||
|
silent! exe 'norm! '.len(@b).'x'
|
||||||
|
|
||||||
|
silent! exe 'norm! `b'.movement.'"aPl'
|
||||||
|
silent! exe 'norm! '.len(@a).'x'
|
||||||
|
|
||||||
|
silent! exe 'norm! `b'.movement
|
||||||
|
else
|
||||||
|
" different lines, so a simple paste will do
|
||||||
|
|
||||||
|
silent! norm! `a"bP
|
||||||
|
silent! exe 'norm! l'.len(@a).'x'
|
||||||
|
silent! norm! `b"aP
|
||||||
|
silent! exe 'norm! l'.len(@b).'x'
|
||||||
|
silent! norm! `b
|
||||||
|
endif
|
||||||
|
|
||||||
|
silent! let @* = regs
|
||||||
|
endfun
|
||||||
|
|
||||||
|
fun! Fill(c, n)
|
||||||
|
let s = ""
|
||||||
|
let n = a:n
|
||||||
|
while n > 0
|
||||||
|
let s = s.a:c
|
||||||
|
let n = n-1
|
||||||
|
endwhile
|
||||||
|
return s
|
||||||
|
endfun
|
||||||
|
|
||||||
1339
dot_vim/ftplugin/lisp/limp/thesaurus
Normal file
1339
dot_vim/ftplugin/lisp/limp/thesaurus
Normal file
File diff suppressed because it is too large
Load Diff
5
dot_vim/gvimrc
Normal file
5
dot_vim/gvimrc
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
runtime vimrc
|
||||||
|
|
||||||
|
set gfn=Source\ Code\ Pro\ 9
|
||||||
|
set go-=T
|
||||||
|
|
||||||
43
dot_vim/indent/cpp.vim
Normal file
43
dot_vim/indent/cpp.vim
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
" Vim indent file
|
||||||
|
" Language: C++
|
||||||
|
" Maintainer: Charles Banas <greyfade@greyfade.org>
|
||||||
|
" Last Change: 2010 May 27
|
||||||
|
" Version: 1.0.1
|
||||||
|
|
||||||
|
if exists("b:did_indent")
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
let b:did_indent = 1
|
||||||
|
|
||||||
|
function! GreyfadeCppIndent()
|
||||||
|
let l:cline_num = line('.')
|
||||||
|
let l:pline_num = prevnonblank(l:cline_num - 1)
|
||||||
|
let l:pline = getline(l:pline_num)
|
||||||
|
while l:pline =~# '\(^\s*{\s*\|^\s*//\|^\s*/\*\|\*/\s*$\)'
|
||||||
|
let l:pline_num = prevnonblank(l:pline_num - 1)
|
||||||
|
let l:pline = getline(l:pline_num)
|
||||||
|
endwhile
|
||||||
|
let l:retv = cindent('.')
|
||||||
|
if l:pline =~# '^\s*template.*'
|
||||||
|
let l:retv = cindent(l:pline_num)
|
||||||
|
elseif l:pline =~# '^\s*namespace.*'
|
||||||
|
let l:retv = 0
|
||||||
|
endif
|
||||||
|
|
||||||
|
return l:retv
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
setlocal shiftwidth=4
|
||||||
|
setlocal tabstop=4
|
||||||
|
setlocal softtabstop=4
|
||||||
|
setlocal noexpandtab
|
||||||
|
setlocal textwidth=80
|
||||||
|
setlocal nowrap
|
||||||
|
|
||||||
|
setlocal cindent
|
||||||
|
setlocal cinoptions=l1,g0,t0,i6,+6,(0,w1,W6
|
||||||
|
|
||||||
|
setlocal indentexpr=GreyfadeCppIndent()
|
||||||
|
|
||||||
|
let b:undo_indent = "setl sw< ts< sts< et< tw< wrap< cin< cino< inde<"
|
||||||
|
|
||||||
1
dot_vim/init.vim
Normal file
1
dot_vim/init.vim
Normal file
@@ -0,0 +1 @@
|
|||||||
|
runtime vimrc
|
||||||
27
dot_vim/plugged/ale/Dockerfile
Normal file
27
dot_vim/plugged/ale/Dockerfile
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
FROM testbed/vim:24
|
||||||
|
|
||||||
|
RUN install_vim -tag v8.0.0027 -build \
|
||||||
|
-tag v9.0.0297 -build \
|
||||||
|
-tag neovim:v0.2.0 -build \
|
||||||
|
-tag neovim:v0.8.0 -build
|
||||||
|
|
||||||
|
ENV PACKAGES="\
|
||||||
|
bash \
|
||||||
|
git \
|
||||||
|
python2 \
|
||||||
|
python3 \
|
||||||
|
py3-pip \
|
||||||
|
grep \
|
||||||
|
sed \
|
||||||
|
"
|
||||||
|
RUN apk --update add $PACKAGES && \
|
||||||
|
rm -rf /var/cache/apk/* /tmp/* /var/tmp/*
|
||||||
|
|
||||||
|
RUN pip install vim-vint==0.3.21
|
||||||
|
|
||||||
|
RUN git clone https://github.com/junegunn/vader.vim vader && \
|
||||||
|
cd vader && git checkout c6243dd81c98350df4dec608fa972df98fa2a3af
|
||||||
|
|
||||||
|
ARG GIT_VERSION
|
||||||
|
LABEL Version=${GIT_VERSION}
|
||||||
|
LABEL Name=denseanalysis/ale
|
||||||
22
dot_vim/plugged/ale/LICENSE
Normal file
22
dot_vim/plugged/ale/LICENSE
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
Copyright (c) 2016-2023, Dense Analysis
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||||
|
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
963
dot_vim/plugged/ale/README.md
Normal file
963
dot_vim/plugged/ale/README.md
Normal file
@@ -0,0 +1,963 @@
|
|||||||
|
# Asynchronous Lint Engine [](https://github.com/dense-analysis/ale/actions?query=event%3Apush+workflow%3ACI+branch%3Amaster++) [](https://ci.appveyor.com/project/dense-analysis/ale) [](https://discord.gg/5zFD6pQxDk)
|
||||||
|
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
ALE (Asynchronous Lint Engine) is a plugin providing linting (syntax checking
|
||||||
|
and semantic errors) in NeoVim 0.2.0+ and Vim 8 while you edit your text files,
|
||||||
|
and acts as a Vim [Language Server Protocol](https://langserver.org/) client.
|
||||||
|
|
||||||
|
<video autoplay="true" muted="true" loop="true" controls="false" src="https://user-images.githubusercontent.com/3518142/210141215-8f2ff760-6a87-4704-a11e-c109b8e9ec41.mp4" title="An example showing what ALE can do."></video>
|
||||||
|
|
||||||
|
ALE makes use of NeoVim and Vim 8 job control functions and timers to
|
||||||
|
run linters on the contents of text buffers and return errors as
|
||||||
|
text is changed in Vim. This allows for displaying warnings and
|
||||||
|
errors in files being edited in Vim before files have been saved
|
||||||
|
back to a filesystem.
|
||||||
|
|
||||||
|
In other words, this plugin allows you to lint while you type.
|
||||||
|
|
||||||
|
ALE offers support for fixing code with command line tools in a non-blocking
|
||||||
|
manner with the `:ALEFix` feature, supporting tools in many languages, like
|
||||||
|
`prettier`, `eslint`, `autopep8`, and more.
|
||||||
|
|
||||||
|
ALE acts as a "language client" to support a variety of Language Server Protocol
|
||||||
|
features, including:
|
||||||
|
|
||||||
|
* Diagnostics (via Language Server Protocol linters)
|
||||||
|
* Go To Definition (`:ALEGoToDefinition`)
|
||||||
|
* Completion (Built in completion support, or with Deoplete)
|
||||||
|
* Finding references (`:ALEFindReferences`)
|
||||||
|
* Hover information (`:ALEHover`)
|
||||||
|
* Symbol search (`:ALESymbolSearch`)
|
||||||
|
|
||||||
|
If you don't care about Language Server Protocol, ALE won't load any of the code
|
||||||
|
for working with it unless needed. One of ALE's general missions is that you
|
||||||
|
won't pay for the features that you don't use.
|
||||||
|
|
||||||
|
**Help Wanted:** If you would like to help maintain this plugin by managing the
|
||||||
|
many issues and pull requests that are submitted, please send the author an
|
||||||
|
email at [dev@w0rp.com](mailto:dev@w0rp.com?subject=Helping%20with%20ALE).
|
||||||
|
|
||||||
|
If you enjoy this plugin, feel free to contribute or check out the author's
|
||||||
|
other content at [w0rp.com](https://w0rp.com).
|
||||||
|
|
||||||
|
## Table of Contents
|
||||||
|
|
||||||
|
1. [Supported Languages and Tools](#supported-languages)
|
||||||
|
2. [Usage](#usage)
|
||||||
|
1. [Linting](#usage-linting)
|
||||||
|
2. [Fixing](#usage-fixing)
|
||||||
|
3. [Completion](#usage-completion)
|
||||||
|
4. [Go To Definition](#usage-go-to-definition)
|
||||||
|
5. [Find References](#usage-find-references)
|
||||||
|
6. [Hovering](#usage-hover)
|
||||||
|
7. [Symbol Search](#usage-symbol-search)
|
||||||
|
8. [Refactoring: Rename, Actions](#usage-refactoring)
|
||||||
|
3. [Installation](#installation)
|
||||||
|
1. [Installation with Vim package management](#standard-installation)
|
||||||
|
2. [Installation with Pathogen](#installation-with-pathogen)
|
||||||
|
3. [Installation with Vundle](#installation-with-vundle)
|
||||||
|
4. [Installation with Vim-Plug](#installation-with-vim-plug)
|
||||||
|
4. [Contributing](#contributing)
|
||||||
|
5. [FAQ](#faq)
|
||||||
|
1. [How do I disable particular linters?](#faq-disable-linters)
|
||||||
|
2. [How can I see what ALE has configured for the current file?](#faq-get-info)
|
||||||
|
3. [How can I use ALE and coc.nvim together?](#faq-coc-nvim)
|
||||||
|
4. [How can I keep the sign gutter open?](#faq-keep-signs)
|
||||||
|
5. [How can I change the signs ALE uses?](#faq-change-signs)
|
||||||
|
6. [How can I change or disable the highlights ALE uses?](#faq-change-highlights)
|
||||||
|
7. [How can I show errors or warnings in my statusline?](#faq-statusline)
|
||||||
|
8. [How can I show errors or warnings in my lightline?](#faq-lightline)
|
||||||
|
9. [How can I change the format for echo messages?](#faq-echo-format)
|
||||||
|
10. [How can I execute some code when ALE starts or stops linting?](#faq-autocmd)
|
||||||
|
11. [How can I navigate between errors quickly?](#faq-navigation)
|
||||||
|
12. [How can I run linters only when I save files?](#faq-lint-on-save)
|
||||||
|
13. [How can I use the quickfix list instead of the loclist?](#faq-quickfix)
|
||||||
|
14. [How can I check JSX files with both stylelint and eslint?](#faq-jsx-stylelint-eslint)
|
||||||
|
15. [How can I check Vue files with ESLint?](#faq-vue-eslint)
|
||||||
|
16. [Will this plugin eat all of my laptop battery power?](#faq-my-battery-is-sad)
|
||||||
|
17. [How can I configure my C or C++ project?](#faq-c-configuration)
|
||||||
|
18. [How can I configure ALE differently for different buffers?](#faq-buffer-configuration)
|
||||||
|
19. [How can I configure the height of the list in which ALE displays errors?](#faq-list-window-height)
|
||||||
|
20. [How can I run linters or fixers via Docker or a VM?](#faq-vm)
|
||||||
|
21. [How can I change the borders for floating preview windows?](#faq-window-borders)
|
||||||
|
22. [How can I use ALE and vim-lsp together?](#faq-vim-lsp)
|
||||||
|
|
||||||
|
<a name="supported-languages"></a>
|
||||||
|
|
||||||
|
## 1. Supported Languages and Tools
|
||||||
|
|
||||||
|
ALE supports a wide variety of languages and tools. See the
|
||||||
|
[full list](supported-tools.md) in the
|
||||||
|
[Supported Languages and Tools](supported-tools.md) page.
|
||||||
|
|
||||||
|
<a name="usage"></a>
|
||||||
|
|
||||||
|
## 2. Usage
|
||||||
|
|
||||||
|
<a name="usage-linting"></a>
|
||||||
|
|
||||||
|
### 2.i Linting
|
||||||
|
|
||||||
|
Once this plugin is installed, while editing your files in supported
|
||||||
|
languages and tools which have been correctly installed,
|
||||||
|
this plugin will send the contents of your text buffers to a variety of
|
||||||
|
programs for checking the syntax and semantics of your programs. By default,
|
||||||
|
linters will be re-run in the background to check your syntax when you open
|
||||||
|
new buffers or as you make edits to your files.
|
||||||
|
|
||||||
|
The behavior of linting can be configured with a variety of options,
|
||||||
|
documented in [the Vim help file](doc/ale.txt). For more information on the
|
||||||
|
options ALE offers, consult `:help ale-options` for global options and `:help
|
||||||
|
ale-integration-options` for options specified to particular linters.
|
||||||
|
|
||||||
|
<a name="usage-fixing"></a>
|
||||||
|
|
||||||
|
### 2.ii Fixing
|
||||||
|
|
||||||
|
ALE can fix files with the `ALEFix` command. Functions need to be configured
|
||||||
|
either in each buffer with a `b:ale_fixers`, or globally with `g:ale_fixers`.
|
||||||
|
|
||||||
|
The recommended way to configure fixers is to define a List in an ftplugin file.
|
||||||
|
|
||||||
|
```vim
|
||||||
|
" In ~/.vim/ftplugin/javascript.vim, or somewhere similar.
|
||||||
|
|
||||||
|
" Fix files with prettier, and then ESLint.
|
||||||
|
let b:ale_fixers = ['prettier', 'eslint']
|
||||||
|
" Equivalent to the above.
|
||||||
|
let b:ale_fixers = {'javascript': ['prettier', 'eslint']}
|
||||||
|
```
|
||||||
|
|
||||||
|
You can also configure your fixers from vimrc using `g:ale_fixers`, before or
|
||||||
|
after ALE has been loaded.
|
||||||
|
|
||||||
|
A `*` in place of the filetype will apply a List of fixers to all files which
|
||||||
|
do not match some filetype in the Dictionary.
|
||||||
|
|
||||||
|
Note that using a plain List for `g:ale_fixers` is not supported.
|
||||||
|
|
||||||
|
```vim
|
||||||
|
" In ~/.vim/vimrc, or somewhere similar.
|
||||||
|
let g:ale_fixers = {
|
||||||
|
\ '*': ['remove_trailing_lines', 'trim_whitespace'],
|
||||||
|
\ 'javascript': ['eslint'],
|
||||||
|
\}
|
||||||
|
```
|
||||||
|
|
||||||
|
If you want to automatically fix files when you save them, you need to turn
|
||||||
|
a setting on in vimrc.
|
||||||
|
|
||||||
|
```vim
|
||||||
|
" Set this variable to 1 to fix files when you save them.
|
||||||
|
let g:ale_fix_on_save = 1
|
||||||
|
```
|
||||||
|
|
||||||
|
The `:ALEFixSuggest` command will suggest some supported tools for fixing code.
|
||||||
|
Both `g:ale_fixers` and `b:ale_fixers` can also accept functions, including
|
||||||
|
lambda functions, as fixers, for fixing files with custom tools.
|
||||||
|
|
||||||
|
See `:help ale-fix` for complete information on how to fix files with ALE.
|
||||||
|
|
||||||
|
<a name="usage-completion"></a>
|
||||||
|
|
||||||
|
### 2.iii Completion
|
||||||
|
|
||||||
|
ALE offers some support for completion via hijacking of omnicompletion while you
|
||||||
|
type. All of ALE's completion information must come from Language Server
|
||||||
|
Protocol linters, or from `tsserver` for TypeScript.
|
||||||
|
|
||||||
|
ALE integrates with [Deoplete](https://github.com/Shougo/deoplete.nvim) as a
|
||||||
|
completion source, named `'ale'`. You can configure Deoplete to only use ALE as
|
||||||
|
the source of completion information, or mix it with other sources.
|
||||||
|
|
||||||
|
```vim
|
||||||
|
" Use ALE and also some plugin 'foobar' as completion sources for all code.
|
||||||
|
call deoplete#custom#option('sources', {
|
||||||
|
\ '_': ['ale', 'foobar'],
|
||||||
|
\})
|
||||||
|
```
|
||||||
|
|
||||||
|
ALE also offers its own automatic completion support, which does not require any
|
||||||
|
other plugins, and can be enabled by changing a setting before ALE is loaded.
|
||||||
|
|
||||||
|
```vim
|
||||||
|
" Enable completion where available.
|
||||||
|
" This setting must be set before ALE is loaded.
|
||||||
|
"
|
||||||
|
" You should not turn this setting on if you wish to use ALE as a completion
|
||||||
|
" source for other completion plugins, like Deoplete.
|
||||||
|
let g:ale_completion_enabled = 1
|
||||||
|
```
|
||||||
|
|
||||||
|
ALE provides an omni-completion function you can use for triggering
|
||||||
|
completion manually with `<C-x><C-o>`.
|
||||||
|
|
||||||
|
```vim
|
||||||
|
set omnifunc=ale#completion#OmniFunc
|
||||||
|
```
|
||||||
|
|
||||||
|
ALE supports automatic imports from external modules. This behavior is enabled
|
||||||
|
by default and can be disabled by setting:
|
||||||
|
|
||||||
|
```vim
|
||||||
|
let g:ale_completion_autoimport = 0
|
||||||
|
```
|
||||||
|
|
||||||
|
Note that disabling auto import can result in missing completion items from some
|
||||||
|
LSP servers (e.g. eclipselsp). See `:help ale-completion` for more information.
|
||||||
|
|
||||||
|
<a name="usage-go-to-definition"></a>
|
||||||
|
|
||||||
|
### 2.iv Go To Definition
|
||||||
|
|
||||||
|
ALE supports jumping to the definition of words under your cursor with the
|
||||||
|
`:ALEGoToDefinition` command using any enabled Language Server Protocol linters
|
||||||
|
and `tsserver`.
|
||||||
|
|
||||||
|
See `:help ale-go-to-definition` for more information.
|
||||||
|
|
||||||
|
<a name="usage-find-references"></a>
|
||||||
|
|
||||||
|
### 2.v Find References
|
||||||
|
|
||||||
|
ALE supports finding references for words under your cursor with the
|
||||||
|
`:ALEFindReferences` command using any enabled Language Server Protocol linters
|
||||||
|
and `tsserver`.
|
||||||
|
|
||||||
|
See `:help ale-find-references` for more information.
|
||||||
|
|
||||||
|
<a name="usage-hover"></a>
|
||||||
|
|
||||||
|
### 2.vi Hovering
|
||||||
|
|
||||||
|
ALE supports "hover" information for printing brief information about symbols at
|
||||||
|
the cursor taken from Language Server Protocol linters and `tsserver` with the
|
||||||
|
`ALEHover` command.
|
||||||
|
|
||||||
|
Truncated information will be displayed when the cursor rests on a symbol by
|
||||||
|
default, as long as there are no problems on the same line.
|
||||||
|
|
||||||
|
The information can be displayed in a `balloon` tooltip in Vim or GVim by
|
||||||
|
hovering your mouse over symbols. Mouse hovering is enabled by default in GVim,
|
||||||
|
and needs to be configured for Vim 8.1+ in terminals.
|
||||||
|
|
||||||
|
See `:help ale-hover` for more information.
|
||||||
|
|
||||||
|
<a name="usage-symbol-search"></a>
|
||||||
|
|
||||||
|
### 2.vii Symbol Search
|
||||||
|
|
||||||
|
ALE supports searching for workspace symbols via Language Server Protocol
|
||||||
|
linters with the `ALESymbolSearch` command.
|
||||||
|
|
||||||
|
Search queries can be performed to find functions, types, and more which are
|
||||||
|
similar to a given query string.
|
||||||
|
|
||||||
|
See `:help ale-symbol-search` for more information.
|
||||||
|
|
||||||
|
<a name="usage-refactoring"></a>
|
||||||
|
|
||||||
|
### 2.viii Refactoring: Rename, Actions
|
||||||
|
|
||||||
|
ALE supports renaming symbols in symbols in code such as variables or class
|
||||||
|
names with the `ALERename` command.
|
||||||
|
|
||||||
|
`ALEFileRename` will rename file and fix import paths (tsserver
|
||||||
|
only).
|
||||||
|
|
||||||
|
`ALECodeAction` will execute actions on the cursor or applied to a visual
|
||||||
|
range selection, such as automatically fixing errors.
|
||||||
|
|
||||||
|
See `:help ale-refactor` for more information.
|
||||||
|
|
||||||
|
<a name="installation"></a>
|
||||||
|
|
||||||
|
## 3. Installation
|
||||||
|
|
||||||
|
To install this plugin, you should use one of the following methods.
|
||||||
|
For Windows users, replace usage of the Unix `~/.vim` directory with
|
||||||
|
`%USERPROFILE%\vimfiles`, or another directory if you have configured
|
||||||
|
Vim differently. On Windows, your `~/.vimrc` file will be similarly
|
||||||
|
stored in `%USERPROFILE%\_vimrc`.
|
||||||
|
|
||||||
|
<a name="standard-installation"></a>
|
||||||
|
|
||||||
|
### 3.i. Installation with Vim package management
|
||||||
|
|
||||||
|
In Vim 8 and NeoVim, you can install plugins easily without needing to use
|
||||||
|
any other tools. Simply clone the plugin into your `pack` directory.
|
||||||
|
|
||||||
|
#### Vim 8 on Unix
|
||||||
|
|
||||||
|
```bash
|
||||||
|
mkdir -p ~/.vim/pack/git-plugins/start
|
||||||
|
git clone --depth 1 https://github.com/dense-analysis/ale.git ~/.vim/pack/git-plugins/start/ale
|
||||||
|
```
|
||||||
|
|
||||||
|
#### NeoVim on Unix
|
||||||
|
|
||||||
|
```bash
|
||||||
|
mkdir -p ~/.local/share/nvim/site/pack/git-plugins/start
|
||||||
|
git clone --depth 1 https://github.com/dense-analysis/ale.git ~/.local/share/nvim/site/pack/git-plugins/start/ale
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Vim 8 on Windows
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Run these commands in the "Git for Windows" Bash terminal
|
||||||
|
mkdir -p ~/vimfiles/pack/git-plugins/start
|
||||||
|
git clone --depth 1 https://github.com/dense-analysis/ale.git ~/vimfiles/pack/git-plugins/start/ale
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Generating Vim help files
|
||||||
|
|
||||||
|
You can add the following line to your vimrc files to generate documentation
|
||||||
|
tags automatically, if you don't have something similar already, so you can use
|
||||||
|
the `:help` command to consult ALE's online documentation:
|
||||||
|
|
||||||
|
```vim
|
||||||
|
" Put these lines at the very end of your vimrc file.
|
||||||
|
|
||||||
|
" Load all plugins now.
|
||||||
|
" Plugins need to be added to runtimepath before helptags can be generated.
|
||||||
|
packloadall
|
||||||
|
" Load all of the helptags now, after plugins have been loaded.
|
||||||
|
" All messages and errors will be ignored.
|
||||||
|
silent! helptags ALL
|
||||||
|
```
|
||||||
|
|
||||||
|
<a name="installation-with-pathogen"></a>
|
||||||
|
|
||||||
|
### 3.ii. Installation with Pathogen
|
||||||
|
|
||||||
|
To install this module with [Pathogen](https://github.com/tpope/vim-pathogen),
|
||||||
|
you should clone this repository to your bundle directory, and ensure
|
||||||
|
you have the line `execute pathogen#infect()` in your `~/.vimrc` file.
|
||||||
|
You can run the following commands in your terminal to do so:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd ~/.vim/bundle
|
||||||
|
git clone https://github.com/dense-analysis/ale.git
|
||||||
|
```
|
||||||
|
|
||||||
|
<a name="installation-with-vundle"></a>
|
||||||
|
|
||||||
|
### 3.iii. Installation with Vundle
|
||||||
|
|
||||||
|
You can install this plugin using [Vundle](https://github.com/VundleVim/Vundle.vim)
|
||||||
|
by adding the GitHub path for this repository to your `~/.vimrc`:
|
||||||
|
|
||||||
|
```vim
|
||||||
|
Plugin 'dense-analysis/ale'
|
||||||
|
```
|
||||||
|
|
||||||
|
Then run the command `:PluginInstall` in Vim.
|
||||||
|
|
||||||
|
See the Vundle documentation for more information.
|
||||||
|
|
||||||
|
<a name="installation-with-vim-plug"></a>
|
||||||
|
|
||||||
|
### 3.iv. Installation with Vim-Plug
|
||||||
|
|
||||||
|
You can install this plugin using [Vim-Plug](https://github.com/junegunn/vim-plug)
|
||||||
|
by adding the GitHub path for this repository to your `~/.vimrc`:
|
||||||
|
|
||||||
|
```vim
|
||||||
|
Plug 'dense-analysis/ale'
|
||||||
|
```
|
||||||
|
|
||||||
|
Then run the command `:PlugInstall` in Vim.
|
||||||
|
|
||||||
|
See the Vim-Plug documentation for more information.
|
||||||
|
|
||||||
|
<a name="contributing"></a>
|
||||||
|
|
||||||
|
## 4. Contributing
|
||||||
|
|
||||||
|
If you would like to see support for more languages and tools, please
|
||||||
|
[create an issue](https://github.com/dense-analysis/ale/issues)
|
||||||
|
or [create a pull request](https://github.com/dense-analysis/ale/pulls).
|
||||||
|
If your tool can read from stdin or you have code to suggest which is good,
|
||||||
|
support can be happily added for it.
|
||||||
|
|
||||||
|
If you are interested in the general direction of the project, check out the
|
||||||
|
[wiki home page](https://github.com/dense-analysis/ale/wiki). The wiki includes
|
||||||
|
a Roadmap for the future, and more.
|
||||||
|
|
||||||
|
If you'd liked to discuss ALE and more check out the Dense Analysis Discord
|
||||||
|
server here: https://discord.gg/5zFD6pQxDk
|
||||||
|
|
||||||
|
<a name="faq"></a>
|
||||||
|
|
||||||
|
## 5. FAQ
|
||||||
|
|
||||||
|
<a name="faq-disable-linters"></a>
|
||||||
|
|
||||||
|
### 5.i. How do I disable particular linters?
|
||||||
|
|
||||||
|
By default, all available tools for all supported languages will be run. If you
|
||||||
|
want to only select a subset of the tools, you can define `b:ale_linters` for a
|
||||||
|
single buffer, or `g:ale_linters` globally.
|
||||||
|
|
||||||
|
The recommended way to configure linters is to define a List in an ftplugin
|
||||||
|
file.
|
||||||
|
|
||||||
|
```vim
|
||||||
|
" In ~/.vim/ftplugin/javascript.vim, or somewhere similar.
|
||||||
|
|
||||||
|
" Enable ESLint only for JavaScript.
|
||||||
|
let b:ale_linters = ['eslint']
|
||||||
|
|
||||||
|
" Equivalent to the above.
|
||||||
|
let b:ale_linters = {'javascript': ['eslint']}
|
||||||
|
```
|
||||||
|
|
||||||
|
You can also declare which linters you want to run in your vimrc file, before or
|
||||||
|
after ALE has been loaded.
|
||||||
|
|
||||||
|
```vim
|
||||||
|
" In ~/.vim/vimrc, or somewhere similar.
|
||||||
|
let g:ale_linters = {
|
||||||
|
\ 'javascript': ['eslint'],
|
||||||
|
\}
|
||||||
|
```
|
||||||
|
|
||||||
|
For all languages unspecified in the dictionary, all possible linters will
|
||||||
|
be run for those languages, just as when the dictionary is not defined.
|
||||||
|
Running many linters should not typically obstruct editing in Vim,
|
||||||
|
as they will all be executed in separate processes simultaneously.
|
||||||
|
|
||||||
|
If you don't want ALE to run anything other than what you've explicitly asked
|
||||||
|
for, you can set `g:ale_linters_explicit` to `1`.
|
||||||
|
|
||||||
|
```vim
|
||||||
|
" Only run linters named in ale_linters settings.
|
||||||
|
let g:ale_linters_explicit = 1
|
||||||
|
```
|
||||||
|
|
||||||
|
This plugin will look for linters in the [`ale_linters`](ale_linters) directory.
|
||||||
|
Each directory within corresponds to a particular filetype in Vim, and each file
|
||||||
|
in each directory corresponds to the name of a particular linter.
|
||||||
|
|
||||||
|
<a name="faq-get-info"></a>
|
||||||
|
|
||||||
|
### 5.ii. How can I see what ALE has configured for the current file?
|
||||||
|
|
||||||
|
Run the following to see what is currently configured:
|
||||||
|
|
||||||
|
```vim
|
||||||
|
:ALEInfo
|
||||||
|
```
|
||||||
|
|
||||||
|
<a name="faq-coc-nvim"></a>
|
||||||
|
|
||||||
|
### 5.iii. How can I use ALE and coc.nvim together?
|
||||||
|
|
||||||
|
[coc.nvim](https://github.com/neoclide/coc.nvim) is a popular Vim plugin written
|
||||||
|
in TypeScript and dependent on the [npm](https://www.npmjs.com/) ecosystem for
|
||||||
|
providing full IDE features to Vim. Both ALE and coc.nvim implement
|
||||||
|
[Language Server Protocol](https://microsoft.github.io/language-server-protocol/)
|
||||||
|
(LSP) clients for supporting diagnostics (linting with a live server), and other
|
||||||
|
features like auto-completion, and others listed above.
|
||||||
|
|
||||||
|
ALE is primarily focused on integrating with external programs through virtually
|
||||||
|
any means, provided the plugin remains almost entirely written in Vim script.
|
||||||
|
coc.nvim is primarily focused on bringing IDE features to Vim. If you want to
|
||||||
|
run external programs on your files to check for errors, and also use the most
|
||||||
|
advanced IDE features, you might want to use both plugins at the same time.
|
||||||
|
|
||||||
|
The easiest way to get both plugins to work together is to configure coc.nvim to
|
||||||
|
send diagnostics to ALE, so ALE controls how all problems are presented to you,
|
||||||
|
and to disable all LSP features in ALE, so ALE doesn't try to provide LSP
|
||||||
|
features already provided by coc.nvim, such as auto-completion.
|
||||||
|
|
||||||
|
1. Open your coc.nvim configuration file with `:CocConfig` and add
|
||||||
|
`"diagnostic.displayByAle": true` to your settings.
|
||||||
|
2. Add `let g:ale_disable_lsp = 1` to your vimrc file, before plugins are
|
||||||
|
loaded.
|
||||||
|
|
||||||
|
You can also use `b:ale_disable_lsp` in your ftplugin files to enable or disable
|
||||||
|
LSP features in ALE for different filetypes. After you configure coc.nvim and
|
||||||
|
ALE this way, you can further configure how problems appear to you by using all
|
||||||
|
of the settings mentioned in ALE's help file, including how often diagnostics
|
||||||
|
are requested. See `:help ale-lint`.
|
||||||
|
|
||||||
|
The integration between ALE and coc.nvim works using an API ALE offers for
|
||||||
|
letting any other plugin integrate with ALE. If you are interested in writing a
|
||||||
|
similar integration, see `:help ale-lint-other-sources`.
|
||||||
|
|
||||||
|
<a name="faq-keep-signs"></a>
|
||||||
|
|
||||||
|
### 5.iv. How can I keep the sign gutter open?
|
||||||
|
|
||||||
|
You can keep the sign gutter open at all times by setting the
|
||||||
|
`g:ale_sign_column_always` to 1
|
||||||
|
|
||||||
|
```vim
|
||||||
|
let g:ale_sign_column_always = 1
|
||||||
|
```
|
||||||
|
|
||||||
|
<a name="faq-change-signs"></a>
|
||||||
|
|
||||||
|
### 5.v. How can I change the signs ALE uses?
|
||||||
|
|
||||||
|
Use these options to specify what text should be used for signs:
|
||||||
|
|
||||||
|
```vim
|
||||||
|
let g:ale_sign_error = '>>'
|
||||||
|
let g:ale_sign_warning = '--'
|
||||||
|
```
|
||||||
|
|
||||||
|
ALE sets some background colors automatically for warnings and errors
|
||||||
|
in the sign gutter, with the names `ALEErrorSign` and `ALEWarningSign`.
|
||||||
|
These colors can be customised, or even removed completely:
|
||||||
|
|
||||||
|
```vim
|
||||||
|
highlight clear ALEErrorSign
|
||||||
|
highlight clear ALEWarningSign
|
||||||
|
```
|
||||||
|
|
||||||
|
<a name="faq-change-highlights"></a>
|
||||||
|
|
||||||
|
### 5.vi. How can I change or disable the highlights ALE uses?
|
||||||
|
|
||||||
|
ALE's highlights problems with highlight groups which link to `SpellBad`,
|
||||||
|
`SpellCap`, `error`, and `todo` groups by default. The characters that are
|
||||||
|
highlighted depend on the linters being used, and the information provided to
|
||||||
|
ALE.
|
||||||
|
|
||||||
|
Highlighting can be disabled completely by setting `g:ale_set_highlights` to
|
||||||
|
`0`.
|
||||||
|
|
||||||
|
```vim
|
||||||
|
" Set this in your vimrc file to disabling highlighting
|
||||||
|
let g:ale_set_highlights = 0
|
||||||
|
```
|
||||||
|
|
||||||
|
You can control all of the highlights ALE uses, say if you are using a different
|
||||||
|
color scheme which produces ugly highlights. For example:
|
||||||
|
|
||||||
|
```vim
|
||||||
|
highlight ALEWarning ctermbg=DarkMagenta
|
||||||
|
```
|
||||||
|
|
||||||
|
See `:help ale-highlights` for more information.
|
||||||
|
|
||||||
|
<a name="faq-statusline"></a>
|
||||||
|
|
||||||
|
### 5.vii. How can I show errors or warnings in my statusline?
|
||||||
|
|
||||||
|
[vim-airline](https://github.com/vim-airline/vim-airline) integrates with ALE
|
||||||
|
for displaying error information in the status bar. If you want to see the
|
||||||
|
status for ALE in a nice format, it is recommended to use vim-airline with ALE.
|
||||||
|
The airline extension can be enabled by adding the following to your vimrc:
|
||||||
|
|
||||||
|
```vim
|
||||||
|
" Set this. Airline will handle the rest.
|
||||||
|
let g:airline#extensions#ale#enabled = 1
|
||||||
|
```
|
||||||
|
|
||||||
|
If you don't want to use vim-airline, you can implement your own statusline
|
||||||
|
function without adding any other plugins. ALE provides some functions to
|
||||||
|
assist in this endeavour, including:
|
||||||
|
|
||||||
|
* `ale#statusline#Count`: Which returns the number of problems found by ALE
|
||||||
|
for a specified buffer.
|
||||||
|
* `ale#statusline#FirstProblem`: Which returns a dictionary containing the
|
||||||
|
full loclist details of the first problem of a specified type found by ALE
|
||||||
|
in a buffer. (e.g. The first style warning in the current buffer.)
|
||||||
|
This can be useful for displaying more detailed information such as the
|
||||||
|
line number of the first problem in a file.
|
||||||
|
|
||||||
|
Say you want to display all errors as one figure, and all non-errors as another
|
||||||
|
figure. You can do the following:
|
||||||
|
|
||||||
|
```vim
|
||||||
|
function! LinterStatus() abort
|
||||||
|
let l:counts = ale#statusline#Count(bufnr(''))
|
||||||
|
|
||||||
|
let l:all_errors = l:counts.error + l:counts.style_error
|
||||||
|
let l:all_non_errors = l:counts.total - l:all_errors
|
||||||
|
|
||||||
|
return l:counts.total == 0 ? 'OK' : printf(
|
||||||
|
\ '%dW %dE',
|
||||||
|
\ all_non_errors,
|
||||||
|
\ all_errors
|
||||||
|
\)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
set statusline=%{LinterStatus()}
|
||||||
|
```
|
||||||
|
|
||||||
|
See `:help ale#statusline#Count()` or `:help ale#statusline#FirstProblem()`
|
||||||
|
for more information.
|
||||||
|
|
||||||
|
<a name="faq-lightline"></a>
|
||||||
|
|
||||||
|
### 5.viii. How can I show errors or warnings in my lightline?
|
||||||
|
|
||||||
|
[lightline](https://github.com/itchyny/lightline.vim) does not have built-in
|
||||||
|
support for ALE, nevertheless there is a plugin that adds this functionality: [maximbaz/lightline-ale](https://github.com/maximbaz/lightline-ale).
|
||||||
|
|
||||||
|
For more information, check out the sources of that plugin, `:help ale#statusline#Count()` and [lightline documentation](https://github.com/itchyny/lightline.vim#advanced-configuration).
|
||||||
|
|
||||||
|
<a name="faq-echo-format"></a>
|
||||||
|
|
||||||
|
### 5.ix. How can I change the format for echo messages?
|
||||||
|
|
||||||
|
There are 3 global options that allow customizing the echoed message.
|
||||||
|
|
||||||
|
- `g:ale_echo_msg_format` where:
|
||||||
|
* `%s` is the error message itself
|
||||||
|
* `%...code...%` is an optional error code, and most characters can be
|
||||||
|
written between the `%` characters.
|
||||||
|
* `%linter%` is the linter name
|
||||||
|
* `%severity%` is the severity type
|
||||||
|
- `g:ale_echo_msg_error_str` is the string used for error severity.
|
||||||
|
- `g:ale_echo_msg_warning_str` is the string used for warning severity.
|
||||||
|
|
||||||
|
So for example this:
|
||||||
|
|
||||||
|
```vim
|
||||||
|
let g:ale_echo_msg_error_str = 'E'
|
||||||
|
let g:ale_echo_msg_warning_str = 'W'
|
||||||
|
let g:ale_echo_msg_format = '[%linter%] %s [%severity%]'
|
||||||
|
```
|
||||||
|
|
||||||
|
Will give you:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
See `:help g:ale_echo_msg_format` for more information.
|
||||||
|
|
||||||
|
<a name="faq-autocmd"></a>
|
||||||
|
|
||||||
|
### 5.x. How can I execute some code when ALE starts or stops linting?
|
||||||
|
|
||||||
|
ALE runs its own [autocmd](http://vimdoc.sourceforge.net/htmldoc/autocmd.html)
|
||||||
|
events when a lint or fix cycle are started and stopped. There is also an event
|
||||||
|
that runs when a linter job has been successfully started. These events can be
|
||||||
|
used to call arbitrary functions during these respective parts of the ALE's
|
||||||
|
operation.
|
||||||
|
|
||||||
|
```vim
|
||||||
|
augroup YourGroup
|
||||||
|
autocmd!
|
||||||
|
autocmd User ALELintPre call YourFunction()
|
||||||
|
autocmd User ALELintPost call YourFunction()
|
||||||
|
|
||||||
|
autocmd User ALEJobStarted call YourFunction()
|
||||||
|
|
||||||
|
autocmd User ALEFixPre call YourFunction()
|
||||||
|
autocmd User ALEFixPost call YourFunction()
|
||||||
|
augroup END
|
||||||
|
```
|
||||||
|
|
||||||
|
<a name="faq-navigation"></a>
|
||||||
|
|
||||||
|
### 5.xi. How can I navigate between errors quickly?
|
||||||
|
|
||||||
|
ALE offers some commands with `<Plug>` keybinds for moving between warnings and
|
||||||
|
errors quickly. You can map the keys Ctrl+j and Ctrl+k to moving between errors
|
||||||
|
for example:
|
||||||
|
|
||||||
|
```vim
|
||||||
|
nmap <silent> <C-k> <Plug>(ale_previous_wrap)
|
||||||
|
nmap <silent> <C-j> <Plug>(ale_next_wrap)
|
||||||
|
```
|
||||||
|
|
||||||
|
For more information, consult the online documentation with
|
||||||
|
`:help ale-navigation-commands`.
|
||||||
|
|
||||||
|
<a name="faq-lint-on-save"></a>
|
||||||
|
|
||||||
|
### 5.xii. How can I run linters only when I save files?
|
||||||
|
|
||||||
|
ALE offers an option `g:ale_lint_on_save` for enabling running the linters
|
||||||
|
when files are saved. This option is enabled by default. If you only
|
||||||
|
wish to run linters when files are saved, you can turn the other
|
||||||
|
options off.
|
||||||
|
|
||||||
|
```vim
|
||||||
|
" Write this in your vimrc file
|
||||||
|
let g:ale_lint_on_text_changed = 'never'
|
||||||
|
let g:ale_lint_on_insert_leave = 0
|
||||||
|
" You can disable this option too
|
||||||
|
" if you don't want linters to run on opening a file
|
||||||
|
let g:ale_lint_on_enter = 0
|
||||||
|
```
|
||||||
|
|
||||||
|
If for whatever reason you don't wish to run linters again when you save
|
||||||
|
files, you can set `g:ale_lint_on_save` to `0`.
|
||||||
|
|
||||||
|
<a name="faq-quickfix"></a>
|
||||||
|
|
||||||
|
### 5.xiii. How can I use the quickfix list instead of the loclist?
|
||||||
|
|
||||||
|
The quickfix list can be enabled by turning the `g:ale_set_quickfix`
|
||||||
|
option on. If you wish to also disable the loclist, you can disable
|
||||||
|
the `g:ale_set_loclist` option.
|
||||||
|
|
||||||
|
```vim
|
||||||
|
" Write this in your vimrc file
|
||||||
|
let g:ale_set_loclist = 0
|
||||||
|
let g:ale_set_quickfix = 1
|
||||||
|
```
|
||||||
|
|
||||||
|
If you wish to show Vim windows for the loclist or quickfix items
|
||||||
|
when a file contains warnings or errors, `g:ale_open_list` can be
|
||||||
|
set to `1`. `g:ale_keep_list_window_open` can be set to `1`
|
||||||
|
if you wish to keep the window open even after errors disappear.
|
||||||
|
|
||||||
|
```vim
|
||||||
|
let g:ale_open_list = 1
|
||||||
|
" Set this if you want to.
|
||||||
|
" This can be useful if you are combining ALE with
|
||||||
|
" some other plugin which sets quickfix errors, etc.
|
||||||
|
let g:ale_keep_list_window_open = 1
|
||||||
|
```
|
||||||
|
|
||||||
|
You can also set `let g:ale_list_vertical = 1` to open the windows vertically
|
||||||
|
instead of the default horizontally.
|
||||||
|
|
||||||
|
<a name="faq-jsx-stylelint-eslint"></a>
|
||||||
|
|
||||||
|
### 5.xiv. How can I check JSX files with both stylelint and eslint?
|
||||||
|
|
||||||
|
If you configure ALE options correctly in your vimrc file, and install
|
||||||
|
the right tools, you can check JSX files with stylelint and eslint.
|
||||||
|
|
||||||
|
First, install eslint and install stylelint with
|
||||||
|
[stylelint-processor-styled-components](https://github.com/styled-components/stylelint-processor-styled-components).
|
||||||
|
|
||||||
|
Supposing you have installed both tools correctly, configure your .jsx files so
|
||||||
|
`jsx` is included in the filetype. You can use an `autocmd` for this.
|
||||||
|
|
||||||
|
```vim
|
||||||
|
augroup FiletypeGroup
|
||||||
|
autocmd!
|
||||||
|
au BufNewFile,BufRead *.jsx set filetype=javascript.jsx
|
||||||
|
augroup END
|
||||||
|
```
|
||||||
|
|
||||||
|
Supposing the filetype has been set correctly, you can set the following
|
||||||
|
options in a jsx.vim ftplugin file.
|
||||||
|
|
||||||
|
```vim
|
||||||
|
" In ~/.vim/ftplugin/jsx.vim, or somewhere similar.
|
||||||
|
let b:ale_linter_aliases = ['css', 'javascript']
|
||||||
|
let b:ale_linters = ['stylelint', 'eslint']
|
||||||
|
```
|
||||||
|
|
||||||
|
Or if you want, you can configure the linters from your vimrc file.
|
||||||
|
|
||||||
|
```vim
|
||||||
|
" In ~/.vim/vimrc, or somewhere similar.
|
||||||
|
let g:ale_linter_aliases = {'jsx': ['css', 'javascript']}
|
||||||
|
let g:ale_linters = {'jsx': ['stylelint', 'eslint']}
|
||||||
|
```
|
||||||
|
|
||||||
|
ALE will alias the `jsx` filetype so it uses the `css` filetype linters, and
|
||||||
|
use the original Array of selected linters for `jsx` from the `g:ale_linters`
|
||||||
|
object. All available linters will be used for the filetype `javascript`, and
|
||||||
|
no linter will be run twice for the same file.
|
||||||
|
|
||||||
|
<a name="faq-vue-eslint"></a>
|
||||||
|
|
||||||
|
### 5.xv. How can I check Vue files with ESLint?
|
||||||
|
|
||||||
|
To check Vue files with ESLint, your ESLint project configuration file must be
|
||||||
|
configured to use the [Vue plugin](https://github.com/vuejs/eslint-plugin-vue).
|
||||||
|
After that, you need to configure ALE so it will run the JavaScript ESLint
|
||||||
|
linter on your files. The settings you need are similar to the settings needed
|
||||||
|
for checking JSX code with both stylelint and ESLint, in the previous section.
|
||||||
|
|
||||||
|
```vim
|
||||||
|
" In ~/.vim/ftplugin/vue.vim, or somewhere similar.
|
||||||
|
|
||||||
|
" Run both javascript and vue linters for vue files.
|
||||||
|
let b:ale_linter_aliases = ['javascript', 'vue']
|
||||||
|
" Select the eslint and vls linters.
|
||||||
|
let b:ale_linters = ['eslint', 'vls']
|
||||||
|
```
|
||||||
|
|
||||||
|
Run `:ALEInfo` to see which linters are available after telling ALE to run
|
||||||
|
JavaScript linters on Vue files. Not all linters support checking Vue files.
|
||||||
|
|
||||||
|
If you don't want to configure your linters in ftplugin files for some reason,
|
||||||
|
you can configure them from your vimrc file instead.
|
||||||
|
|
||||||
|
```vim
|
||||||
|
" In ~/.vim/vimrc, or somewhere similar.
|
||||||
|
let g:ale_linter_aliases = {'vue': ['vue', 'javascript']}
|
||||||
|
let g:ale_linters = {'vue': ['eslint', 'vls']}
|
||||||
|
```
|
||||||
|
|
||||||
|
<a name="faq-my-battery-is-sad"></a>
|
||||||
|
|
||||||
|
### 5.xvi. Will this plugin eat all of my laptop battery power?
|
||||||
|
|
||||||
|
ALE takes advantage of the power of various tools to check your code. This of
|
||||||
|
course means that CPU time will be used to continuously check your code. If you
|
||||||
|
are concerned about the CPU time ALE will spend, which will of course imply
|
||||||
|
some cost to battery life, you can adjust your settings to make your CPU do
|
||||||
|
less work.
|
||||||
|
|
||||||
|
First, consider increasing the delay before which ALE will run any linters
|
||||||
|
while you type. ALE uses a timeout which is cancelled and reset every time you
|
||||||
|
type, and this delay can be increased so linters are run less often. See
|
||||||
|
`:help g:ale_lint_delay` for more information.
|
||||||
|
|
||||||
|
If you don't wish to run linters while you type, you can disable that behavior.
|
||||||
|
Set `g:ale_lint_on_text_changed` to `never`. You won't get as frequent error
|
||||||
|
checking, but ALE shouldn't block your ability to edit a document after you save
|
||||||
|
a file, so the asynchronous nature of the plugin will still be an advantage.
|
||||||
|
|
||||||
|
If you are still concerned, you can turn the automatic linting off altogether,
|
||||||
|
including the option `g:ale_lint_on_enter`, and you can run ALE manually with
|
||||||
|
`:ALELint`.
|
||||||
|
|
||||||
|
<a name="faq-c-configuration"></a>
|
||||||
|
|
||||||
|
### 5.xvii. How can I configure my C or C++ project?
|
||||||
|
|
||||||
|
The structure of C and C++ projects varies wildly from project to project, with
|
||||||
|
many different build tools being used for building them, and many different
|
||||||
|
formats for project configuration files. ALE can run compilers easily, but
|
||||||
|
ALE cannot easily detect which compiler flags to use.
|
||||||
|
|
||||||
|
Some tools and build configurations can generate
|
||||||
|
[compile_commands.json](https://clang.llvm.org/docs/JSONCompilationDatabase.html)
|
||||||
|
files. The `cppcheck`, `clangcheck`, `clangtidy` and `cquery` linters can read
|
||||||
|
these files for automatically determining the appropriate compiler flags to
|
||||||
|
use.
|
||||||
|
|
||||||
|
For linting with compilers like `gcc` and `clang`, and with other tools, you
|
||||||
|
will need to tell ALE which compiler flags to use yourself. You can use
|
||||||
|
different options for different projects with the `g:ale_pattern_options`
|
||||||
|
setting. Consult the documentation for that setting for more information.
|
||||||
|
`b:ale_linters` can be used to select which tools you want to run, say if you
|
||||||
|
want to use only `gcc` for one project, and only `clang` for another.
|
||||||
|
|
||||||
|
ALE will attempt to parse `compile_commands.json` files to discover compiler
|
||||||
|
flags to use when linting code. See `:help g:ale_c_parse_compile_commands` for
|
||||||
|
more information. See Clang's documentation for
|
||||||
|
[compile_commands.json files](https://clang.llvm.org/docs/JSONCompilationDatabase.html).
|
||||||
|
You should strongly consider generating them in your builds, which is easy to do
|
||||||
|
with CMake.
|
||||||
|
|
||||||
|
You can also configure ALE to automatically run `make -n` to run dry runs on
|
||||||
|
`Makefile`s to discover compiler flags. This can execute arbitrary code, so the
|
||||||
|
option is disabled by default. See `:help g:ale_c_parse_makefile`.
|
||||||
|
|
||||||
|
You may also configure buffer-local settings for linters with project-specific
|
||||||
|
vimrc files. [local_vimrc](https://github.com/LucHermitte/local_vimrc) can be
|
||||||
|
used for executing local vimrc files which can be shared in your project.
|
||||||
|
|
||||||
|
<a name="faq-buffer-configuration"></a>
|
||||||
|
|
||||||
|
### 5.xviii. How can I configure ALE differently for different buffers?
|
||||||
|
|
||||||
|
ALE offers various ways to configure which linters or fixers are run, and
|
||||||
|
other settings. For the majority of ALE's settings, they can either be
|
||||||
|
configured globally with a `g:` variable prefix, or for a specific buffer
|
||||||
|
with a `b:` variable prefix. For example, you can configure a Python ftplugin
|
||||||
|
file like so.
|
||||||
|
|
||||||
|
```vim
|
||||||
|
" In ~/.vim/ftplugin/python.vim
|
||||||
|
|
||||||
|
" Check Python files with flake8 and pylint.
|
||||||
|
let b:ale_linters = ['flake8', 'pylint']
|
||||||
|
" Fix Python files with autopep8 and yapf.
|
||||||
|
let b:ale_fixers = ['autopep8', 'yapf']
|
||||||
|
" Disable warnings about trailing whitespace for Python files.
|
||||||
|
let b:ale_warn_about_trailing_whitespace = 0
|
||||||
|
```
|
||||||
|
|
||||||
|
For configuring files based on regular expression patterns matched against the
|
||||||
|
absolute path to a file, you can use `g:ale_pattern_options`.
|
||||||
|
|
||||||
|
```vim
|
||||||
|
" Do not lint or fix minified files.
|
||||||
|
let g:ale_pattern_options = {
|
||||||
|
\ '\.min\.js$': {'ale_linters': [], 'ale_fixers': []},
|
||||||
|
\ '\.min\.css$': {'ale_linters': [], 'ale_fixers': []},
|
||||||
|
\}
|
||||||
|
" If you configure g:ale_pattern_options outside of vimrc, you need this.
|
||||||
|
let g:ale_pattern_options_enabled = 1
|
||||||
|
```
|
||||||
|
|
||||||
|
Buffer-local variables for settings always override the global settings.
|
||||||
|
|
||||||
|
<a name="faq-list-window-height"></a>
|
||||||
|
|
||||||
|
### 5.xix. How can I configure the height of the list in which ALE displays errors?
|
||||||
|
|
||||||
|
To set a default height for the error list, use the `g:ale_list_window_size` variable.
|
||||||
|
|
||||||
|
```vim
|
||||||
|
" Show 5 lines of errors (default: 10)
|
||||||
|
let g:ale_list_window_size = 5
|
||||||
|
```
|
||||||
|
|
||||||
|
<a name="faq-vm"></a>
|
||||||
|
|
||||||
|
### 5.xx. How can I run linters or fixers via Docker or a VM?
|
||||||
|
|
||||||
|
ALE supports running linters or fixers via Docker, virtual machines, or in
|
||||||
|
combination with any remote machine with a different file system, so long as the
|
||||||
|
tools are well-integrated with ALE, and ALE is properly configured to run the
|
||||||
|
correct commands and map filename paths between different file systems. See
|
||||||
|
`:help ale-lint-other-machines` for the full documentation on how to configure
|
||||||
|
ALE to support this.
|
||||||
|
|
||||||
|
<a name="faq-window-borders"></a>
|
||||||
|
|
||||||
|
### 5.xxi. How can I change the borders for floating preview windows?
|
||||||
|
|
||||||
|
Borders for floating preview windows are enabled by default. You can use the
|
||||||
|
`g:ale_floating_window_border` setting to configure them.
|
||||||
|
|
||||||
|
You could disable the border with an empty list.
|
||||||
|
|
||||||
|
```vim
|
||||||
|
let g:ale_floating_window_border = []
|
||||||
|
```
|
||||||
|
|
||||||
|
If the terminal supports Unicode, you might try setting the value like below, to
|
||||||
|
make it look nicer.
|
||||||
|
|
||||||
|
```vim
|
||||||
|
let g:ale_floating_window_border = ['│', '─', '╭', '╮', '╯', '╰', '│', '─']
|
||||||
|
```
|
||||||
|
|
||||||
|
Since vim's default uses nice unicode characters when possible, you can trick
|
||||||
|
ale into using that default with
|
||||||
|
|
||||||
|
```vim
|
||||||
|
let g:ale_floating_window_border = repeat([''], 8)
|
||||||
|
```
|
||||||
|
|
||||||
|
<a name="faq-vim-lsp"></a>
|
||||||
|
|
||||||
|
### 5.xxii. How can I use ALE and vim-lsp together?
|
||||||
|
|
||||||
|
[vim-lsp](https://github.com/prabirshrestha/vim-lsp) is a popular plugin as
|
||||||
|
implementation of Language Server Protocol (LSP) client for Vim. It provides
|
||||||
|
all the LSP features including auto completion, diagnostics, go to definitions,
|
||||||
|
etc.
|
||||||
|
|
||||||
|
ALE also provides LSP support for diagnostics. When you use both ALE and
|
||||||
|
vim-lsp, one option is disabling ALE's LSP support by
|
||||||
|
`let g:ale_disable_lsp = 1`. However ALE provides integration of external
|
||||||
|
programs. Showing errors from language servers by vim-lsp and showing errors
|
||||||
|
from other external programs by ALE are confusing and problematic.
|
||||||
|
|
||||||
|
[vim-lsp-ale](https://github.com/rhysd/vim-lsp-ale) is a bridge plugin to solve
|
||||||
|
the problem when using both ALE and vim-lsp. With the plugin, diagnostics are
|
||||||
|
provided by vim-lsp and ALE can handle all the errors. Please read
|
||||||
|
[vim-lsp-ale's documentation](https://github.com/rhysd/vim-lsp-ale/blob/master/doc/vim-lsp-ale.txt)
|
||||||
|
for more details.
|
||||||
26
dot_vim/plugged/ale/ale_linters/ada/adals.vim
Normal file
26
dot_vim/plugged/ale/ale_linters/ada/adals.vim
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
" Author: Bartek Jasicki http://github.com/thindil
|
||||||
|
" Description: Support for Ada Language Server
|
||||||
|
|
||||||
|
call ale#Set('ada_adals_executable', 'ada_language_server')
|
||||||
|
call ale#Set('ada_adals_project', 'default.gpr')
|
||||||
|
call ale#Set('ada_adals_encoding', 'utf-8')
|
||||||
|
|
||||||
|
function! ale_linters#ada#adals#GetAdaLSConfig(buffer) abort
|
||||||
|
return {
|
||||||
|
\ 'ada.projectFile': ale#Var(a:buffer, 'ada_adals_project'),
|
||||||
|
\ 'ada.defaultCharset': ale#Var(a:buffer, 'ada_adals_encoding')
|
||||||
|
\}
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#ada#adals#GetRootDirectory(buffer) abort
|
||||||
|
return fnamemodify(bufname(a:buffer), ':p:h')
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('ada', {
|
||||||
|
\ 'name': 'adals',
|
||||||
|
\ 'lsp': 'stdio',
|
||||||
|
\ 'executable': {b -> ale#Var(b, 'ada_adals_executable')},
|
||||||
|
\ 'command': '%e',
|
||||||
|
\ 'project_root': function('ale_linters#ada#adals#GetRootDirectory'),
|
||||||
|
\ 'lsp_config': function('ale_linters#ada#adals#GetAdaLSConfig')
|
||||||
|
\})
|
||||||
5
dot_vim/plugged/ale/ale_linters/ada/cspell.vim
Normal file
5
dot_vim/plugged/ale/ale_linters/ada/cspell.vim
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
scriptencoding utf-8
|
||||||
|
" Author: David Houston <houstdav000>
|
||||||
|
" Description: cspell support for Ada files.
|
||||||
|
|
||||||
|
call ale#handlers#cspell#DefineLinter('ada')
|
||||||
54
dot_vim/plugged/ale/ale_linters/ada/gcc.vim
Normal file
54
dot_vim/plugged/ale/ale_linters/ada/gcc.vim
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
" Author: Martino Pilia <martino.pilia@gmail.com>
|
||||||
|
" Description: Lint Ada files with GCC
|
||||||
|
|
||||||
|
call ale#Set('ada_gcc_executable', 'gcc')
|
||||||
|
|
||||||
|
" -gnatwa: activate most optional warnings
|
||||||
|
" -gnatq: try semantic analysis even if syntax errors have been found
|
||||||
|
call ale#Set('ada_gcc_options', '-gnatwa -gnatq')
|
||||||
|
|
||||||
|
function! ale_linters#ada#gcc#GetCommand(buffer) abort
|
||||||
|
" Build a suitable output file name. The output file is specified because
|
||||||
|
" the .ali file may be created even if no code generation is attempted.
|
||||||
|
" The output file name must match the source file name (except for the
|
||||||
|
" extension), so here we cannot use the null file as output.
|
||||||
|
let l:tmp_dir = fnamemodify(ale#command#CreateDirectory(a:buffer), ':p')
|
||||||
|
let l:out_file = l:tmp_dir . fnamemodify(bufname(a:buffer), ':t:r') . '.o'
|
||||||
|
|
||||||
|
" -gnatc: Check syntax and semantics only (no code generation attempted)
|
||||||
|
return '%e -x ada -c -gnatc'
|
||||||
|
\ . ' -o ' . ale#Escape(l:out_file)
|
||||||
|
\ . ' -I %s:h'
|
||||||
|
\ . ale#Pad(ale#Var(a:buffer, 'ada_gcc_options'))
|
||||||
|
\ . ' %t'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" For the message format please refer to:
|
||||||
|
" https://gcc.gnu.org/onlinedocs/gnat_ugn/Output-and-Error-Message-Control.html
|
||||||
|
" https://gcc.gnu.org/onlinedocs/gnat_ugn/Warning-Message-Control.html
|
||||||
|
function! ale_linters#ada#gcc#Handle(buffer, lines) abort
|
||||||
|
" Error format: <filename>:<lnum>:<col>: <text>
|
||||||
|
" Warning format: <filename>:<lnum>:<col>: warning: <text>
|
||||||
|
let l:re = '\v(.+):([0-9]+):([0-9]+):\s+(warning:)?\s*(.+)\s*'
|
||||||
|
let l:output = []
|
||||||
|
|
||||||
|
for l:match in ale#util#GetMatches(a:lines, l:re)
|
||||||
|
call add(l:output, {
|
||||||
|
\ 'bufnr': a:buffer,
|
||||||
|
\ 'lnum': str2nr(l:match[2]),
|
||||||
|
\ 'col': str2nr(l:match[3]),
|
||||||
|
\ 'type': l:match[4] is# 'warning:' ? 'W' : 'E',
|
||||||
|
\ 'text': l:match[5],
|
||||||
|
\})
|
||||||
|
endfor
|
||||||
|
|
||||||
|
return l:output
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('ada', {
|
||||||
|
\ 'name': 'gcc',
|
||||||
|
\ 'output_stream': 'stderr',
|
||||||
|
\ 'executable': {b -> ale#Var(b, 'ada_gcc_executable')},
|
||||||
|
\ 'command': function('ale_linters#ada#gcc#GetCommand'),
|
||||||
|
\ 'callback': 'ale_linters#ada#gcc#Handle',
|
||||||
|
\})
|
||||||
@@ -0,0 +1,46 @@
|
|||||||
|
" Author: Horacio Sanson <https://github.com/hsanson>
|
||||||
|
" Description: Support ansible language server https://github.com/ansible/ansible-language-server/
|
||||||
|
|
||||||
|
call ale#Set('ansible_language_server_executable', 'ansible-language-server')
|
||||||
|
call ale#Set('ansible_language_server_config', {})
|
||||||
|
|
||||||
|
function! ale_linters#ansible#ansible_language_server#Executable(buffer) abort
|
||||||
|
return ale#Var(a:buffer, 'ansible_language_server_executable')
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#ansible#ansible_language_server#GetCommand(buffer) abort
|
||||||
|
let l:executable = ale_linters#ansible#ansible_language_server#Executable(a:buffer)
|
||||||
|
|
||||||
|
return ale#Escape(l:executable) . ' --stdio'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#ansible#ansible_language_server#FindProjectRoot(buffer) abort
|
||||||
|
let l:dir = fnamemodify(
|
||||||
|
\ ale#path#FindNearestFile(a:buffer, 'ansible.cfg'),
|
||||||
|
\ ':h'
|
||||||
|
\)
|
||||||
|
|
||||||
|
if l:dir isnot# '.' && isdirectory(l:dir)
|
||||||
|
return l:dir
|
||||||
|
endif
|
||||||
|
|
||||||
|
let l:dir = fnamemodify(
|
||||||
|
\ ale#path#FindNearestDirectory(a:buffer, '.git'),
|
||||||
|
\ ':h:h'
|
||||||
|
\)
|
||||||
|
|
||||||
|
if l:dir isnot# '.' && isdirectory(l:dir)
|
||||||
|
return l:dir
|
||||||
|
endif
|
||||||
|
|
||||||
|
return ''
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('ansible', {
|
||||||
|
\ 'name': 'ansible-language-server',
|
||||||
|
\ 'lsp': 'stdio',
|
||||||
|
\ 'executable': function('ale_linters#ansible#ansible_language_server#Executable'),
|
||||||
|
\ 'command': function('ale_linters#ansible#ansible_language_server#GetCommand'),
|
||||||
|
\ 'project_root': function('ale_linters#ansible#ansible_language_server#FindProjectRoot'),
|
||||||
|
\ 'lsp_config': {b -> ale#Var(b, 'ansible_language_server_config')}
|
||||||
|
\})
|
||||||
128
dot_vim/plugged/ale/ale_linters/ansible/ansible_lint.vim
Normal file
128
dot_vim/plugged/ale/ale_linters/ansible/ansible_lint.vim
Normal file
@@ -0,0 +1,128 @@
|
|||||||
|
" Authors: Bjorn Neergaard <bjorn@neersighted.com>, Vytautas Macionis <vytautas.macionis@manomail.de>
|
||||||
|
" Description: ansible-lint for ansible-yaml files
|
||||||
|
|
||||||
|
call ale#Set('ansible_ansible_lint_executable', 'ansible-lint')
|
||||||
|
|
||||||
|
function! ale_linters#ansible#ansible_lint#GetExecutable(buffer) abort
|
||||||
|
return ale#Var(a:buffer, 'ansible_ansible_lint_executable')
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#ansible#ansible_lint#Handle(buffer, version, lines) abort
|
||||||
|
for l:line in a:lines[:10]
|
||||||
|
if match(l:line, '^Traceback') >= 0
|
||||||
|
return [{
|
||||||
|
\ 'lnum': 1,
|
||||||
|
\ 'text': 'An exception was thrown. See :ALEDetail',
|
||||||
|
\ 'detail': join(a:lines, "\n"),
|
||||||
|
\}]
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
|
||||||
|
let l:version_group = ale#semver#GTE(a:version, [6, 0, 0]) ? '>=6.0.0' :
|
||||||
|
\ ale#semver#GTE(a:version, [5, 0, 0]) ? '>=5.0.0' :
|
||||||
|
\ '<5.0.0'
|
||||||
|
let l:output = []
|
||||||
|
|
||||||
|
if '>=6.0.0' is# l:version_group
|
||||||
|
let l:error_codes = { 'blocker': 'E', 'critical': 'E', 'major': 'W', 'minor': 'W', 'info': 'I' }
|
||||||
|
let l:linter_issues = ale#util#FuzzyJSONDecode(a:lines, [])
|
||||||
|
|
||||||
|
for l:issue in l:linter_issues
|
||||||
|
if ale#path#IsBufferPath(a:buffer, l:issue.location.path)
|
||||||
|
call add(l:output, {
|
||||||
|
\ 'lnum': exists('l:issue.location.lines.begin.column') ? l:issue.location.lines.begin.line :
|
||||||
|
\ l:issue.location.lines.begin,
|
||||||
|
\ 'col': exists('l:issue.location.lines.begin.column') ? l:issue.location.lines.begin.column : 0,
|
||||||
|
\ 'text': l:issue.check_name,
|
||||||
|
\ 'detail': l:issue.description,
|
||||||
|
\ 'code': l:issue.severity,
|
||||||
|
\ 'type': l:error_codes[l:issue.severity],
|
||||||
|
\})
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
endif
|
||||||
|
|
||||||
|
if '>=5.0.0' is# l:version_group
|
||||||
|
" Matches patterns line the following:
|
||||||
|
" test.yml:3:148: syntax-check 'var' is not a valid attribute for a Play
|
||||||
|
" roles/test/tasks/test.yml:8: [package-latest] [VERY_LOW] Package installs should not use latest
|
||||||
|
" D:\test\tasks\test.yml:8: [package-latest] [VERY_LOW] package installs should not use latest
|
||||||
|
let l:pattern = '\v^(%([a-zA-Z]:)?[^:]+):(\d+):%((\d+):)? %(\[([-[:alnum:]]+)\]) %(\[([_[:alnum:]]+)\]) (.*)$'
|
||||||
|
let l:error_codes = { 'VERY_HIGH': 'E', 'HIGH': 'E', 'MEDIUM': 'W', 'LOW': 'W', 'VERY_LOW': 'W', 'INFO': 'I' }
|
||||||
|
|
||||||
|
for l:match in ale#util#GetMatches(a:lines, l:pattern)
|
||||||
|
if ale#path#IsBufferPath(a:buffer, l:match[1])
|
||||||
|
call add(l:output, {
|
||||||
|
\ 'lnum': l:match[2] + 0,
|
||||||
|
\ 'col': l:match[3] + 0,
|
||||||
|
\ 'text': l:match[6],
|
||||||
|
\ 'code': l:match[4],
|
||||||
|
\ 'type': l:error_codes[l:match[5]],
|
||||||
|
\})
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
endif
|
||||||
|
|
||||||
|
if '<5.0.0' is# l:version_group
|
||||||
|
" Matches patterns line the following:
|
||||||
|
" test.yml:35: [EANSIBLE0002] Trailing whitespace
|
||||||
|
let l:pattern = '\v^([a-zA-Z]?:?[^:]+):(\d+):?(\d+)?: \[?([[:alnum:]]+)\]? (.*)$'
|
||||||
|
|
||||||
|
for l:match in ale#util#GetMatches(a:lines, l:pattern)
|
||||||
|
let l:code = l:match[4]
|
||||||
|
|
||||||
|
if l:code is# 'EANSIBLE0002'
|
||||||
|
\&& !ale#Var(a:buffer, 'warn_about_trailing_whitespace')
|
||||||
|
" Skip warnings for trailing whitespace if the option is off.
|
||||||
|
continue
|
||||||
|
endif
|
||||||
|
|
||||||
|
if ale#path#IsBufferPath(a:buffer, l:match[1])
|
||||||
|
call add(l:output, {
|
||||||
|
\ 'lnum': l:match[2] + 0,
|
||||||
|
\ 'col': l:match[3] + 0,
|
||||||
|
\ 'text': l:match[5],
|
||||||
|
\ 'code': l:code,
|
||||||
|
\ 'type': l:code[:0] is# 'E' ? 'E' : 'W',
|
||||||
|
\})
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
endif
|
||||||
|
|
||||||
|
return l:output
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#ansible#ansible_lint#GetCommand(buffer, version) abort
|
||||||
|
let l:commands = {
|
||||||
|
\ '>=6.0.0': '%e --nocolor -f json -x yaml %s',
|
||||||
|
\ '>=5.0.0': '%e --nocolor --parseable-severity -x yaml %s',
|
||||||
|
\ '<5.0.0': '%e --nocolor -p %t'
|
||||||
|
\}
|
||||||
|
let l:command = ale#semver#GTE(a:version, [6, 0]) ? l:commands['>=6.0.0'] :
|
||||||
|
\ ale#semver#GTE(a:version, [5, 0]) ? l:commands['>=5.0.0'] :
|
||||||
|
\ l:commands['<5.0.0']
|
||||||
|
|
||||||
|
return l:command
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('ansible', {
|
||||||
|
\ 'name': 'ansible_lint',
|
||||||
|
\ 'aliases': ['ansible', 'ansible-lint'],
|
||||||
|
\ 'executable': function('ale_linters#ansible#ansible_lint#GetExecutable'),
|
||||||
|
\ 'command': {buffer -> ale#semver#RunWithVersionCheck(
|
||||||
|
\ buffer,
|
||||||
|
\ ale_linters#ansible#ansible_lint#GetExecutable(buffer),
|
||||||
|
\ '%e --version',
|
||||||
|
\ function('ale_linters#ansible#ansible_lint#GetCommand'),
|
||||||
|
\ )},
|
||||||
|
\ 'lint_file': 1,
|
||||||
|
\ 'callback': {buffer, lines -> ale#semver#RunWithVersionCheck(
|
||||||
|
\ buffer,
|
||||||
|
\ ale_linters#ansible#ansible_lint#GetExecutable(buffer),
|
||||||
|
\ '%e --version',
|
||||||
|
\ {buffer, version -> ale_linters#ansible#ansible_lint#Handle(
|
||||||
|
\ buffer,
|
||||||
|
\ l:version,
|
||||||
|
\ lines)},
|
||||||
|
\ )},
|
||||||
|
\})
|
||||||
38
dot_vim/plugged/ale/ale_linters/apiblueprint/drafter.vim
Normal file
38
dot_vim/plugged/ale/ale_linters/apiblueprint/drafter.vim
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
" Author: nametake https://nametake.github.io
|
||||||
|
" Description: apiblueprint parser
|
||||||
|
|
||||||
|
function! ale_linters#apiblueprint#drafter#HandleErrors(buffer, lines) abort
|
||||||
|
" Matches patterns line the following:
|
||||||
|
"
|
||||||
|
" warning: (3) unable to parse response signature, expected 'response [<HTTP status code>] [(<media type>)]'; line 4, column 3k - line 4, column 22
|
||||||
|
" warning: (10) message-body asset is expected to be a pre-formatted code block, separate it by a newline and indent every of its line by 12 spaces or 3 tabs; line 30, column 5 - line 30, column 9; line 31, column 9 - line 31, column 14; line 32, column 9 - line 32, column 14
|
||||||
|
let l:pattern = '\(^.*\): (\d\+) \(.\{-\}\); line \(\d\+\), column \(\d\+\) - line \d\+, column \d\+\(.*; line \d\+, column \d\+ - line \(\d\+\), column \(\d\+\)\)\{-\}$'
|
||||||
|
let l:output = []
|
||||||
|
|
||||||
|
for l:match in ale#util#GetMatches(a:lines[2:], l:pattern)
|
||||||
|
let l:item = {
|
||||||
|
\ 'type': l:match[1] is# 'warning' ? 'W' : 'E',
|
||||||
|
\ 'text': l:match[2],
|
||||||
|
\ 'lnum': l:match[3] + 0,
|
||||||
|
\ 'col': l:match[4] + 0,
|
||||||
|
\}
|
||||||
|
|
||||||
|
if l:match[5] isnot# ''
|
||||||
|
let l:item.end_lnum = l:match[6] + 0
|
||||||
|
let l:item.end_col = l:match[7] + 0
|
||||||
|
endif
|
||||||
|
|
||||||
|
call add(l:output, l:item)
|
||||||
|
endfor
|
||||||
|
|
||||||
|
return l:output
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
|
||||||
|
call ale#linter#Define('apiblueprint', {
|
||||||
|
\ 'name': 'drafter',
|
||||||
|
\ 'output_stream': 'stderr',
|
||||||
|
\ 'executable': 'drafter',
|
||||||
|
\ 'command': 'drafter --use-line-num --validate',
|
||||||
|
\ 'callback': 'ale_linters#apiblueprint#drafter#HandleErrors',
|
||||||
|
\})
|
||||||
12
dot_vim/plugged/ale/ale_linters/apkbuild/apkbuild_lint.vim
Normal file
12
dot_vim/plugged/ale/ale_linters/apkbuild/apkbuild_lint.vim
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
" Author: Leo <thinkabit.ukim@gmail.com>
|
||||||
|
" Description: apkbuild-lint from atools linter for APKBUILDs
|
||||||
|
|
||||||
|
call ale#Set('apkbuild_apkbuild_lint_executable', 'apkbuild-lint')
|
||||||
|
|
||||||
|
call ale#linter#Define('apkbuild', {
|
||||||
|
\ 'name': 'apkbuild_lint',
|
||||||
|
\ 'output_stream': 'stdout',
|
||||||
|
\ 'executable': {b -> ale#Var(b, 'apkbuild_apkbuild_lint_executable')},
|
||||||
|
\ 'command': '%e %t',
|
||||||
|
\ 'callback': 'ale#handlers#atools#Handle',
|
||||||
|
\})
|
||||||
12
dot_vim/plugged/ale/ale_linters/apkbuild/secfixes_check.vim
Normal file
12
dot_vim/plugged/ale/ale_linters/apkbuild/secfixes_check.vim
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
" Author: Leo <thinkabit.ukim@gmail.com>
|
||||||
|
" Description: secfixes-check from atools linter for APKBUILDs
|
||||||
|
|
||||||
|
call ale#Set('apkbuild_secfixes_check_executable', 'secfixes-check')
|
||||||
|
|
||||||
|
call ale#linter#Define('apkbuild', {
|
||||||
|
\ 'name': 'secfixes_check',
|
||||||
|
\ 'output_stream': 'stdout',
|
||||||
|
\ 'executable': {b -> ale#Var(b, 'apkbuild_secfixes_check_executable')},
|
||||||
|
\ 'command': '%e %t',
|
||||||
|
\ 'callback': 'ale#handlers#atools#Handle',
|
||||||
|
\})
|
||||||
4
dot_vim/plugged/ale/ale_linters/asciidoc/alex.vim
Normal file
4
dot_vim/plugged/ale/ale_linters/asciidoc/alex.vim
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
" Author: Johannes Wienke <languitar@semipol.de>
|
||||||
|
" Description: alex for asciidoc files
|
||||||
|
|
||||||
|
call ale#handlers#alex#DefineLinter('asciidoc', '--text')
|
||||||
5
dot_vim/plugged/ale/ale_linters/asciidoc/cspell.vim
Normal file
5
dot_vim/plugged/ale/ale_linters/asciidoc/cspell.vim
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
scriptencoding utf-8
|
||||||
|
" Author: David Houston <houstdav000>
|
||||||
|
" Description: cspell support for ASCIIDoc files.
|
||||||
|
|
||||||
|
call ale#handlers#cspell#DefineLinter('asciidoc')
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
" Author: Horacio Sanson (hsanson [ät] gmail.com)
|
||||||
|
" Description: languagetool for asciidoc files, copied from markdown.
|
||||||
|
|
||||||
|
|
||||||
|
call ale#handlers#languagetool#DefineLinter('asciidoc')
|
||||||
9
dot_vim/plugged/ale/ale_linters/asciidoc/proselint.vim
Normal file
9
dot_vim/plugged/ale/ale_linters/asciidoc/proselint.vim
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
" Author: Daniel M. Capella https://github.com/polyzen
|
||||||
|
" Description: proselint for AsciiDoc files
|
||||||
|
|
||||||
|
call ale#linter#Define('asciidoc', {
|
||||||
|
\ 'name': 'proselint',
|
||||||
|
\ 'executable': 'proselint',
|
||||||
|
\ 'command': 'proselint %t',
|
||||||
|
\ 'callback': 'ale#handlers#unix#HandleAsWarning',
|
||||||
|
\})
|
||||||
9
dot_vim/plugged/ale/ale_linters/asciidoc/redpen.vim
Normal file
9
dot_vim/plugged/ale/ale_linters/asciidoc/redpen.vim
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
" Author: rhysd https://rhysd.github.io
|
||||||
|
" Description: Redpen, a proofreading tool (http://redpen.cc)
|
||||||
|
|
||||||
|
call ale#linter#Define('asciidoc', {
|
||||||
|
\ 'name': 'redpen',
|
||||||
|
\ 'executable': 'redpen',
|
||||||
|
\ 'command': 'redpen -f asciidoc -r json %t',
|
||||||
|
\ 'callback': 'ale#handlers#redpen#HandleRedpenOutput',
|
||||||
|
\})
|
||||||
9
dot_vim/plugged/ale/ale_linters/asciidoc/textlint.vim
Normal file
9
dot_vim/plugged/ale/ale_linters/asciidoc/textlint.vim
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
" Author: TANIGUCHI Masaya <ta2gch@gmail.com>
|
||||||
|
" Description: textlint for AsciiDoc files
|
||||||
|
|
||||||
|
call ale#linter#Define('asciidoc', {
|
||||||
|
\ 'name': 'textlint',
|
||||||
|
\ 'executable': function('ale#handlers#textlint#GetExecutable'),
|
||||||
|
\ 'command': function('ale#handlers#textlint#GetCommand'),
|
||||||
|
\ 'callback': 'ale#handlers#textlint#HandleTextlintOutput',
|
||||||
|
\})
|
||||||
9
dot_vim/plugged/ale/ale_linters/asciidoc/vale.vim
Normal file
9
dot_vim/plugged/ale/ale_linters/asciidoc/vale.vim
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
" Author: Jeff Kreeftmeijer https://github.com/jeffkreeftmeijer
|
||||||
|
" Description: vale for AsciiDoc files
|
||||||
|
|
||||||
|
call ale#linter#Define('asciidoc', {
|
||||||
|
\ 'name': 'vale',
|
||||||
|
\ 'executable': 'vale',
|
||||||
|
\ 'command': 'vale --output=line %t',
|
||||||
|
\ 'callback': 'ale#handlers#unix#HandleAsWarning',
|
||||||
|
\})
|
||||||
4
dot_vim/plugged/ale/ale_linters/asciidoc/writegood.vim
Normal file
4
dot_vim/plugged/ale/ale_linters/asciidoc/writegood.vim
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
" Author: Sumner Evans <sumner.evans98@gmail.com>
|
||||||
|
" Description: write-good for AsciiDoc files
|
||||||
|
|
||||||
|
call ale#handlers#writegood#DefineLinter('asciidoc')
|
||||||
37
dot_vim/plugged/ale/ale_linters/asm/gcc.vim
Normal file
37
dot_vim/plugged/ale/ale_linters/asm/gcc.vim
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
" Author: Lucas Kolstad <lkolstad@uw.edu>
|
||||||
|
" Description: gcc linter for asm files
|
||||||
|
|
||||||
|
call ale#Set('asm_gcc_executable', 'gcc')
|
||||||
|
call ale#Set('asm_gcc_options', '-Wall')
|
||||||
|
|
||||||
|
function! ale_linters#asm#gcc#GetCommand(buffer) abort
|
||||||
|
" `-o /dev/null` or `-o null` is needed to catch all errors,
|
||||||
|
" -fsyntax-only doesn't catch everything.
|
||||||
|
return '%e -x assembler'
|
||||||
|
\ . ' -o ' . g:ale#util#nul_file
|
||||||
|
\ . '-iquote %s:h'
|
||||||
|
\ . ' ' . ale#Var(a:buffer, 'asm_gcc_options') . ' -'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#asm#gcc#Handle(buffer, lines) abort
|
||||||
|
let l:pattern = '^.\+:\(\d\+\): \([^:]\+\): \(.\+\)$'
|
||||||
|
let l:output = []
|
||||||
|
|
||||||
|
for l:match in ale#util#GetMatches(a:lines, l:pattern)
|
||||||
|
call add(l:output, {
|
||||||
|
\ 'lnum': l:match[1] + 0,
|
||||||
|
\ 'type': l:match[2] =~? 'error' ? 'E' : 'W',
|
||||||
|
\ 'text': l:match[3],
|
||||||
|
\})
|
||||||
|
endfor
|
||||||
|
|
||||||
|
return l:output
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('asm', {
|
||||||
|
\ 'name': 'gcc',
|
||||||
|
\ 'output_stream': 'stderr',
|
||||||
|
\ 'executable': {b -> ale#Var(b, 'asm_gcc_executable')},
|
||||||
|
\ 'command': function('ale_linters#asm#gcc#GetCommand'),
|
||||||
|
\ 'callback': 'ale_linters#asm#gcc#Handle',
|
||||||
|
\})
|
||||||
36
dot_vim/plugged/ale/ale_linters/avra/avra.vim
Normal file
36
dot_vim/plugged/ale/ale_linters/avra/avra.vim
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
" Author: Utkarsh Verma <utkarshverma@protonmail.com>
|
||||||
|
" Description: AVRA linter for avra syntax.
|
||||||
|
|
||||||
|
call ale#Set('avra_avra_executable', 'avra')
|
||||||
|
call ale#Set('avra_avra_options', '')
|
||||||
|
|
||||||
|
function! ale_linters#avra#avra#GetCommand(buffer) abort
|
||||||
|
return '%e'
|
||||||
|
\ . ' %t'
|
||||||
|
\ . ale#Pad(ale#Var(a:buffer, 'avra_avra_options'))
|
||||||
|
\ . ' -o ' . g:ale#util#nul_file
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#avra#avra#Handle(buffer, lines) abort
|
||||||
|
" Note that we treat 'fatal' as errors.
|
||||||
|
let l:pattern = '^\S\+(\(\d\+\))\s\+:\s\+\(\S\+\)\s\+:\s\+\(.\+\)$'
|
||||||
|
let l:output = []
|
||||||
|
|
||||||
|
for l:match in ale#util#GetMatches(a:lines, l:pattern)
|
||||||
|
call add(l:output, {
|
||||||
|
\ 'lnum': l:match[1] + 0,
|
||||||
|
\ 'type': l:match[2] =~? 'Error' ? 'E' : 'W',
|
||||||
|
\ 'text': l:match[3],
|
||||||
|
\})
|
||||||
|
endfor
|
||||||
|
|
||||||
|
return l:output
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('avra', {
|
||||||
|
\ 'name': 'avra',
|
||||||
|
\ 'output_stream': 'stderr',
|
||||||
|
\ 'executable': {b -> ale#Var(b, 'avra_avra_executable')},
|
||||||
|
\ 'command': function('ale_linters#avra#avra#GetCommand'),
|
||||||
|
\ 'callback': 'ale_linters#avra#avra#Handle',
|
||||||
|
\})
|
||||||
23
dot_vim/plugged/ale/ale_linters/awk/gawk.vim
Normal file
23
dot_vim/plugged/ale/ale_linters/awk/gawk.vim
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
" Author: kmarc <korondi.mark@gmail.com>
|
||||||
|
" Description: This file adds support for using GNU awk with scripts.
|
||||||
|
|
||||||
|
call ale#Set('awk_gawk_executable', 'gawk')
|
||||||
|
call ale#Set('awk_gawk_options', '')
|
||||||
|
|
||||||
|
function! ale_linters#awk#gawk#GetCommand(buffer) abort
|
||||||
|
" note the --source 'BEGIN ...' is to prevent
|
||||||
|
" gawk from attempting to execute the body of the script
|
||||||
|
" it is linting.
|
||||||
|
return '%e --source ' . ale#Escape('BEGIN { exit } END { exit 1 }')
|
||||||
|
\ . ' --lint'
|
||||||
|
\ . ale#Pad(ale#Var(a:buffer, 'awk_gawk_options'))
|
||||||
|
\ . ' -f %t /dev/null'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('awk', {
|
||||||
|
\ 'name': 'gawk',
|
||||||
|
\ 'executable': {b -> ale#Var(b, 'awk_gawk_executable')},
|
||||||
|
\ 'command': function('ale_linters#awk#gawk#GetCommand'),
|
||||||
|
\ 'callback': 'ale#handlers#gawk#HandleGawkFormat',
|
||||||
|
\ 'output_stream': 'both'
|
||||||
|
\})
|
||||||
4
dot_vim/plugged/ale/ale_linters/bats/shellcheck.vim
Normal file
4
dot_vim/plugged/ale/ale_linters/bats/shellcheck.vim
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
" Author: Ian2020 <https://github.com/Ian2020>
|
||||||
|
" Description: shellcheck linter for bats scripts.
|
||||||
|
|
||||||
|
call ale#handlers#shellcheck#DefineLinter('bats')
|
||||||
80
dot_vim/plugged/ale/ale_linters/bib/bibclean.vim
Normal file
80
dot_vim/plugged/ale/ale_linters/bib/bibclean.vim
Normal file
@@ -0,0 +1,80 @@
|
|||||||
|
" Author: Horacio Sanson - https://github.com/hsanson
|
||||||
|
" Description: Support for bibclean linter for BibTeX files.
|
||||||
|
|
||||||
|
call ale#Set('bib_bibclean_executable', 'bibclean')
|
||||||
|
|
||||||
|
function! ale_linters#bib#bibclean#GetCommand(buffer) abort
|
||||||
|
let l:executable = ale#Var(a:buffer, 'bib_bibclean_executable')
|
||||||
|
|
||||||
|
return ale#Escape(l:executable) . ' -file-position '
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#bib#bibclean#get_type(str) abort
|
||||||
|
if a:str is# '??'
|
||||||
|
return 'E'
|
||||||
|
else
|
||||||
|
return 'W'
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#bib#bibclean#match_msg(line) abort
|
||||||
|
" Legacy message pattern works for bibclean <= v2.11.4. If empty, try
|
||||||
|
" the new message pattern for bibtex > v2.11.4
|
||||||
|
let l:matches_legacy = matchlist(a:line, '^\(.*\) "stdin", line \(\d\+\): \(.*\)$')
|
||||||
|
|
||||||
|
return ! empty(l:matches_legacy) ? l:matches_legacy
|
||||||
|
\ : matchlist(a:line, '^\(.*\) stdin:\(\d\+\):\(.*\)$')
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#bib#bibclean#match_entry(line) abort
|
||||||
|
return matchlist(a:line, 'Entry input byte=.* line=\(.*\) column=\(.*\) output .*$')
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#bib#bibclean#match_value(line) abort
|
||||||
|
return matchlist(a:line, 'Value input byte=.* line=\(.*\) column=\(.*\) output .*$')
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#bib#bibclean#Handle(buffer, lines) abort
|
||||||
|
let l:output = []
|
||||||
|
|
||||||
|
let l:type = 'E'
|
||||||
|
let l:msg = ''
|
||||||
|
|
||||||
|
for l:line in a:lines
|
||||||
|
if empty(l:msg)
|
||||||
|
let l:mlist = ale_linters#bib#bibclean#match_msg(l:line)
|
||||||
|
|
||||||
|
if !empty(l:mlist)
|
||||||
|
let l:msg = l:mlist[3]
|
||||||
|
let l:type = ale_linters#bib#bibclean#get_type(l:mlist[1])
|
||||||
|
endif
|
||||||
|
else
|
||||||
|
if l:type is# 'E'
|
||||||
|
let l:mlist = ale_linters#bib#bibclean#match_entry(l:line)
|
||||||
|
else
|
||||||
|
let l:mlist = ale_linters#bib#bibclean#match_value(l:line)
|
||||||
|
endif
|
||||||
|
|
||||||
|
if !empty(l:mlist)
|
||||||
|
call add(l:output, {
|
||||||
|
\ 'lnum': l:mlist[1],
|
||||||
|
\ 'col': l:mlist[2],
|
||||||
|
\ 'text': l:msg,
|
||||||
|
\ 'type': l:type
|
||||||
|
\})
|
||||||
|
|
||||||
|
let l:msg = ''
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
|
||||||
|
return l:output
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('bib', {
|
||||||
|
\ 'name': 'bibclean',
|
||||||
|
\ 'executable': {b -> ale#Var(b, 'bib_bibclean_executable')},
|
||||||
|
\ 'command': function('ale_linters#bib#bibclean#GetCommand'),
|
||||||
|
\ 'output_stream': 'stderr',
|
||||||
|
\ 'callback': 'ale_linters#bib#bibclean#Handle',
|
||||||
|
\})
|
||||||
64
dot_vim/plugged/ale/ale_linters/bicep/bicep.vim
Normal file
64
dot_vim/plugged/ale/ale_linters/bicep/bicep.vim
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
" Author: Carl Smedstad <carl.smedstad at protonmail dot com>
|
||||||
|
" Description: bicep for bicep files
|
||||||
|
|
||||||
|
let g:ale_bicep_bicep_executable =
|
||||||
|
\ get(g:, 'ale_bicep_bicep_executable', 'bicep')
|
||||||
|
|
||||||
|
let g:ale_bicep_bicep_options =
|
||||||
|
\ get(g:, 'ale_bicep_bicep_options', '')
|
||||||
|
|
||||||
|
function! ale_linters#bicep#bicep#Executable(buffer) abort
|
||||||
|
return ale#Var(a:buffer, 'bicep_bicep_executable')
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#bicep#bicep#Command(buffer) abort
|
||||||
|
let l:executable = ale_linters#bicep#bicep#Executable(a:buffer)
|
||||||
|
let l:options = ale#Var(a:buffer, 'bicep_bicep_options')
|
||||||
|
|
||||||
|
if has('win32')
|
||||||
|
let l:nullfile = 'NUL'
|
||||||
|
else
|
||||||
|
let l:nullfile = '/dev/null'
|
||||||
|
endif
|
||||||
|
|
||||||
|
return ale#Escape(l:executable)
|
||||||
|
\ . ' build --outfile '
|
||||||
|
\ . l:nullfile
|
||||||
|
\ . ' '
|
||||||
|
\ . l:options
|
||||||
|
\ . ' %s'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#bicep#bicep#Handle(buffer, lines) abort
|
||||||
|
let l:pattern = '\v^.*\((\d+),(\d+)\)\s:\s([a-zA-Z]*)\s([-a-zA-Z0-9]*):\s(.*)'
|
||||||
|
let l:output = []
|
||||||
|
|
||||||
|
for l:match in ale#util#GetMatches(a:lines, l:pattern)
|
||||||
|
if l:match[3] is# 'Error'
|
||||||
|
let l:type = 'E'
|
||||||
|
elseif l:match[3] is# 'Warning'
|
||||||
|
let l:type = 'W'
|
||||||
|
else
|
||||||
|
let l:type = 'I'
|
||||||
|
endif
|
||||||
|
|
||||||
|
call add(l:output, {
|
||||||
|
\ 'lnum': l:match[1] + 0,
|
||||||
|
\ 'col': l:match[2] + 0,
|
||||||
|
\ 'type': l:type,
|
||||||
|
\ 'code': l:match[4],
|
||||||
|
\ 'text': l:match[5],
|
||||||
|
\})
|
||||||
|
endfor
|
||||||
|
|
||||||
|
return l:output
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('bicep', {
|
||||||
|
\ 'name': 'bicep',
|
||||||
|
\ 'executable': function('ale_linters#bicep#bicep#Executable'),
|
||||||
|
\ 'command': function('ale_linters#bicep#bicep#Command'),
|
||||||
|
\ 'callback': 'ale_linters#bicep#bicep#Handle',
|
||||||
|
\ 'output_stream': 'both',
|
||||||
|
\ 'lint_file': 1,
|
||||||
|
\})
|
||||||
47
dot_vim/plugged/ale/ale_linters/bitbake/oelint_adv.vim
Normal file
47
dot_vim/plugged/ale/ale_linters/bitbake/oelint_adv.vim
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
" Author: offa
|
||||||
|
" Description: oelint-adv for BitBake files
|
||||||
|
|
||||||
|
call ale#Set('bitbake_oelint_adv_executable', 'oelint-adv')
|
||||||
|
call ale#Set('bitbake_oelint_adv_options', '')
|
||||||
|
call ale#Set('bitbake_oelint_adv_config', '.oelint.cfg')
|
||||||
|
|
||||||
|
function! ale_linters#bitbake#oelint_adv#Command(buffer) abort
|
||||||
|
let l:config_file = ale#path#FindNearestFile(a:buffer,
|
||||||
|
\ ale#Var(a:buffer, 'bitbake_oelint_adv_config'))
|
||||||
|
|
||||||
|
return ((!empty(l:config_file))
|
||||||
|
\ ? 'OELINT_CONFIG=' . ale#Escape(l:config_file) . ' '
|
||||||
|
\ : '')
|
||||||
|
\ . '%e --quiet '
|
||||||
|
\ . ale#Pad(ale#Var(a:buffer, 'bitbake_oelint_adv_options')) . '%s'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#bitbake#oelint_adv#Handle(buffer, lines) abort
|
||||||
|
let l:pattern = '\v^(.+):(.+):(.+):(.+):(.+)$'
|
||||||
|
let l:output = []
|
||||||
|
|
||||||
|
for l:match in ale#util#GetMatches(a:lines, l:pattern)
|
||||||
|
call add(l:output, {
|
||||||
|
\ 'lnum': str2nr(l:match[2]),
|
||||||
|
\ 'type': l:match[3] is# 'error'
|
||||||
|
\ ? 'E' : (l:match[3] is# 'warning' ? 'W' : 'I'),
|
||||||
|
\ 'text': StripAnsiCodes(l:match[5]),
|
||||||
|
\ 'code': l:match[4]
|
||||||
|
\ })
|
||||||
|
endfor
|
||||||
|
|
||||||
|
return l:output
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! StripAnsiCodes(line) abort
|
||||||
|
return substitute(a:line, '\e\[[0-9;]\+[mK]', '', 'g')
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('bitbake', {
|
||||||
|
\ 'name': 'oelint_adv',
|
||||||
|
\ 'output_stream': 'both',
|
||||||
|
\ 'executable': {b -> ale#Var(b, 'bitbake_oelint_adv_executable')},
|
||||||
|
\ 'cwd': '%s:h',
|
||||||
|
\ 'command': function('ale_linters#bitbake#oelint_adv#Command'),
|
||||||
|
\ 'callback': 'ale_linters#bitbake#oelint_adv#Handle',
|
||||||
|
\ })
|
||||||
67
dot_vim/plugged/ale/ale_linters/c/cc.vim
Normal file
67
dot_vim/plugged/ale/ale_linters/c/cc.vim
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
" Author: w0rp <devw0rp@gmail.com>
|
||||||
|
" Description: A C compiler linter for C files with gcc/clang, etc.
|
||||||
|
|
||||||
|
call ale#Set('c_cc_executable', '<auto>')
|
||||||
|
call ale#Set('c_cc_options', '-std=c11 -Wall')
|
||||||
|
call ale#Set('c_cc_use_header_lang_flag', -1)
|
||||||
|
call ale#Set('c_cc_header_exts', ['h'])
|
||||||
|
|
||||||
|
function! ale_linters#c#cc#GetExecutable(buffer) abort
|
||||||
|
let l:executable = ale#Var(a:buffer, 'c_cc_executable')
|
||||||
|
|
||||||
|
" Default to either clang or gcc.
|
||||||
|
if l:executable is# '<auto>'
|
||||||
|
if ale#engine#IsExecutable(a:buffer, 'clang')
|
||||||
|
let l:executable = 'clang'
|
||||||
|
else
|
||||||
|
let l:executable = 'gcc'
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
return l:executable
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#c#cc#GetCommand(buffer, output) abort
|
||||||
|
let l:cflags = ale#c#GetCFlags(a:buffer, a:output)
|
||||||
|
let l:ale_flags = ale#Var(a:buffer, 'c_cc_options')
|
||||||
|
|
||||||
|
if l:cflags =~# '-std='
|
||||||
|
let l:ale_flags = substitute(
|
||||||
|
\ l:ale_flags,
|
||||||
|
\ '-std=\(c\|gnu\)[0-9]\{2\}',
|
||||||
|
\ '',
|
||||||
|
\ 'g')
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Select the correct language flag depending on the executable, options
|
||||||
|
" and file extension
|
||||||
|
let l:executable = ale_linters#c#cc#GetExecutable(a:buffer)
|
||||||
|
let l:use_header_lang_flag = ale#Var(a:buffer, 'c_cc_use_header_lang_flag')
|
||||||
|
let l:header_exts = ale#Var(a:buffer, 'c_cc_header_exts')
|
||||||
|
let l:lang_flag = ale#c#GetLanguageFlag(
|
||||||
|
\ a:buffer,
|
||||||
|
\ l:executable,
|
||||||
|
\ l:use_header_lang_flag,
|
||||||
|
\ l:header_exts,
|
||||||
|
\ 'c')
|
||||||
|
|
||||||
|
" -iquote with the directory the file is in makes #include work for
|
||||||
|
" headers in the same directory.
|
||||||
|
"
|
||||||
|
" `-o /dev/null` or `-o null` is needed to catch all errors,
|
||||||
|
" -fsyntax-only doesn't catch everything.
|
||||||
|
return '%e -S -x ' . l:lang_flag
|
||||||
|
\ . ' -o ' . g:ale#util#nul_file
|
||||||
|
\ . ' -iquote %s:h'
|
||||||
|
\ . ale#Pad(l:cflags)
|
||||||
|
\ . ale#Pad(l:ale_flags) . ' -'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('c', {
|
||||||
|
\ 'name': 'cc',
|
||||||
|
\ 'aliases': ['gcc', 'clang'],
|
||||||
|
\ 'output_stream': 'stderr',
|
||||||
|
\ 'executable': function('ale_linters#c#cc#GetExecutable'),
|
||||||
|
\ 'command': {b -> ale#c#RunMakeCommand(b, function('ale_linters#c#cc#GetCommand'))},
|
||||||
|
\ 'callback': 'ale#handlers#gcc#HandleGCCFormatWithIncludes',
|
||||||
|
\})
|
||||||
15
dot_vim/plugged/ale/ale_linters/c/ccls.vim
Normal file
15
dot_vim/plugged/ale/ale_linters/c/ccls.vim
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
" Author: Ye Jingchen <ye.jingchen@gmail.com>, Ben Falconer <ben@falconers.me.uk>, jtalowell <jtalowell@protonmail.com>
|
||||||
|
" Description: A language server for C
|
||||||
|
|
||||||
|
call ale#Set('c_ccls_executable', 'ccls')
|
||||||
|
call ale#Set('c_ccls_init_options', {})
|
||||||
|
call ale#Set('c_build_dir', '')
|
||||||
|
|
||||||
|
call ale#linter#Define('c', {
|
||||||
|
\ 'name': 'ccls',
|
||||||
|
\ 'lsp': 'stdio',
|
||||||
|
\ 'executable': {b -> ale#Var(b, 'c_ccls_executable')},
|
||||||
|
\ 'command': '%e',
|
||||||
|
\ 'project_root': function('ale#handlers#ccls#GetProjectRoot'),
|
||||||
|
\ 'initialization_options': {b -> ale#handlers#ccls#GetInitOpts(b, 'c_ccls_init_options')},
|
||||||
|
\})
|
||||||
22
dot_vim/plugged/ale/ale_linters/c/clangd.vim
Normal file
22
dot_vim/plugged/ale/ale_linters/c/clangd.vim
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
" Author: Andrey Melentyev <andrey.melentyev@protonmail.com>
|
||||||
|
" Description: Clangd language server
|
||||||
|
|
||||||
|
call ale#Set('c_clangd_executable', 'clangd')
|
||||||
|
call ale#Set('c_clangd_options', '')
|
||||||
|
call ale#Set('c_build_dir', '')
|
||||||
|
|
||||||
|
function! ale_linters#c#clangd#GetCommand(buffer) abort
|
||||||
|
let l:build_dir = ale#c#GetBuildDirectory(a:buffer)
|
||||||
|
|
||||||
|
return '%e'
|
||||||
|
\ . ale#Pad(ale#Var(a:buffer, 'c_clangd_options'))
|
||||||
|
\ . (!empty(l:build_dir) ? ' -compile-commands-dir=' . ale#Escape(l:build_dir) : '')
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('c', {
|
||||||
|
\ 'name': 'clangd',
|
||||||
|
\ 'lsp': 'stdio',
|
||||||
|
\ 'executable': {b -> ale#Var(b, 'c_clangd_executable')},
|
||||||
|
\ 'command': function('ale_linters#c#clangd#GetCommand'),
|
||||||
|
\ 'project_root': function('ale#c#FindProjectRoot'),
|
||||||
|
\})
|
||||||
52
dot_vim/plugged/ale/ale_linters/c/clangtidy.vim
Normal file
52
dot_vim/plugged/ale/ale_linters/c/clangtidy.vim
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
" Author: vdeurzen <tim@kompiler.org>, w0rp <devw0rp@gmail.com>,
|
||||||
|
" gagbo <gagbobada@gmail.com>, Andrej Radovic <r.andrej@gmail.com>
|
||||||
|
" Description: clang-tidy linter for c files
|
||||||
|
|
||||||
|
call ale#Set('c_clangtidy_executable', 'clang-tidy')
|
||||||
|
" Set this option to check the checks clang-tidy will apply.
|
||||||
|
" The number of checks that can be applied to C files is limited in contrast to
|
||||||
|
" C++
|
||||||
|
"
|
||||||
|
" Consult the check list in clang-tidy's documentation:
|
||||||
|
" http://clang.llvm.org/extra/clang-tidy/checks/list.html
|
||||||
|
|
||||||
|
call ale#Set('c_clangtidy_checks', [])
|
||||||
|
" Set this option to manually set some options for clang-tidy to use as compile
|
||||||
|
" flags.
|
||||||
|
" This will disable compile_commands.json detection.
|
||||||
|
call ale#Set('c_clangtidy_options', '')
|
||||||
|
" Set this option to manually set options for clang-tidy directly.
|
||||||
|
call ale#Set('c_clangtidy_extra_options', '')
|
||||||
|
call ale#Set('c_build_dir', '')
|
||||||
|
|
||||||
|
function! ale_linters#c#clangtidy#GetCommand(buffer, output) abort
|
||||||
|
let l:checks = join(ale#Var(a:buffer, 'c_clangtidy_checks'), ',')
|
||||||
|
let l:build_dir = ale#c#GetBuildDirectory(a:buffer)
|
||||||
|
let l:options = ''
|
||||||
|
|
||||||
|
" Get the extra options if we couldn't find a build directory.
|
||||||
|
if empty(l:build_dir)
|
||||||
|
let l:options = ale#Var(a:buffer, 'c_clangtidy_options')
|
||||||
|
let l:cflags = ale#c#GetCFlags(a:buffer, a:output)
|
||||||
|
let l:options .= !empty(l:options) ? ale#Pad(l:cflags) : l:cflags
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Get the options to pass directly to clang-tidy
|
||||||
|
let l:extra_options = ale#Var(a:buffer, 'c_clangtidy_extra_options')
|
||||||
|
|
||||||
|
return '%e'
|
||||||
|
\ . (!empty(l:checks) ? ' -checks=' . ale#Escape(l:checks) : '')
|
||||||
|
\ . (!empty(l:extra_options) ? ' ' . ale#Escape(l:extra_options) : '')
|
||||||
|
\ . ' %s'
|
||||||
|
\ . (!empty(l:build_dir) ? ' -p ' . ale#Escape(l:build_dir) : '')
|
||||||
|
\ . (!empty(l:options) ? ' -- ' . l:options : '')
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('c', {
|
||||||
|
\ 'name': 'clangtidy',
|
||||||
|
\ 'output_stream': 'stdout',
|
||||||
|
\ 'executable': {b -> ale#Var(b, 'c_clangtidy_executable')},
|
||||||
|
\ 'command': {b -> ale#c#RunMakeCommand(b, function('ale_linters#c#clangtidy#GetCommand'))},
|
||||||
|
\ 'callback': 'ale#handlers#gcc#HandleGCCFormat',
|
||||||
|
\ 'lint_file': 1,
|
||||||
|
\})
|
||||||
29
dot_vim/plugged/ale/ale_linters/c/cppcheck.vim
Normal file
29
dot_vim/plugged/ale/ale_linters/c/cppcheck.vim
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
" Author: Bart Libert <bart.libert@gmail.com>
|
||||||
|
" Description: cppcheck linter for c files
|
||||||
|
|
||||||
|
call ale#Set('c_cppcheck_executable', 'cppcheck')
|
||||||
|
call ale#Set('c_cppcheck_options', '--enable=style')
|
||||||
|
|
||||||
|
function! ale_linters#c#cppcheck#GetCommand(buffer) abort
|
||||||
|
let l:compile_commands_option = ale#handlers#cppcheck#GetCompileCommandsOptions(a:buffer)
|
||||||
|
let l:buffer_path_include = empty(l:compile_commands_option)
|
||||||
|
\ ? ale#handlers#cppcheck#GetBufferPathIncludeOptions(a:buffer)
|
||||||
|
\ : ''
|
||||||
|
let l:template = ' --template=' . ale#Escape('{file}:{line}:{column}: {severity}:{inconclusive:inconclusive:} {message} [{id}]\\n{code}')
|
||||||
|
|
||||||
|
return '%e -q --language=c'
|
||||||
|
\ . l:template
|
||||||
|
\ . ale#Pad(l:compile_commands_option)
|
||||||
|
\ . ale#Pad(ale#Var(a:buffer, 'c_cppcheck_options'))
|
||||||
|
\ . l:buffer_path_include
|
||||||
|
\ . ' %t'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('c', {
|
||||||
|
\ 'name': 'cppcheck',
|
||||||
|
\ 'output_stream': 'both',
|
||||||
|
\ 'executable': {b -> ale#Var(b, 'c_cppcheck_executable')},
|
||||||
|
\ 'cwd': function('ale#handlers#cppcheck#GetCwd'),
|
||||||
|
\ 'command': function('ale_linters#c#cppcheck#GetCommand'),
|
||||||
|
\ 'callback': 'ale#handlers#cppcheck#HandleCppCheckFormat',
|
||||||
|
\})
|
||||||
20
dot_vim/plugged/ale/ale_linters/c/cpplint.vim
Normal file
20
dot_vim/plugged/ale/ale_linters/c/cpplint.vim
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
" Author: Justin Huang <justin.y.huang@live.com>
|
||||||
|
" Description: cpplint for c files
|
||||||
|
|
||||||
|
call ale#Set('c_cpplint_executable', 'cpplint')
|
||||||
|
call ale#Set('c_cpplint_options', '')
|
||||||
|
|
||||||
|
function! ale_linters#c#cpplint#GetCommand(buffer) abort
|
||||||
|
let l:options = ale#Var(a:buffer, 'c_cpplint_options')
|
||||||
|
|
||||||
|
return '%e' . ale#Pad(l:options) . ' %s'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('c', {
|
||||||
|
\ 'name': 'cpplint',
|
||||||
|
\ 'output_stream': 'stderr',
|
||||||
|
\ 'executable': {b -> ale#Var(b, 'c_cpplint_executable')},
|
||||||
|
\ 'command': function('ale_linters#c#cpplint#GetCommand'),
|
||||||
|
\ 'callback': 'ale#handlers#cpplint#HandleCppLintFormat',
|
||||||
|
\ 'lint_file': 1,
|
||||||
|
\})
|
||||||
30
dot_vim/plugged/ale/ale_linters/c/cquery.vim
Normal file
30
dot_vim/plugged/ale/ale_linters/c/cquery.vim
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
" Author: Ben Falconer <ben@falconers.me.uk>, jtalowell <jtalowell@protonmail.com>
|
||||||
|
" Description: A language server for C
|
||||||
|
|
||||||
|
call ale#Set('c_cquery_executable', 'cquery')
|
||||||
|
call ale#Set('c_cquery_cache_directory', expand('~/.cache/cquery'))
|
||||||
|
|
||||||
|
function! ale_linters#c#cquery#GetProjectRoot(buffer) abort
|
||||||
|
" Try to find cquery configuration files first.
|
||||||
|
let l:config = ale#path#FindNearestFile(a:buffer, '.cquery')
|
||||||
|
|
||||||
|
if !empty(l:config)
|
||||||
|
return fnamemodify(l:config, ':h')
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Fall back on default project root detection.
|
||||||
|
return ale#c#FindProjectRoot(a:buffer)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#c#cquery#GetInitializationOptions(buffer) abort
|
||||||
|
return {'cacheDirectory': ale#Var(a:buffer, 'c_cquery_cache_directory')}
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('c', {
|
||||||
|
\ 'name': 'cquery',
|
||||||
|
\ 'lsp': 'stdio',
|
||||||
|
\ 'executable': {b -> ale#Var(b, 'c_cquery_executable')},
|
||||||
|
\ 'command': '%e',
|
||||||
|
\ 'project_root': function('ale_linters#c#cquery#GetProjectRoot'),
|
||||||
|
\ 'initialization_options': function('ale_linters#c#cquery#GetInitializationOptions'),
|
||||||
|
\})
|
||||||
5
dot_vim/plugged/ale/ale_linters/c/cspell.vim
Normal file
5
dot_vim/plugged/ale/ale_linters/c/cspell.vim
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
scriptencoding utf-8
|
||||||
|
" Author: David Houston <houstdav000>
|
||||||
|
" Description: cspell support for C files.
|
||||||
|
|
||||||
|
call ale#handlers#cspell#DefineLinter('c')
|
||||||
25
dot_vim/plugged/ale/ale_linters/c/flawfinder.vim
Normal file
25
dot_vim/plugged/ale/ale_linters/c/flawfinder.vim
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
" Author: Christian Gibbons <cgibbons@gmu.edu>
|
||||||
|
" Description: flawfinder linter for c files
|
||||||
|
|
||||||
|
call ale#Set('c_flawfinder_executable', 'flawfinder')
|
||||||
|
call ale#Set('c_flawfinder_options', '')
|
||||||
|
call ale#Set('c_flawfinder_minlevel', 1)
|
||||||
|
call ale#Set('c_flawfinder_error_severity', 6)
|
||||||
|
|
||||||
|
function! ale_linters#c#flawfinder#GetCommand(buffer) abort
|
||||||
|
" Set the minimum vulnerability level for flawfinder to bother with
|
||||||
|
let l:minlevel = ' --minlevel=' . ale#Var(a:buffer, 'c_flawfinder_minlevel')
|
||||||
|
|
||||||
|
return '%e -CDQS'
|
||||||
|
\ . ale#Pad(ale#Var(a:buffer, 'c_flawfinder_options'))
|
||||||
|
\ . l:minlevel
|
||||||
|
\ . ' %t'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('c', {
|
||||||
|
\ 'name': 'flawfinder',
|
||||||
|
\ 'output_stream': 'stdout',
|
||||||
|
\ 'executable': {b -> ale#Var(b, 'c_flawfinder_executable')},
|
||||||
|
\ 'command': function('ale_linters#c#flawfinder#GetCommand'),
|
||||||
|
\ 'callback': 'ale#handlers#flawfinder#HandleFlawfinderFormat',
|
||||||
|
\})
|
||||||
37
dot_vim/plugged/ale/ale_linters/cairo/starknet.vim
Normal file
37
dot_vim/plugged/ale/ale_linters/cairo/starknet.vim
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
" Author: 0xHyoga <0xHyoga@gmx.com>
|
||||||
|
" Description: Report starknet-compile errors in cairo code
|
||||||
|
|
||||||
|
call ale#Set('cairo_starknet_executable', 'starknet-compile')
|
||||||
|
call ale#Set('cairo_starknet_options', '')
|
||||||
|
|
||||||
|
function! ale_linters#cairo#starknet#Handle(buffer, lines) abort
|
||||||
|
" Error always on the first line
|
||||||
|
" e.g ex01.cairo:20:6: Could not find module 'contracts.utils.ex00_base'. Searched in the following paths:
|
||||||
|
let l:pattern = '\v\.cairo:(\d+):(\d+):+ (.*)'
|
||||||
|
let l:output = []
|
||||||
|
|
||||||
|
for l:match in ale#util#GetMatches(a:lines, l:pattern)
|
||||||
|
call add(l:output, {
|
||||||
|
\ 'lnum': str2nr(l:match[1]),
|
||||||
|
\ 'col': str2nr(l:match[2]),
|
||||||
|
\ 'type': 'E',
|
||||||
|
\ 'text': l:match[3],
|
||||||
|
\})
|
||||||
|
endfor
|
||||||
|
|
||||||
|
return l:output
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#cairo#starknet#GetCommand(buffer) abort
|
||||||
|
let l:executable = ale#Var(a:buffer, 'cairo_starknet_executable')
|
||||||
|
|
||||||
|
return l:executable . ale#Pad(ale#Var(a:buffer, 'cairo_starknet_options')) . ' %s'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('cairo', {
|
||||||
|
\ 'name': 'starknet',
|
||||||
|
\ 'executable': {b -> ale#Var(b, 'cairo_starknet_executable')},
|
||||||
|
\ 'command': function('ale_linters#cairo#starknet#GetCommand'),
|
||||||
|
\ 'callback': 'ale_linters#cairo#starknet#Handle',
|
||||||
|
\ 'output_stream': 'stderr',
|
||||||
|
\})
|
||||||
54
dot_vim/plugged/ale/ale_linters/chef/cookstyle.vim
Normal file
54
dot_vim/plugged/ale/ale_linters/chef/cookstyle.vim
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
" Author: Raphael Hoegger - https://github.com/pfuender
|
||||||
|
" Description: Cookstyle (RuboCop based), a code style analyzer for Ruby files
|
||||||
|
|
||||||
|
call ale#Set('chef_cookstyle_executable', 'cookstyle')
|
||||||
|
call ale#Set('chef_cookstyle_options', '')
|
||||||
|
|
||||||
|
function! ale_linters#chef#cookstyle#GetCommand(buffer) abort
|
||||||
|
let l:options = ale#Var(a:buffer, 'chef_cookstyle_options')
|
||||||
|
|
||||||
|
return '%e' . ale#Pad(escape(l:options, '~')) . ' --force-exclusion --format json --stdin ' . ' %s'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#chef#cookstyle#Handle(buffer, lines) abort
|
||||||
|
if len(a:lines) == 0
|
||||||
|
return []
|
||||||
|
endif
|
||||||
|
|
||||||
|
let l:errors = ale#util#FuzzyJSONDecode(a:lines[0], {})
|
||||||
|
|
||||||
|
if !has_key(l:errors, 'summary')
|
||||||
|
\|| l:errors['summary']['offense_count'] == 0
|
||||||
|
\|| empty(l:errors['files'])
|
||||||
|
return []
|
||||||
|
endif
|
||||||
|
|
||||||
|
let l:output = []
|
||||||
|
|
||||||
|
for l:error in l:errors['files'][0]['offenses']
|
||||||
|
let l:start_col = str2nr(l:error['location']['start_column'])
|
||||||
|
let l:end_col = str2nr(l:error['location']['last_column'])
|
||||||
|
|
||||||
|
if !l:end_col
|
||||||
|
let l:end_col = l:start_col + 1
|
||||||
|
endif
|
||||||
|
|
||||||
|
call add(l:output, {
|
||||||
|
\ 'lnum': str2nr(l:error['location']['line']),
|
||||||
|
\ 'col': l:start_col,
|
||||||
|
\ 'end_col': l:end_col,
|
||||||
|
\ 'code': l:error['cop_name'],
|
||||||
|
\ 'text': l:error['message'],
|
||||||
|
\ 'type': l:error['severity'] is? 'convention' ? 'W' : 'E',
|
||||||
|
\})
|
||||||
|
endfor
|
||||||
|
|
||||||
|
return l:output
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('chef', {
|
||||||
|
\ 'name': 'cookstyle',
|
||||||
|
\ 'executable': {b -> ale#Var(b, 'chef_cookstyle_executable')},
|
||||||
|
\ 'command': function('ale_linters#chef#cookstyle#GetCommand'),
|
||||||
|
\ 'callback': 'ale_linters#chef#cookstyle#Handle',
|
||||||
|
\})
|
||||||
41
dot_vim/plugged/ale/ale_linters/chef/foodcritic.vim
Normal file
41
dot_vim/plugged/ale/ale_linters/chef/foodcritic.vim
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
" Author: Edward Larkey <edwlarkey@mac.com>
|
||||||
|
" Author: Jose Junior <jose.junior@gmail.com>
|
||||||
|
" Author: w0rp <devw0rp@gmail.com>
|
||||||
|
" Description: This file adds the foodcritic linter for Chef files.
|
||||||
|
|
||||||
|
call ale#Set('chef_foodcritic_executable', 'foodcritic')
|
||||||
|
call ale#Set('chef_foodcritic_options', '')
|
||||||
|
|
||||||
|
function! ale_linters#chef#foodcritic#GetCommand(buffer) abort
|
||||||
|
let l:options = ale#Var(a:buffer, 'chef_foodcritic_options')
|
||||||
|
|
||||||
|
return '%e' . ale#Pad(escape(l:options, '~')) . ' %s'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#chef#foodcritic#Handle(buffer, lines) abort
|
||||||
|
" Matches patterns line the following:
|
||||||
|
"
|
||||||
|
" FC002: Avoid string interpolation where not required: httpd.rb:13
|
||||||
|
let l:pattern = '\v([^:]+): (.+): ([a-zA-Z]?:?[^:]+):(\d+)$'
|
||||||
|
let l:output = []
|
||||||
|
|
||||||
|
for l:match in ale#util#GetMatches(a:lines, l:pattern)
|
||||||
|
call add(l:output, {
|
||||||
|
\ 'code': l:match[1],
|
||||||
|
\ 'text': l:match[2],
|
||||||
|
\ 'filename': l:match[3],
|
||||||
|
\ 'lnum': l:match[4] + 0,
|
||||||
|
\ 'type': 'W',
|
||||||
|
\})
|
||||||
|
endfor
|
||||||
|
|
||||||
|
return l:output
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('chef', {
|
||||||
|
\ 'name': 'foodcritic',
|
||||||
|
\ 'executable': {b -> ale#Var(b, 'chef_foodcritic_executable')},
|
||||||
|
\ 'command': function('ale_linters#chef#foodcritic#GetCommand'),
|
||||||
|
\ 'callback': 'ale_linters#chef#foodcritic#Handle',
|
||||||
|
\ 'lint_file': 1,
|
||||||
|
\})
|
||||||
47
dot_vim/plugged/ale/ale_linters/clojure/clj_kondo.vim
Normal file
47
dot_vim/plugged/ale/ale_linters/clojure/clj_kondo.vim
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
" Author: Masashi Iizuka <liquidz.uo@gmail.com>
|
||||||
|
" Description: linter for clojure using clj-kondo https://github.com/borkdude/clj-kondo
|
||||||
|
|
||||||
|
call ale#Set('clojure_clj_kondo_options', '--cache')
|
||||||
|
|
||||||
|
function! ale_linters#clojure#clj_kondo#GetCommand(buffer) abort
|
||||||
|
let l:options = ale#Var(a:buffer, 'clojure_clj_kondo_options')
|
||||||
|
|
||||||
|
let l:command = 'clj-kondo'
|
||||||
|
\ . ale#Pad(l:options)
|
||||||
|
\ . ' --lint -'
|
||||||
|
\ . ' --filename %s'
|
||||||
|
|
||||||
|
return l:command
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#clojure#clj_kondo#HandleCljKondoFormat(buffer, lines) abort
|
||||||
|
" output format
|
||||||
|
" <filename>:<line>:<column>: <issue type>: <message>
|
||||||
|
let l:pattern = '\v^[a-zA-Z]?:?[^:]+:(\d+)?:(\d+)?:? ((Exception|error|warning): ?(.+))$'
|
||||||
|
let l:output = []
|
||||||
|
|
||||||
|
for l:match in ale#util#GetMatches(a:lines, l:pattern)
|
||||||
|
let l:type = 'E'
|
||||||
|
|
||||||
|
if l:match[4] is? 'warning'
|
||||||
|
let l:type = 'W'
|
||||||
|
endif
|
||||||
|
|
||||||
|
call add(l:output, {
|
||||||
|
\ 'lnum': l:match[1] + 0,
|
||||||
|
\ 'col': l:match[2] + 0,
|
||||||
|
\ 'text': l:match[3],
|
||||||
|
\ 'type': l:type,
|
||||||
|
\})
|
||||||
|
endfor
|
||||||
|
|
||||||
|
return l:output
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('clojure', {
|
||||||
|
\ 'name': 'clj-kondo',
|
||||||
|
\ 'output_stream': 'stdout',
|
||||||
|
\ 'executable': 'clj-kondo',
|
||||||
|
\ 'command': function('ale_linters#clojure#clj_kondo#GetCommand'),
|
||||||
|
\ 'callback': 'ale_linters#clojure#clj_kondo#HandleCljKondoFormat',
|
||||||
|
\})
|
||||||
34
dot_vim/plugged/ale/ale_linters/clojure/joker.vim
Normal file
34
dot_vim/plugged/ale/ale_linters/clojure/joker.vim
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
" Author: Nic West <nicwest@mailbox.org>
|
||||||
|
" Description: linter for clojure using joker https://github.com/candid82/joker
|
||||||
|
|
||||||
|
function! ale_linters#clojure#joker#HandleJokerFormat(buffer, lines) abort
|
||||||
|
" output format
|
||||||
|
" <filename>:<line>:<column>: <issue type>: <message>
|
||||||
|
let l:pattern = '\v^[a-zA-Z]?:?[^:]+:(\d+):(\d+):? ((Read error|Parse error|Parse warning|Exception): ?(.+))$'
|
||||||
|
let l:output = []
|
||||||
|
|
||||||
|
for l:match in ale#util#GetMatches(a:lines, l:pattern)
|
||||||
|
let l:type = 'E'
|
||||||
|
|
||||||
|
if l:match[4] is? 'Parse warning'
|
||||||
|
let l:type = 'W'
|
||||||
|
endif
|
||||||
|
|
||||||
|
call add(l:output, {
|
||||||
|
\ 'lnum': l:match[1] + 0,
|
||||||
|
\ 'col': l:match[2] + 0,
|
||||||
|
\ 'text': l:match[3],
|
||||||
|
\ 'type': l:type,
|
||||||
|
\})
|
||||||
|
endfor
|
||||||
|
|
||||||
|
return l:output
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('clojure', {
|
||||||
|
\ 'name': 'joker',
|
||||||
|
\ 'output_stream': 'stderr',
|
||||||
|
\ 'executable': 'joker',
|
||||||
|
\ 'command': 'joker --working-dir %s --lint %t',
|
||||||
|
\ 'callback': 'ale_linters#clojure#joker#HandleJokerFormat',
|
||||||
|
\})
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
" Author: Yasuhiro Kiyota <yasuhiroki.duck@gmail.com>
|
||||||
|
" Description: Support cfn-python-lint for AWS Cloudformation template file
|
||||||
|
|
||||||
|
function! ale_linters#cloudformation#cfn_python_lint#Handle(buffer, lines) abort
|
||||||
|
" Matches patterns line the following:
|
||||||
|
"
|
||||||
|
" sample.template.yaml:96:7:96:15:E3012:Property Resources/Sample/Properties/FromPort should be of type Integer
|
||||||
|
let l:pattern = '\v^(.*):(\d+):(\d+):(\d+):(\d+):([[:alnum:]]+):(.*)$'
|
||||||
|
let l:output = []
|
||||||
|
|
||||||
|
for l:match in ale#util#GetMatches(a:lines, l:pattern)
|
||||||
|
let l:code = l:match[6]
|
||||||
|
|
||||||
|
if ale#path#IsBufferPath(a:buffer, l:match[1])
|
||||||
|
call add(l:output, {
|
||||||
|
\ 'lnum': l:match[2],
|
||||||
|
\ 'col': l:match[3],
|
||||||
|
\ 'end_lnum': l:match[4],
|
||||||
|
\ 'end_col': l:match[5],
|
||||||
|
\ 'code': l:code,
|
||||||
|
\ 'type': l:code[:0] is# 'E' ? 'E' : 'W',
|
||||||
|
\ 'text': l:match[7]
|
||||||
|
\})
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
|
||||||
|
return l:output
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('cloudformation', {
|
||||||
|
\ 'name': 'cloudformation',
|
||||||
|
\ 'aliases': ['cfn-lint'],
|
||||||
|
\ 'executable': 'cfn-lint',
|
||||||
|
\ 'command': 'cfn-lint --template %t --format parseable',
|
||||||
|
\ 'callback': 'ale_linters#cloudformation#cfn_python_lint#Handle',
|
||||||
|
\})
|
||||||
43
dot_vim/plugged/ale/ale_linters/cmake/cmake_lint.vim
Normal file
43
dot_vim/plugged/ale/ale_linters/cmake/cmake_lint.vim
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
" Author: Carl Smedstad <carl.smedstad at protonmail dot com>
|
||||||
|
" Description: cmake-lint for cmake files
|
||||||
|
|
||||||
|
let g:ale_cmake_cmake_lint_executable =
|
||||||
|
\ get(g:, 'ale_cmake_cmake_lint_executable', 'cmake-lint')
|
||||||
|
|
||||||
|
let g:ale_cmake_cmake_lint_options =
|
||||||
|
\ get(g:, 'ale_cmake_cmake_lint_options', '')
|
||||||
|
|
||||||
|
function! ale_linters#cmake#cmake_lint#Executable(buffer) abort
|
||||||
|
return ale#Var(a:buffer, 'cmake_cmake_lint_executable')
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#cmake#cmake_lint#Command(buffer) abort
|
||||||
|
let l:executable = ale_linters#cmake#cmake_lint#Executable(a:buffer)
|
||||||
|
let l:options = ale#Var(a:buffer, 'cmake_cmake_lint_options')
|
||||||
|
|
||||||
|
return ale#Escape(l:executable) . ' ' . l:options . ' %t'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#cmake#cmake_lint#Handle(buffer, lines) abort
|
||||||
|
let l:pattern = '\v^[^:]+:(\d+),?(\d+)?:\s\[([A-Z]\d+)\]\s(.+)$'
|
||||||
|
let l:output = []
|
||||||
|
|
||||||
|
for l:match in ale#util#GetMatches(a:lines, l:pattern)
|
||||||
|
call add(l:output, {
|
||||||
|
\ 'lnum': l:match[1] + 0,
|
||||||
|
\ 'col': l:match[2] + 0,
|
||||||
|
\ 'type': 'W',
|
||||||
|
\ 'code': l:match[3],
|
||||||
|
\ 'text': l:match[4],
|
||||||
|
\})
|
||||||
|
endfor
|
||||||
|
|
||||||
|
return l:output
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('cmake', {
|
||||||
|
\ 'name': 'cmake_lint',
|
||||||
|
\ 'executable': function('ale_linters#cmake#cmake_lint#Executable'),
|
||||||
|
\ 'command': function('ale_linters#cmake#cmake_lint#Command'),
|
||||||
|
\ 'callback': 'ale_linters#cmake#cmake_lint#Handle',
|
||||||
|
\})
|
||||||
24
dot_vim/plugged/ale/ale_linters/cmake/cmakelint.vim
Normal file
24
dot_vim/plugged/ale/ale_linters/cmake/cmakelint.vim
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
" Author: Kenneth Benzie <k.benzie83@gmail.com>
|
||||||
|
" Description: cmakelint for cmake files
|
||||||
|
|
||||||
|
let g:ale_cmake_cmakelint_executable =
|
||||||
|
\ get(g:, 'ale_cmake_cmakelint_executable', 'cmakelint')
|
||||||
|
|
||||||
|
let g:ale_cmake_cmakelint_options =
|
||||||
|
\ get(g:, 'ale_cmake_cmakelint_options', '')
|
||||||
|
|
||||||
|
function! ale_linters#cmake#cmakelint#Executable(buffer) abort
|
||||||
|
return ale#Var(a:buffer, 'cmake_cmakelint_executable')
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#cmake#cmakelint#Command(buffer) abort
|
||||||
|
return ale_linters#cmake#cmakelint#Executable(a:buffer)
|
||||||
|
\ . ' ' . ale#Var(a:buffer, 'cmake_cmakelint_options') . ' %t'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('cmake', {
|
||||||
|
\ 'name': 'cmakelint',
|
||||||
|
\ 'executable': function('ale_linters#cmake#cmakelint#Executable'),
|
||||||
|
\ 'command': function('ale_linters#cmake#cmakelint#Command'),
|
||||||
|
\ 'callback': 'ale#handlers#unix#HandleAsWarning',
|
||||||
|
\})
|
||||||
23
dot_vim/plugged/ale/ale_linters/coffee/coffee.vim
Normal file
23
dot_vim/plugged/ale/ale_linters/coffee/coffee.vim
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
" Author: KabbAmine - https://github.com/KabbAmine
|
||||||
|
" Description: Coffee for checking coffee files
|
||||||
|
|
||||||
|
function! ale_linters#coffee#coffee#GetExecutable(buffer) abort
|
||||||
|
return ale#path#ResolveLocalPath(
|
||||||
|
\ a:buffer,
|
||||||
|
\ 'node_modules/.bin/coffee',
|
||||||
|
\ 'coffee'
|
||||||
|
\)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#coffee#coffee#GetCommand(buffer) abort
|
||||||
|
return ale_linters#coffee#coffee#GetExecutable(a:buffer)
|
||||||
|
\ . ' -cp -s'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('coffee', {
|
||||||
|
\ 'name': 'coffee',
|
||||||
|
\ 'executable': function('ale_linters#coffee#coffee#GetExecutable'),
|
||||||
|
\ 'command': function('ale_linters#coffee#coffee#GetCommand'),
|
||||||
|
\ 'output_stream': 'stderr',
|
||||||
|
\ 'callback': 'ale#handlers#gcc#HandleGCCFormat',
|
||||||
|
\})
|
||||||
43
dot_vim/plugged/ale/ale_linters/coffee/coffeelint.vim
Normal file
43
dot_vim/plugged/ale/ale_linters/coffee/coffeelint.vim
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
" Author: Prashanth Chandra https://github.com/prashcr
|
||||||
|
" Description: coffeelint linter for coffeescript files
|
||||||
|
|
||||||
|
function! ale_linters#coffee#coffeelint#GetExecutable(buffer) abort
|
||||||
|
return ale#path#ResolveLocalPath(
|
||||||
|
\ a:buffer,
|
||||||
|
\ 'node_modules/.bin/coffeelint',
|
||||||
|
\ 'coffeelint'
|
||||||
|
\)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#coffee#coffeelint#GetCommand(buffer) abort
|
||||||
|
return ale_linters#coffee#coffeelint#GetExecutable(a:buffer)
|
||||||
|
\ . ' --stdin --reporter csv'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#coffee#coffeelint#Handle(buffer, lines) abort
|
||||||
|
" Matches patterns like the following:
|
||||||
|
"
|
||||||
|
" path,lineNumber,lineNumberEnd,level,message
|
||||||
|
" stdin,14,,error,Throwing strings is forbidden
|
||||||
|
"
|
||||||
|
" Note that we currently ignore lineNumberEnd for multiline errors
|
||||||
|
let l:pattern = 'stdin,\(\d\+\),\(\d*\),\(.\{-1,}\),\(.\+\)'
|
||||||
|
let l:output = []
|
||||||
|
|
||||||
|
for l:match in ale#util#GetMatches(a:lines, l:pattern)
|
||||||
|
call add(l:output, {
|
||||||
|
\ 'lnum': str2nr(l:match[1]),
|
||||||
|
\ 'type': l:match[3] is# 'error' ? 'E' : 'W',
|
||||||
|
\ 'text': l:match[4],
|
||||||
|
\})
|
||||||
|
endfor
|
||||||
|
|
||||||
|
return l:output
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('coffee', {
|
||||||
|
\ 'name': 'coffeelint',
|
||||||
|
\ 'executable': function('ale_linters#coffee#coffeelint#GetExecutable'),
|
||||||
|
\ 'command': function('ale_linters#coffee#coffeelint#GetCommand'),
|
||||||
|
\ 'callback': 'ale_linters#coffee#coffeelint#Handle',
|
||||||
|
\})
|
||||||
67
dot_vim/plugged/ale/ale_linters/cpp/cc.vim
Normal file
67
dot_vim/plugged/ale/ale_linters/cpp/cc.vim
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
" Author: w0rp <devw0rp@gmail.com>
|
||||||
|
" Description: A C++ compiler linter for C++ files with gcc/clang, etc.
|
||||||
|
|
||||||
|
call ale#Set('cpp_cc_executable', '<auto>')
|
||||||
|
call ale#Set('cpp_cc_options', '-std=c++14 -Wall')
|
||||||
|
call ale#Set('cpp_cc_use_header_lang_flag', -1)
|
||||||
|
call ale#Set('cpp_cc_header_exts', ['h', 'hpp'])
|
||||||
|
|
||||||
|
function! ale_linters#cpp#cc#GetExecutable(buffer) abort
|
||||||
|
let l:executable = ale#Var(a:buffer, 'cpp_cc_executable')
|
||||||
|
|
||||||
|
" Default to either clang++ or gcc.
|
||||||
|
if l:executable is# '<auto>'
|
||||||
|
if ale#engine#IsExecutable(a:buffer, 'clang++')
|
||||||
|
let l:executable = 'clang++'
|
||||||
|
else
|
||||||
|
let l:executable = 'gcc'
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
return l:executable
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#cpp#cc#GetCommand(buffer, output) abort
|
||||||
|
let l:cflags = ale#c#GetCFlags(a:buffer, a:output)
|
||||||
|
let l:ale_flags = ale#Var(a:buffer, 'cpp_cc_options')
|
||||||
|
|
||||||
|
if l:cflags =~# '-std='
|
||||||
|
let l:ale_flags = substitute(
|
||||||
|
\ l:ale_flags,
|
||||||
|
\ '-std=\(c\|gnu\)++[0-9]\{2\}',
|
||||||
|
\ '',
|
||||||
|
\ 'g')
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Select the correct language flag depending on the executable, options
|
||||||
|
" and file extension
|
||||||
|
let l:executable = ale_linters#cpp#cc#GetExecutable(a:buffer)
|
||||||
|
let l:use_header_lang_flag = ale#Var(a:buffer, 'cpp_cc_use_header_lang_flag')
|
||||||
|
let l:header_exts = ale#Var(a:buffer, 'cpp_cc_header_exts')
|
||||||
|
let l:lang_flag = ale#c#GetLanguageFlag(
|
||||||
|
\ a:buffer,
|
||||||
|
\ l:executable,
|
||||||
|
\ l:use_header_lang_flag,
|
||||||
|
\ l:header_exts,
|
||||||
|
\ 'c++')
|
||||||
|
|
||||||
|
" -iquote with the directory the file is in makes #include work for
|
||||||
|
" headers in the same directory.
|
||||||
|
"
|
||||||
|
" `-o /dev/null` or `-o null` is needed to catch all errors,
|
||||||
|
" -fsyntax-only doesn't catch everything.
|
||||||
|
return '%e -S -x ' . l:lang_flag
|
||||||
|
\ . ' -o ' . g:ale#util#nul_file
|
||||||
|
\ . ' -iquote %s:h'
|
||||||
|
\ . ale#Pad(l:cflags)
|
||||||
|
\ . ale#Pad(l:ale_flags) . ' -'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('cpp', {
|
||||||
|
\ 'name': 'cc',
|
||||||
|
\ 'aliases': ['gcc', 'clang', 'g++', 'clang++'],
|
||||||
|
\ 'output_stream': 'stderr',
|
||||||
|
\ 'executable': function('ale_linters#cpp#cc#GetExecutable'),
|
||||||
|
\ 'command': {b -> ale#c#RunMakeCommand(b, function('ale_linters#cpp#cc#GetCommand'))},
|
||||||
|
\ 'callback': 'ale#handlers#gcc#HandleGCCFormatWithIncludes',
|
||||||
|
\})
|
||||||
15
dot_vim/plugged/ale/ale_linters/cpp/ccls.vim
Normal file
15
dot_vim/plugged/ale/ale_linters/cpp/ccls.vim
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
" Author: Ye Jingchen <ye.jingchen@gmail.com>, Ben Falconer <ben@falconers.me.uk>, jtalowell <jtalowell@protonmail.com>
|
||||||
|
" Description: A language server for C++
|
||||||
|
|
||||||
|
call ale#Set('cpp_ccls_executable', 'ccls')
|
||||||
|
call ale#Set('cpp_ccls_init_options', {})
|
||||||
|
call ale#Set('c_build_dir', '')
|
||||||
|
|
||||||
|
call ale#linter#Define('cpp', {
|
||||||
|
\ 'name': 'ccls',
|
||||||
|
\ 'lsp': 'stdio',
|
||||||
|
\ 'executable': {b -> ale#Var(b, 'cpp_ccls_executable')},
|
||||||
|
\ 'command': '%e',
|
||||||
|
\ 'project_root': function('ale#handlers#ccls#GetProjectRoot'),
|
||||||
|
\ 'initialization_options': {b -> ale#handlers#ccls#GetInitOpts(b, 'cpp_ccls_init_options')},
|
||||||
|
\})
|
||||||
35
dot_vim/plugged/ale/ale_linters/cpp/clangcheck.vim
Normal file
35
dot_vim/plugged/ale/ale_linters/cpp/clangcheck.vim
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
" Author: gagbo <gagbobada@gmail.com>
|
||||||
|
" Description: clang-check linter for cpp files
|
||||||
|
|
||||||
|
call ale#Set('cpp_clangcheck_executable', 'clang-check')
|
||||||
|
call ale#Set('cpp_clangcheck_options', '')
|
||||||
|
call ale#Set('c_build_dir', '')
|
||||||
|
|
||||||
|
function! ale_linters#cpp#clangcheck#GetCommand(buffer) abort
|
||||||
|
let l:user_options = ale#Var(a:buffer, 'cpp_clangcheck_options')
|
||||||
|
|
||||||
|
" Try to find compilation database to link automatically
|
||||||
|
let l:build_dir = ale#Var(a:buffer, 'c_build_dir')
|
||||||
|
|
||||||
|
if empty(l:build_dir)
|
||||||
|
let [l:root, l:json_file] = ale#c#FindCompileCommands(a:buffer)
|
||||||
|
let l:build_dir = ale#path#Dirname(l:json_file)
|
||||||
|
endif
|
||||||
|
|
||||||
|
" The extra arguments in the command are used to prevent .plist files from
|
||||||
|
" being generated. These are only added if no build directory can be
|
||||||
|
" detected.
|
||||||
|
return '%e -analyze %s'
|
||||||
|
\ . (empty(l:build_dir) ? ' --extra-arg=-Xclang --extra-arg=-analyzer-output=text --extra-arg=-fno-color-diagnostics': '')
|
||||||
|
\ . ale#Pad(l:user_options)
|
||||||
|
\ . (!empty(l:build_dir) ? ' -p ' . ale#Escape(l:build_dir) : '')
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('cpp', {
|
||||||
|
\ 'name': 'clangcheck',
|
||||||
|
\ 'output_stream': 'stderr',
|
||||||
|
\ 'executable': {b -> ale#Var(b, 'cpp_clangcheck_executable')},
|
||||||
|
\ 'command': function('ale_linters#cpp#clangcheck#GetCommand'),
|
||||||
|
\ 'callback': 'ale#handlers#gcc#HandleGCCFormat',
|
||||||
|
\ 'lint_file': 1,
|
||||||
|
\})
|
||||||
22
dot_vim/plugged/ale/ale_linters/cpp/clangd.vim
Normal file
22
dot_vim/plugged/ale/ale_linters/cpp/clangd.vim
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
" Author: Andrey Melentyev <andrey.melentyev@protonmail.com>
|
||||||
|
" Description: Clangd language server
|
||||||
|
|
||||||
|
call ale#Set('cpp_clangd_executable', 'clangd')
|
||||||
|
call ale#Set('cpp_clangd_options', '')
|
||||||
|
call ale#Set('c_build_dir', '')
|
||||||
|
|
||||||
|
function! ale_linters#cpp#clangd#GetCommand(buffer) abort
|
||||||
|
let l:build_dir = ale#c#GetBuildDirectory(a:buffer)
|
||||||
|
|
||||||
|
return '%e'
|
||||||
|
\ . ale#Pad(ale#Var(a:buffer, 'cpp_clangd_options'))
|
||||||
|
\ . (!empty(l:build_dir) ? ' -compile-commands-dir=' . ale#Escape(l:build_dir) : '')
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('cpp', {
|
||||||
|
\ 'name': 'clangd',
|
||||||
|
\ 'lsp': 'stdio',
|
||||||
|
\ 'executable': {b -> ale#Var(b, 'cpp_clangd_executable')},
|
||||||
|
\ 'command': function('ale_linters#cpp#clangd#GetCommand'),
|
||||||
|
\ 'project_root': function('ale#c#FindProjectRoot'),
|
||||||
|
\})
|
||||||
53
dot_vim/plugged/ale/ale_linters/cpp/clangtidy.vim
Normal file
53
dot_vim/plugged/ale/ale_linters/cpp/clangtidy.vim
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
" Author: vdeurzen <tim@kompiler.org>, w0rp <devw0rp@gmail.com>,
|
||||||
|
" gagbo <gagbobada@gmail.com>
|
||||||
|
" Description: clang-tidy linter for cpp files
|
||||||
|
|
||||||
|
call ale#Set('cpp_clangtidy_executable', 'clang-tidy')
|
||||||
|
" Set this option to check the checks clang-tidy will apply.
|
||||||
|
call ale#Set('cpp_clangtidy_checks', [])
|
||||||
|
" Set this option to manually set some options for clang-tidy to use as compile
|
||||||
|
" flags.
|
||||||
|
" This will disable compile_commands.json detection.
|
||||||
|
call ale#Set('cpp_clangtidy_options', '')
|
||||||
|
" Set this option to manually set options for clang-tidy directly.
|
||||||
|
call ale#Set('cpp_clangtidy_extra_options', '')
|
||||||
|
call ale#Set('c_build_dir', '')
|
||||||
|
|
||||||
|
function! ale_linters#cpp#clangtidy#GetCommand(buffer, output) abort
|
||||||
|
let l:checks = join(ale#Var(a:buffer, 'cpp_clangtidy_checks'), ',')
|
||||||
|
let l:build_dir = ale#c#GetBuildDirectory(a:buffer)
|
||||||
|
let l:options = ''
|
||||||
|
|
||||||
|
" Get the extra options if we couldn't find a build directory.
|
||||||
|
if empty(l:build_dir)
|
||||||
|
let l:options = ale#Var(a:buffer, 'cpp_clangtidy_options')
|
||||||
|
let l:cflags = ale#c#GetCFlags(a:buffer, a:output)
|
||||||
|
let l:options .= !empty(l:options) ? ale#Pad(l:cflags) : l:cflags
|
||||||
|
|
||||||
|
" Tell clang-tidy a .h header with a C++ filetype in Vim is a C++ file
|
||||||
|
" only when compile-commands.json file is not there. Adding these
|
||||||
|
" flags makes clang-tidy completely ignore compile commands.
|
||||||
|
if expand('#' . a:buffer) =~# '\.h$'
|
||||||
|
let l:options .= !empty(l:options) ? ' -x c++' : '-x c++'
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Get the options to pass directly to clang-tidy
|
||||||
|
let l:extra_options = ale#Var(a:buffer, 'cpp_clangtidy_extra_options')
|
||||||
|
|
||||||
|
return '%e'
|
||||||
|
\ . (!empty(l:checks) ? ' -checks=' . ale#Escape(l:checks) : '')
|
||||||
|
\ . (!empty(l:extra_options) ? ' ' . ale#Escape(l:extra_options) : '')
|
||||||
|
\ . ' %s'
|
||||||
|
\ . (!empty(l:build_dir) ? ' -p ' . ale#Escape(l:build_dir) : '')
|
||||||
|
\ . (!empty(l:options) ? ' -- ' . l:options : '')
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('cpp', {
|
||||||
|
\ 'name': 'clangtidy',
|
||||||
|
\ 'output_stream': 'stdout',
|
||||||
|
\ 'executable': {b -> ale#Var(b, 'cpp_clangtidy_executable')},
|
||||||
|
\ 'command': {b -> ale#c#RunMakeCommand(b, function('ale_linters#cpp#clangtidy#GetCommand'))},
|
||||||
|
\ 'callback': 'ale#handlers#gcc#HandleGCCFormat',
|
||||||
|
\ 'lint_file': 1,
|
||||||
|
\})
|
||||||
32
dot_vim/plugged/ale/ale_linters/cpp/clazy.vim
Normal file
32
dot_vim/plugged/ale/ale_linters/cpp/clazy.vim
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
" Description: clazy linter for cpp files (clang-based and Qt-oriented)
|
||||||
|
|
||||||
|
call ale#Set('cpp_clazy_executable', 'clazy-standalone')
|
||||||
|
" Set this option to check the checks clazy will apply.
|
||||||
|
call ale#Set('cpp_clazy_checks', ['level1'])
|
||||||
|
" Set this option to manually set some options for clazy.
|
||||||
|
" This will disable compile_commands.json detection.
|
||||||
|
call ale#Set('cpp_clazy_options', '')
|
||||||
|
call ale#Set('c_build_dir', '')
|
||||||
|
|
||||||
|
function! ale_linters#cpp#clazy#GetCommand(buffer) abort
|
||||||
|
let l:checks = join(ale#Var(a:buffer, 'cpp_clazy_checks'), ',')
|
||||||
|
let l:build_dir = ale#c#GetBuildDirectory(a:buffer)
|
||||||
|
|
||||||
|
" Get the extra options if we couldn't find a build directory.
|
||||||
|
let l:options = ale#Var(a:buffer, 'cpp_clazy_options')
|
||||||
|
|
||||||
|
return '%e'
|
||||||
|
\ . (!empty(l:checks) ? ' -checks=' . ale#Escape(l:checks) : '')
|
||||||
|
\ . (!empty(l:build_dir) ? ' -p ' . ale#Escape(l:build_dir) : '')
|
||||||
|
\ . (!empty(l:options) ? ' ' . l:options : '')
|
||||||
|
\ . ' %s'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('cpp', {
|
||||||
|
\ 'name': 'clazy',
|
||||||
|
\ 'output_stream': 'stderr',
|
||||||
|
\ 'executable': {b -> ale#Var(b, 'cpp_clazy_executable')},
|
||||||
|
\ 'command': function('ale_linters#cpp#clazy#GetCommand'),
|
||||||
|
\ 'callback': 'ale#handlers#gcc#HandleGCCFormat',
|
||||||
|
\ 'lint_file': 1,
|
||||||
|
\})
|
||||||
29
dot_vim/plugged/ale/ale_linters/cpp/cppcheck.vim
Normal file
29
dot_vim/plugged/ale/ale_linters/cpp/cppcheck.vim
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
" Author: Bart Libert <bart.libert@gmail.com>
|
||||||
|
" Description: cppcheck linter for cpp files
|
||||||
|
|
||||||
|
call ale#Set('cpp_cppcheck_executable', 'cppcheck')
|
||||||
|
call ale#Set('cpp_cppcheck_options', '--enable=style')
|
||||||
|
|
||||||
|
function! ale_linters#cpp#cppcheck#GetCommand(buffer) abort
|
||||||
|
let l:compile_commands_option = ale#handlers#cppcheck#GetCompileCommandsOptions(a:buffer)
|
||||||
|
let l:buffer_path_include = empty(l:compile_commands_option)
|
||||||
|
\ ? ale#handlers#cppcheck#GetBufferPathIncludeOptions(a:buffer)
|
||||||
|
\ : ''
|
||||||
|
let l:template = ' --template=' . ale#Escape('{file}:{line}:{column}: {severity}:{inconclusive:inconclusive:} {message} [{id}]\\n{code}')
|
||||||
|
|
||||||
|
return '%e -q --language=c++'
|
||||||
|
\ . l:template
|
||||||
|
\ . ale#Pad(l:compile_commands_option)
|
||||||
|
\ . ale#Pad(ale#Var(a:buffer, 'cpp_cppcheck_options'))
|
||||||
|
\ . l:buffer_path_include
|
||||||
|
\ . ' %t'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('cpp', {
|
||||||
|
\ 'name': 'cppcheck',
|
||||||
|
\ 'output_stream': 'both',
|
||||||
|
\ 'executable': {b -> ale#Var(b, 'cpp_cppcheck_executable')},
|
||||||
|
\ 'cwd': function('ale#handlers#cppcheck#GetCwd'),
|
||||||
|
\ 'command': function('ale_linters#cpp#cppcheck#GetCommand'),
|
||||||
|
\ 'callback': 'ale#handlers#cppcheck#HandleCppCheckFormat',
|
||||||
|
\})
|
||||||
20
dot_vim/plugged/ale/ale_linters/cpp/cpplint.vim
Normal file
20
dot_vim/plugged/ale/ale_linters/cpp/cpplint.vim
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
" Author: Dawid Kurek https://github.com/dawikur
|
||||||
|
" Description: cpplint for cpp files
|
||||||
|
|
||||||
|
call ale#Set('cpp_cpplint_executable', 'cpplint')
|
||||||
|
call ale#Set('cpp_cpplint_options', '')
|
||||||
|
|
||||||
|
function! ale_linters#cpp#cpplint#GetCommand(buffer) abort
|
||||||
|
let l:options = ale#Var(a:buffer, 'cpp_cpplint_options')
|
||||||
|
|
||||||
|
return '%e' . ale#Pad(l:options) . ' %s'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('cpp', {
|
||||||
|
\ 'name': 'cpplint',
|
||||||
|
\ 'output_stream': 'stderr',
|
||||||
|
\ 'executable': {b -> ale#Var(b, 'cpp_cpplint_executable')},
|
||||||
|
\ 'command': function('ale_linters#cpp#cpplint#GetCommand'),
|
||||||
|
\ 'callback': 'ale#handlers#cpplint#HandleCppLintFormat',
|
||||||
|
\ 'lint_file': 1,
|
||||||
|
\})
|
||||||
30
dot_vim/plugged/ale/ale_linters/cpp/cquery.vim
Normal file
30
dot_vim/plugged/ale/ale_linters/cpp/cquery.vim
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
" Author: Ben Falconer <ben@falconers.me.uk>
|
||||||
|
" Description: A language server for C++
|
||||||
|
|
||||||
|
call ale#Set('cpp_cquery_executable', 'cquery')
|
||||||
|
call ale#Set('cpp_cquery_cache_directory', expand('~/.cache/cquery'))
|
||||||
|
|
||||||
|
function! ale_linters#cpp#cquery#GetProjectRoot(buffer) abort
|
||||||
|
" Try to find cquery configuration files first.
|
||||||
|
let l:config = ale#path#FindNearestFile(a:buffer, '.cquery')
|
||||||
|
|
||||||
|
if !empty(l:config)
|
||||||
|
return fnamemodify(l:config, ':h')
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Fall back on default project root detection.
|
||||||
|
return ale#c#FindProjectRoot(a:buffer)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#cpp#cquery#GetInitializationOptions(buffer) abort
|
||||||
|
return {'cacheDirectory': ale#Var(a:buffer, 'cpp_cquery_cache_directory')}
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('cpp', {
|
||||||
|
\ 'name': 'cquery',
|
||||||
|
\ 'lsp': 'stdio',
|
||||||
|
\ 'executable': {b -> ale#Var(b, 'cpp_cquery_executable')},
|
||||||
|
\ 'command': '%e',
|
||||||
|
\ 'project_root': function('ale_linters#cpp#cquery#GetProjectRoot'),
|
||||||
|
\ 'initialization_options': function('ale_linters#cpp#cquery#GetInitializationOptions'),
|
||||||
|
\})
|
||||||
5
dot_vim/plugged/ale/ale_linters/cpp/cspell.vim
Normal file
5
dot_vim/plugged/ale/ale_linters/cpp/cspell.vim
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
scriptencoding utf-8
|
||||||
|
" Author: David Houston <houstdav000>
|
||||||
|
" Description: cspell support for C++ files.
|
||||||
|
|
||||||
|
call ale#handlers#cspell#DefineLinter('cpp')
|
||||||
25
dot_vim/plugged/ale/ale_linters/cpp/flawfinder.vim
Normal file
25
dot_vim/plugged/ale/ale_linters/cpp/flawfinder.vim
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
" Author: Christian Gibbons <cgibbons@gmu.edu>
|
||||||
|
" Description: flawfinder linter for c++ files
|
||||||
|
|
||||||
|
call ale#Set('cpp_flawfinder_executable', 'flawfinder')
|
||||||
|
call ale#Set('cpp_flawfinder_options', '')
|
||||||
|
call ale#Set('cpp_flawfinder_minlevel', 1)
|
||||||
|
call ale#Set('c_flawfinder_error_severity', 6)
|
||||||
|
|
||||||
|
function! ale_linters#cpp#flawfinder#GetCommand(buffer) abort
|
||||||
|
" Set the minimum vulnerability level for flawfinder to bother with
|
||||||
|
let l:minlevel = ' --minlevel=' . ale#Var(a:buffer, 'cpp_flawfinder_minlevel')
|
||||||
|
|
||||||
|
return '%e -CDQS'
|
||||||
|
\ . ale#Var(a:buffer, 'cpp_flawfinder_options')
|
||||||
|
\ . l:minlevel
|
||||||
|
\ . ' %t'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('cpp', {
|
||||||
|
\ 'name': 'flawfinder',
|
||||||
|
\ 'output_stream': 'stdout',
|
||||||
|
\ 'executable': {b -> ale#Var(b, 'cpp_flawfinder_executable')},
|
||||||
|
\ 'command': function('ale_linters#cpp#flawfinder#GetCommand'),
|
||||||
|
\ 'callback': 'ale#handlers#flawfinder#HandleFlawfinderFormat',
|
||||||
|
\})
|
||||||
57
dot_vim/plugged/ale/ale_linters/crystal/ameba.vim
Normal file
57
dot_vim/plugged/ale/ale_linters/crystal/ameba.vim
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
" Author: Harrison Bachrach - https://github.com/HarrisonB
|
||||||
|
" Description: Ameba, a linter for crystal files
|
||||||
|
|
||||||
|
call ale#Set('crystal_ameba_executable', 'bin/ameba')
|
||||||
|
|
||||||
|
function! ale_linters#crystal#ameba#GetCommand(buffer) abort
|
||||||
|
let l:executable = ale#Var(a:buffer, 'crystal_ameba_executable')
|
||||||
|
|
||||||
|
return ale#Escape(l:executable)
|
||||||
|
\ . ' --format json '
|
||||||
|
\ . ale#Escape(expand('#' . a:buffer . ':p'))
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" Handle output from ameba
|
||||||
|
function! ale_linters#crystal#ameba#HandleAmebaOutput(buffer, lines) abort
|
||||||
|
if len(a:lines) == 0
|
||||||
|
return []
|
||||||
|
endif
|
||||||
|
|
||||||
|
let l:errors = ale#util#FuzzyJSONDecode(a:lines[0], {})
|
||||||
|
|
||||||
|
if !has_key(l:errors, 'summary')
|
||||||
|
\|| l:errors['summary']['issues_count'] == 0
|
||||||
|
\|| empty(l:errors['sources'])
|
||||||
|
return []
|
||||||
|
endif
|
||||||
|
|
||||||
|
let l:output = []
|
||||||
|
|
||||||
|
for l:error in l:errors['sources'][0]['issues']
|
||||||
|
let l:start_col = str2nr(l:error['location']['column'])
|
||||||
|
let l:end_col = str2nr(l:error['end_location']['column'])
|
||||||
|
|
||||||
|
if !l:end_col
|
||||||
|
let l:end_col = l:start_col + 1
|
||||||
|
endif
|
||||||
|
|
||||||
|
call add(l:output, {
|
||||||
|
\ 'lnum': str2nr(l:error['location']['line']),
|
||||||
|
\ 'col': l:start_col,
|
||||||
|
\ 'end_col': l:end_col,
|
||||||
|
\ 'code': l:error['rule_name'],
|
||||||
|
\ 'text': l:error['message'],
|
||||||
|
\ 'type': 'W',
|
||||||
|
\})
|
||||||
|
endfor
|
||||||
|
|
||||||
|
return l:output
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('crystal', {
|
||||||
|
\ 'name': 'ameba',
|
||||||
|
\ 'executable': {b -> ale#Var(b, 'crystal_ameba_executable')},
|
||||||
|
\ 'command': function('ale_linters#crystal#ameba#GetCommand'),
|
||||||
|
\ 'callback': 'ale_linters#crystal#ameba#HandleAmebaOutput',
|
||||||
|
\ 'lint_file': 1,
|
||||||
|
\})
|
||||||
35
dot_vim/plugged/ale/ale_linters/crystal/crystal.vim
Normal file
35
dot_vim/plugged/ale/ale_linters/crystal/crystal.vim
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
" Author: Jordan Andree <https://github.com/jordanandree>, David Alexander <opensource@thelonelyghost.com>
|
||||||
|
" Description: This file adds support for checking Crystal with crystal build
|
||||||
|
|
||||||
|
function! ale_linters#crystal#crystal#Handle(buffer, lines) abort
|
||||||
|
let l:output = []
|
||||||
|
|
||||||
|
for l:error in ale#util#FuzzyJSONDecode(a:lines, [])
|
||||||
|
if !has_key(l:error, 'file')
|
||||||
|
continue
|
||||||
|
endif
|
||||||
|
|
||||||
|
call add(l:output, {
|
||||||
|
\ 'lnum': l:error.line + 0,
|
||||||
|
\ 'col': l:error.column + 0,
|
||||||
|
\ 'text': l:error.message,
|
||||||
|
\})
|
||||||
|
endfor
|
||||||
|
|
||||||
|
return l:output
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#crystal#crystal#GetCommand(buffer) abort
|
||||||
|
return 'crystal build -f json --no-codegen --no-color -o '
|
||||||
|
\ . ale#Escape(g:ale#util#nul_file)
|
||||||
|
\ . ' %s'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('crystal', {
|
||||||
|
\ 'name': 'crystal',
|
||||||
|
\ 'executable': 'crystal',
|
||||||
|
\ 'output_stream': 'both',
|
||||||
|
\ 'lint_file': 1,
|
||||||
|
\ 'command': function('ale_linters#crystal#crystal#GetCommand'),
|
||||||
|
\ 'callback': 'ale_linters#crystal#crystal#Handle',
|
||||||
|
\})
|
||||||
90
dot_vim/plugged/ale/ale_linters/cs/csc.vim
Normal file
90
dot_vim/plugged/ale/ale_linters/cs/csc.vim
Normal file
@@ -0,0 +1,90 @@
|
|||||||
|
call ale#Set('cs_csc_options', '')
|
||||||
|
call ale#Set('cs_csc_source', '')
|
||||||
|
call ale#Set('cs_csc_assembly_path', [])
|
||||||
|
call ale#Set('cs_csc_assemblies', [])
|
||||||
|
|
||||||
|
function! ale_linters#cs#csc#GetCwd(buffer) abort
|
||||||
|
let l:cwd = ale#Var(a:buffer, 'cs_csc_source')
|
||||||
|
|
||||||
|
return !empty(l:cwd) ? l:cwd : expand('#' . a:buffer . ':p:h')
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#cs#csc#GetCommand(buffer) abort
|
||||||
|
" Pass assembly paths via the -lib: parameter.
|
||||||
|
let l:path_list = ale#Var(a:buffer, 'cs_csc_assembly_path')
|
||||||
|
|
||||||
|
let l:lib_option = !empty(l:path_list)
|
||||||
|
\ ? '/lib:' . join(map(copy(l:path_list), 'ale#Escape(v:val)'), ',')
|
||||||
|
\ : ''
|
||||||
|
|
||||||
|
" Pass paths to DLL files via the -r: parameter.
|
||||||
|
let l:assembly_list = ale#Var(a:buffer, 'cs_csc_assemblies')
|
||||||
|
|
||||||
|
let l:r_option = !empty(l:assembly_list)
|
||||||
|
\ ? '/r:' . join(map(copy(l:assembly_list), 'ale#Escape(v:val)'), ',')
|
||||||
|
\ : ''
|
||||||
|
|
||||||
|
" register temporary module target file with ale
|
||||||
|
" register temporary module target file with ALE.
|
||||||
|
let l:out = ale#command#CreateFile(a:buffer)
|
||||||
|
|
||||||
|
" The code is compiled as a module and the output is redirected to a
|
||||||
|
" temporary file.
|
||||||
|
return 'csc /unsafe'
|
||||||
|
\ . ale#Pad(ale#Var(a:buffer, 'cs_csc_options'))
|
||||||
|
\ . ale#Pad(l:lib_option)
|
||||||
|
\ . ale#Pad(l:r_option)
|
||||||
|
\ . ' /out:' . l:out
|
||||||
|
\ . ' /t:module'
|
||||||
|
\ . ' /recurse:' . ale#Escape('*.cs')
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#cs#csc#Handle(buffer, lines) abort
|
||||||
|
" Look for lines like the following.
|
||||||
|
"
|
||||||
|
" Tests.cs(12,29): error CSXXXX: ; expected
|
||||||
|
"
|
||||||
|
" NOTE: pattern also captures file name as linter compiles all
|
||||||
|
" files within the source tree rooted at the specified source
|
||||||
|
" path and not just the file loaded in the buffer
|
||||||
|
let l:patterns = [
|
||||||
|
\ '^\v(.+\.cs)\((\d+),(\d+)\)\:\s+([^ ]+)\s+([cC][sS][^ ]+):\s(.+)$',
|
||||||
|
\ '^\v([^ ]+)\s+([Cc][sS][^ ]+):\s+(.+)$',
|
||||||
|
\]
|
||||||
|
let l:output = []
|
||||||
|
let l:dir = ale_linters#cs#csc#GetCwd(a:buffer)
|
||||||
|
|
||||||
|
for l:match in ale#util#GetMatches(a:lines, l:patterns)
|
||||||
|
if len(l:match) > 6 && strlen(l:match[5]) > 2 && l:match[5][:1] is? 'CS'
|
||||||
|
call add(l:output, {
|
||||||
|
\ 'filename': ale#path#GetAbsPath(l:dir, l:match[1]),
|
||||||
|
\ 'lnum': l:match[2] + 0,
|
||||||
|
\ 'col': l:match[3] + 0,
|
||||||
|
\ 'type': l:match[4] is# 'error' ? 'E' : 'W',
|
||||||
|
\ 'code': l:match[5],
|
||||||
|
\ 'text': l:match[6] ,
|
||||||
|
\})
|
||||||
|
elseif strlen(l:match[2]) > 2 && l:match[2][:1] is? 'CS'
|
||||||
|
call add(l:output, {
|
||||||
|
\ 'filename':'<csc>',
|
||||||
|
\ 'lnum': -1,
|
||||||
|
\ 'col': -1,
|
||||||
|
\ 'type': l:match[1] is# 'error' ? 'E' : 'W',
|
||||||
|
\ 'code': l:match[2],
|
||||||
|
\ 'text': l:match[3],
|
||||||
|
\})
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
|
||||||
|
return l:output
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('cs',{
|
||||||
|
\ 'name': 'csc',
|
||||||
|
\ 'output_stream': 'stdout',
|
||||||
|
\ 'executable': 'csc',
|
||||||
|
\ 'cwd': function('ale_linters#cs#csc#GetCwd'),
|
||||||
|
\ 'command': function('ale_linters#cs#csc#GetCommand'),
|
||||||
|
\ 'callback': 'ale_linters#cs#csc#Handle',
|
||||||
|
\ 'lint_file': 1
|
||||||
|
\})
|
||||||
5
dot_vim/plugged/ale/ale_linters/cs/cspell.vim
Normal file
5
dot_vim/plugged/ale/ale_linters/cs/cspell.vim
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
scriptencoding utf-8
|
||||||
|
" Author: David Houston <houstdav000>
|
||||||
|
" Description: cspell support for C# files.
|
||||||
|
|
||||||
|
call ale#handlers#cspell#DefineLinter('cs')
|
||||||
37
dot_vim/plugged/ale/ale_linters/cs/mcs.vim
Normal file
37
dot_vim/plugged/ale/ale_linters/cs/mcs.vim
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
let g:ale_cs_mcs_options = get(g:, 'ale_cs_mcs_options', '')
|
||||||
|
|
||||||
|
function! ale_linters#cs#mcs#GetCommand(buffer) abort
|
||||||
|
let l:options = ale#Var(a:buffer, 'cs_mcs_options')
|
||||||
|
|
||||||
|
return 'mcs -unsafe --parse'
|
||||||
|
\ . (!empty(l:options) ? ' ' . l:options : '')
|
||||||
|
\ . ' %t'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#cs#mcs#Handle(buffer, lines) abort
|
||||||
|
" Look for lines like the following.
|
||||||
|
"
|
||||||
|
" Tests.cs(12,29): error CSXXXX: ; expected
|
||||||
|
let l:pattern = '^\v(.+\.cs)\((\d+),(\d+)\)\: ([^ ]+) ([^ ]+): (.+)$'
|
||||||
|
let l:output = []
|
||||||
|
|
||||||
|
for l:match in ale#util#GetMatches(a:lines, l:pattern)
|
||||||
|
call add(l:output, {
|
||||||
|
\ 'lnum': l:match[2] + 0,
|
||||||
|
\ 'col': l:match[3] + 0,
|
||||||
|
\ 'type': l:match[4] is# 'error' ? 'E' : 'W',
|
||||||
|
\ 'code': l:match[5],
|
||||||
|
\ 'text': l:match[6],
|
||||||
|
\})
|
||||||
|
endfor
|
||||||
|
|
||||||
|
return l:output
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('cs',{
|
||||||
|
\ 'name': 'mcs',
|
||||||
|
\ 'output_stream': 'stderr',
|
||||||
|
\ 'executable': 'mcs',
|
||||||
|
\ 'command': function('ale_linters#cs#mcs#GetCommand'),
|
||||||
|
\ 'callback': 'ale_linters#cs#mcs#Handle',
|
||||||
|
\})
|
||||||
91
dot_vim/plugged/ale/ale_linters/cs/mcsc.vim
Normal file
91
dot_vim/plugged/ale/ale_linters/cs/mcsc.vim
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
call ale#Set('cs_mcsc_options', '')
|
||||||
|
call ale#Set('cs_mcsc_source', '')
|
||||||
|
call ale#Set('cs_mcsc_assembly_path', [])
|
||||||
|
call ale#Set('cs_mcsc_assemblies', [])
|
||||||
|
|
||||||
|
function! ale_linters#cs#mcsc#GetCwd(buffer) abort
|
||||||
|
let l:cwd = ale#Var(a:buffer, 'cs_mcsc_source')
|
||||||
|
|
||||||
|
return !empty(l:cwd) ? l:cwd : expand('#' . a:buffer . ':p:h')
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#cs#mcsc#GetCommand(buffer) abort
|
||||||
|
" Pass assembly paths via the -lib: parameter.
|
||||||
|
let l:path_list = ale#Var(a:buffer, 'cs_mcsc_assembly_path')
|
||||||
|
|
||||||
|
let l:lib_option = !empty(l:path_list)
|
||||||
|
\ ? '-lib:' . join(map(copy(l:path_list), 'ale#Escape(v:val)'), ',')
|
||||||
|
\ : ''
|
||||||
|
|
||||||
|
" Pass paths to DLL files via the -r: parameter.
|
||||||
|
let l:assembly_list = ale#Var(a:buffer, 'cs_mcsc_assemblies')
|
||||||
|
|
||||||
|
let l:r_option = !empty(l:assembly_list)
|
||||||
|
\ ? '-r:' . join(map(copy(l:assembly_list), 'ale#Escape(v:val)'), ',')
|
||||||
|
\ : ''
|
||||||
|
|
||||||
|
" register temporary module target file with ale
|
||||||
|
" register temporary module target file with ALE.
|
||||||
|
let l:out = ale#command#CreateFile(a:buffer)
|
||||||
|
|
||||||
|
" The code is compiled as a module and the output is redirected to a
|
||||||
|
" temporary file.
|
||||||
|
return 'mcs -unsafe'
|
||||||
|
\ . ale#Pad(ale#Var(a:buffer, 'cs_mcsc_options'))
|
||||||
|
\ . ale#Pad(l:lib_option)
|
||||||
|
\ . ale#Pad(l:r_option)
|
||||||
|
\ . ' -out:' . l:out
|
||||||
|
\ . ' -t:module'
|
||||||
|
\ . ' -recurse:' . ale#Escape('*.cs')
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#cs#mcsc#Handle(buffer, lines) abort
|
||||||
|
" Look for lines like the following.
|
||||||
|
"
|
||||||
|
" Tests.cs(12,29): error CSXXXX: ; expected
|
||||||
|
"
|
||||||
|
" NOTE: pattern also captures file name as linter compiles all
|
||||||
|
" files within the source tree rooted at the specified source
|
||||||
|
" path and not just the file loaded in the buffer
|
||||||
|
let l:patterns = [
|
||||||
|
\ '^\v(.+\.cs)\((\d+),(\d+)\)\:\s+([^ ]+)\s+([cC][sS][^ ]+):\s(.+)$',
|
||||||
|
\ '^\v([^ ]+)\s+([Cc][sS][^ ]+):\s+(.+)$',
|
||||||
|
\]
|
||||||
|
let l:output = []
|
||||||
|
|
||||||
|
let l:dir = ale_linters#cs#mcsc#GetCwd(a:buffer)
|
||||||
|
|
||||||
|
for l:match in ale#util#GetMatches(a:lines, l:patterns)
|
||||||
|
if len(l:match) > 6 && strlen(l:match[5]) > 2 && l:match[5][:1] is? 'CS'
|
||||||
|
call add(l:output, {
|
||||||
|
\ 'filename': ale#path#GetAbsPath(l:dir, l:match[1]),
|
||||||
|
\ 'lnum': l:match[2] + 0,
|
||||||
|
\ 'col': l:match[3] + 0,
|
||||||
|
\ 'type': l:match[4] is# 'error' ? 'E' : 'W',
|
||||||
|
\ 'code': l:match[5],
|
||||||
|
\ 'text': l:match[6] ,
|
||||||
|
\})
|
||||||
|
elseif strlen(l:match[2]) > 2 && l:match[2][:1] is? 'CS'
|
||||||
|
call add(l:output, {
|
||||||
|
\ 'filename':'<mcs>',
|
||||||
|
\ 'lnum': -1,
|
||||||
|
\ 'col': -1,
|
||||||
|
\ 'type': l:match[1] is# 'error' ? 'E' : 'W',
|
||||||
|
\ 'code': l:match[2],
|
||||||
|
\ 'text': l:match[3],
|
||||||
|
\})
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
|
||||||
|
return l:output
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('cs',{
|
||||||
|
\ 'name': 'mcsc',
|
||||||
|
\ 'output_stream': 'stderr',
|
||||||
|
\ 'executable': 'mcs',
|
||||||
|
\ 'cwd': function('ale_linters#cs#mcsc#GetCwd'),
|
||||||
|
\ 'command': function('ale_linters#cs#mcsc#GetCommand'),
|
||||||
|
\ 'callback': 'ale_linters#cs#mcsc#Handle',
|
||||||
|
\ 'lint_file': 1
|
||||||
|
\})
|
||||||
5
dot_vim/plugged/ale/ale_linters/css/cspell.vim
Normal file
5
dot_vim/plugged/ale/ale_linters/css/cspell.vim
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
scriptencoding utf-8
|
||||||
|
" Author: David Houston <houstdav000>
|
||||||
|
" Description: cspell support for CSS files.
|
||||||
|
|
||||||
|
call ale#handlers#cspell#DefineLinter('css')
|
||||||
18
dot_vim/plugged/ale/ale_linters/css/csslint.vim
Normal file
18
dot_vim/plugged/ale/ale_linters/css/csslint.vim
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
" Author: w0rp <devw0rp@gmail.com>
|
||||||
|
" Description: This file adds support for checking CSS code with csslint.
|
||||||
|
|
||||||
|
function! ale_linters#css#csslint#GetCommand(buffer) abort
|
||||||
|
let l:csslintrc = ale#path#FindNearestFile(a:buffer, '.csslintrc')
|
||||||
|
let l:config_option = !empty(l:csslintrc)
|
||||||
|
\ ? '--config=' . ale#Escape(l:csslintrc)
|
||||||
|
\ : ''
|
||||||
|
|
||||||
|
return 'csslint --format=compact ' . l:config_option . ' %t'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('css', {
|
||||||
|
\ 'name': 'csslint',
|
||||||
|
\ 'executable': 'csslint',
|
||||||
|
\ 'command': function('ale_linters#css#csslint#GetCommand'),
|
||||||
|
\ 'callback': 'ale#handlers#css#HandleCSSLintFormat',
|
||||||
|
\})
|
||||||
9
dot_vim/plugged/ale/ale_linters/css/fecs.vim
Normal file
9
dot_vim/plugged/ale/ale_linters/css/fecs.vim
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
" Author: harttle <yangjvn@126.com>
|
||||||
|
" Description: fecs for CSS files
|
||||||
|
|
||||||
|
call ale#linter#Define('css', {
|
||||||
|
\ 'name': 'fecs',
|
||||||
|
\ 'executable': function('ale#handlers#fecs#GetExecutable'),
|
||||||
|
\ 'command': function('ale#handlers#fecs#GetCommand'),
|
||||||
|
\ 'callback': 'ale#handlers#fecs#Handle',
|
||||||
|
\})
|
||||||
19
dot_vim/plugged/ale/ale_linters/css/stylelint.vim
Normal file
19
dot_vim/plugged/ale/ale_linters/css/stylelint.vim
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
" Author: diartyz <diartyz@gmail.com>
|
||||||
|
|
||||||
|
call ale#Set('css_stylelint_executable', 'stylelint')
|
||||||
|
call ale#Set('css_stylelint_options', '')
|
||||||
|
call ale#Set('css_stylelint_use_global', get(g:, 'ale_use_global_executables', 0))
|
||||||
|
|
||||||
|
function! ale_linters#css#stylelint#GetCommand(buffer) abort
|
||||||
|
return '%e ' . ale#Pad(ale#Var(a:buffer, 'css_stylelint_options'))
|
||||||
|
\ . ' --stdin-filename %s'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('css', {
|
||||||
|
\ 'name': 'stylelint',
|
||||||
|
\ 'executable': {b -> ale#path#FindExecutable(b, 'css_stylelint', [
|
||||||
|
\ 'node_modules/.bin/stylelint',
|
||||||
|
\ ])},
|
||||||
|
\ 'command': function('ale_linters#css#stylelint#GetCommand'),
|
||||||
|
\ 'callback': 'ale#handlers#css#HandleStyleLintFormat',
|
||||||
|
\})
|
||||||
16
dot_vim/plugged/ale/ale_linters/css/vscodecss.vim
Normal file
16
dot_vim/plugged/ale/ale_linters/css/vscodecss.vim
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
" Author: Dalius Dobravolskas <dalius.dobravolskas@gmail.com>
|
||||||
|
" Description: VSCode css language server
|
||||||
|
|
||||||
|
function! ale_linters#css#vscodecss#GetProjectRoot(buffer) abort
|
||||||
|
let l:git_path = ale#path#FindNearestDirectory(a:buffer, '.git')
|
||||||
|
|
||||||
|
return !empty(l:git_path) ? fnamemodify(l:git_path, ':h:h') : ''
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('css', {
|
||||||
|
\ 'name': 'vscodecss',
|
||||||
|
\ 'lsp': 'stdio',
|
||||||
|
\ 'executable': 'vscode-css-language-server',
|
||||||
|
\ 'command': '%e --stdio',
|
||||||
|
\ 'project_root': function('ale_linters#css#vscodecss#GetProjectRoot'),
|
||||||
|
\})
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user