2018-03-17 23:59:01 +00:00
" TODO better name
function ! GetStatusFrag ( condition , colorname , conditionprefix , text ) abort "{{{
let l :frag = '%#' . a :colorname . '#'
let l :frag .= a :conditionprefix
let l :frag .= '%{(' . a :condition . ")?'" . a :text . "':''}"
return l :frag
endfunction "}}}
function ! CheckLineEnding ( ) abort "{{{
:normal $
if getline ( '.' ) [col ( '.' ) -1 ] = = ';' | | getline ( '.' ) [col ( '.' ) -1 ] = = ','
:startinsert
else
:startinsert !
endif
endfunction "}}}
" get name of syntax item
function ! SyntaxItem ( ) abort "{{{
return synIDattr ( synID ( line ( '.' ) , col ( '.' ) , 1 ) , 'name' ) . ' -> ' . synIDattr ( synIDtrans ( synID ( line ( '.' ) , col ( '.' ) , 1 ) ) , 'name' )
endfunction
nnoremap < space > p :echom SyntaxItem ( ) < CR > "}}}
" devdocs DD
" https://gist.github.com/romainl/8d3b73428b4366f75a19be2dad2f0987#file-devdocs-vim
function ! s :Get_env ( ) abort "{{{
if has ( 'win64' ) | | has ( 'win32' ) | | has ( 'win16' )
return 'WINDOWS'
else
return toupper ( substitute ( system ( 'uname' ) , '\n' , '' , '' ) )
endif
endfunction
" What command to use on what system
let s :cmds = {'DARWIN' : 'open' , 'LINUX' : 'qutebrowser' , 'WINDOWS' : 'start' }
" Build the URL stub
let s :stub = s :cmds [< SID > Get_env ( ) ] . " 'http://devdocs.io/?q="
command ! - nargs = * DD silent ! call system ( len ( split ( < q - args > , ' ' ) ) = = 0 ?
\ s :stub . &ft . ' ' . expand ( '<cword>' ) . "'" : len ( split ( < q - args > , ' ' ) ) = = 1 ?
\ s :stub . &ft . ' ' . < q - args > . "'" : s :stub . < q - args > . "'" )
"}}}
" use ranger as file manager
if ! exists ( '*RangerExplorer' ) "{{{
function RangerExplorer ( ) abort
exec 'silent !ranger --choosefile=/tmp/vim_ranger_current_file ' . expand ( '%:p:h' )
if filereadable ( '/tmp/vim_ranger_current_file' )
exec 'edit ' . system ( 'cat /tmp/vim_ranger_current_file' )
call system ( 'rm /tmp/vim_ranger_current_file' )
endif
redraw !
endfun
map < space > ra :call RangerExplorer ( ) < CR >
endif "}}}
2018-03-18 16:25:44 +00:00
function ! SetColorColumn ( ) "{{{
if &buftype = = ''
setlocal colorcolumn = 80
endif
endfunction
"}}}
2018-03-17 23:59:01 +00:00
function ! GetLinterStatus ( key ) abort "{{{
let l :linter = ale #statusline #Count ( bufnr ( '' ) )
return l :linter [a :key ]
endfunction
"}}}
2018-03-18 16:25:44 +00:00
" old linter status function
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' , l :all_non_errors , l :all_errors )
endfunction
"}}}
2018-03-29 20:41:18 +00:00
" Shell command
" based on
" http://vim.wikia.com/wiki/VimTip1599
command ! - complete = shellcmd - nargs = + Shell call s :RunShellCommand ( < q - args > )
let g :shell_scratch_buffer_nr = -1
function ! s :RunShellCommand ( cmdline ) abort
"{{{
let l :expanded_cmdline = a :cmdline
for l :part in split ( a :cmdline , ' ' )
if l :part [0 ] = ~ '\v[%#<]'
let l :expanded_part = fnameescape ( expand ( l :part ) )
let l :expanded_cmdline = substitute ( l :expanded_cmdline , l :part , l :expanded_part , '' )
endif
endfor
if g :shell_scratch_buffer_nr > -1
let l :win_nr = bufwinnr ( g :shell_scratch_buffer_nr )
if l :win_nr < 0
execute 'bdelete' g :shell_scratch_buffer_nr
top new
let g :shell_scratch_buffer_nr = bufnr ( '%' )
else
execute l :win_nr . ' wincmd w'
setlocal modifiable
%delete _
endif
else
top new
let g :shell_scratch_buffer_nr = bufnr ( '%' )
endif
setlocal buftype = nofile bufhidden = wipe nobuflisted noswapfile nowrap
nnoremap < buffer > q :bdelete < CR >
augroup ResetShellBufferNr
autocmd ! * < buffer >
autocmd BufUnload < buffer > let g :shell_scratch_buffer_nr = -1
augroup END
" call setline(1, 'You entered: ' . a:cmdline)
" call setline(2, 'Expanded Form: ' .l:expanded_cmdline)
" call setline(3,substitute(getline(2),'.','=','g'))
execute '$read !' . l :expanded_cmdline
1
setlocal nomodifiable
if ! exists ( 'b:shell_line_count' )
let b :shell_line_count = line ( '$' )
if b :shell_line_count > 25
let b :shell_line_count = 20
endif
execute 'resize' b :shell_line_count + 1
endif
wincmd p
endfunction
"}}}
2018-03-18 16:25:44 +00:00
2018-03-30 22:31:10 +00:00
" https://stackoverflow.com/a/40195855
function ! SaveAndExecutePython ( )
" SOURCE [reusable window]: https://github.com/fatih/vim-go/blob/master/autoload/go/ui.vim
" save and reload current file
silent execute "update | edit"
" get file path of current file
let s :current_buffer_file_path = expand ( "%" )
let s :output_buffer_name = "Python"
let s :output_buffer_filetype = "output"
" reuse existing buffer window if it exists otherwise create a new one
if ! exists ( "s:buf_nr" ) | | ! bufexists ( s :buf_nr )
silent execute 'top new ' . s :output_buffer_name
let s :buf_nr = bufnr ( '%' )
elseif bufwinnr ( s :buf_nr ) = = -1
silent execute 'top new'
silent execute s :buf_nr . 'buffer'
elseif bufwinnr ( s :buf_nr ) ! = bufwinnr ( '%' )
silent execute bufwinnr ( s :buf_nr ) . 'wincmd w'
endif
2018-03-18 16:25:44 +00:00
2018-03-30 22:31:10 +00:00
silent execute "setlocal filetype=" . s :output_buffer_filetype
setlocal bufhidden = delete
setlocal buftype = nofile
setlocal noswapfile
setlocal nobuflisted
setlocal winfixheight
setlocal cursorline " make it easy to distinguish
setlocal nonumber
setlocal norelativenumber
setlocal showbreak = ""
nnoremap < buffer > q :bdelete < CR >
" clear the buffer
setlocal noreadonly
" setlocal modifiable
%delete _
" add the console output
silent execute ".!python " . shellescape ( s :current_buffer_file_path , 1 )
" resize window to content length
" Note: This is annoying because if you print a lot of lines then your code buffer is forced to a height of one line every time you run this function.
" However without this line the buffer starts off as a default size and if you resize the buffer then it keeps that custom size after repeated runs of this function.
" But if you close the output buffer then it returns to using the default size when its recreated
"execute 'resize' . line('$')
" make the buffer non modifiable
setlocal readonly
" setlocal nomodifiable
endfunction
2018-03-18 16:25:44 +00:00
2018-03-17 23:59:01 +00:00
" vim: foldmethod=marker