Shell command
This commit is contained in:
parent
afd58df252
commit
5bd71dd921
|
@ -80,6 +80,63 @@ function! LinterStatus() abort "{{{
|
||||||
endfunction
|
endfunction
|
||||||
"}}}
|
"}}}
|
||||||
|
|
||||||
|
" 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
|
||||||
|
"}}}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue