From: Teemu Likonen <hidden> Date: 2016-06-15 22:45:19
Here's a very simple idea for using Git from Vim editor. Add these lines
to your ~/.vimrc file:
command! -complete=file -nargs=* Git call s:RunShellCommand('git '.<q-args>)
command! -complete=file -nargs=* Svn call s:RunShellCommand('svn '.<q-args>)
command! -complete=file -nargs=+ Shell call s:RunShellCommand(<q-args>)
let $EDITOR = '/usr/bin/gvim --nofork'
function! s:RunShellCommand(cmdline)
botright new
setlocal buftype=nofile bufhidden=wipe nobuflisted noswapfile
setlocal nowrap
call setline(1,a:cmdline)
call setline(2,substitute(a:cmdline,'.','=','g'))
execute 'silent 2read !'.escape(a:cmdline,'()%#')
setlocal nomodifiable
1
endfunction
Now, command :Git works just like "git" from shell except that the
output is displayed in a Vim scratch buffer/window. The buffer will be
wiped out from memory when the window is closed. Filename completion and
piping works. Examples:
:Git diff --cached
:Git help merge
:Git branch | column
(I am aware that there are VCS plugins for Vim. I happen like this
approach better because it works just like the command line Git which
I'm familiar with.)
As a "side effect" this also adds similar :Svn command as well as :Shell
command which can be used to run any shell command and have its output
displayed in a Vim window. Using the first two letters of :Shell is
enough in my system because I don't have other custom commands which
start with letters "Sh".
:Sh ls -l
From: Michael Wookey <hidden> Date: 2016-06-15 22:45:19
Here's a very simple idea for using Git from Vim editor. Add these lines
to your ~/.vimrc file:
command! -complete=file -nargs=* Git call s:RunShellCommand('git '.<q-args>)
command! -complete=file -nargs=* Svn call s:RunShellCommand('svn '.<q-args>)
command! -complete=file -nargs=+ Shell call s:RunShellCommand(<q-args>)
let $EDITOR = '/usr/bin/gvim --nofork'
function! s:RunShellCommand(cmdline)
botright new
setlocal buftype=nofile bufhidden=wipe nobuflisted noswapfile
setlocal nowrap
call setline(1,a:cmdline)
call setline(2,substitute(a:cmdline,'.','=','g'))
execute 'silent 2read !'.escape(a:cmdline,'()%#')
setlocal nomodifiable
1
endfunction
If you alter the RunShellCommand() function to the following -
function! s:RunShellCommand(cmdline)
botright new
setlocal buftype=nofile bufhidden=wipe nobuflisted noswapfile
setlocal nowrap
if stridx(a:cmdline, "diff") > 0
set filetype=diff
endif
execute 'silent 0read !'.escape(a:cmdline,'%#')
setlocal nomodifiable
1
endfunction
Then Vim will apply diff syntax highlighting to the scratch buffer
when a "diff" command is executed.
For example:
:Git diff
:Git diff --cached
etc..
From: Thomas Adam <hidden> Date: 2016-06-15 22:45:19
Hi --
2008/9/6 Teemu Likonen [off-list ref]:
Here's a very simple idea for using Git from Vim editor. Add these lines
to your ~/.vimrc file:
command! -complete=file -nargs=* Git call s:RunShellCommand('git '.<q-args>)
command! -complete=file -nargs=* Svn call s:RunShellCommand('svn '.<q-args>)
command! -complete=file -nargs=+ Shell call s:RunShellCommand(<q-args>)
From: Teemu Likonen <hidden> Date: 2016-06-15 22:45:19
Thomas Adam wrote (2008-09-07 14:23 +0100):
2008/9/6 Teemu Likonen [off-list ref]:
quoted
Here's a very simple idea for using Git from Vim editor. Add these lines
to your ~/.vimrc file:
command! -complete=file -nargs=* Git call s:RunShellCommand('git '.<q-args>)
command! -complete=file -nargs=* Svn call s:RunShellCommand('svn '.<q-args>)
command! -complete=file -nargs=+ Shell call s:RunShellCommand(<q-args>)
I have tried it but I made my own because I'm familiar with git's
command line interface and want to use it inside Vim without (too many)
restrictions. I find this approach easier because I don't need to learn
another interface layer.
I'd like to add a hint that Vim command line expands % to current file
name. Examples:
:Git add %
:Git blame -C %
From: Teemu Likonen <hidden> Date: 2016-06-15 22:45:19
Teemu Likonen wrote (2008-09-07 16:13 +0300):
quoted
Then Vim will apply diff syntax highlighting to the scratch buffer
when a "diff" command is executed.
Good idea. I implemented the same thing this way:
if match(a:cmdline,'\v^(git|hg|svn|bzr) diff') >= 0
setlocal filetype=diff
endif
Or even better, detect by the content:
if search('\m\C^--- .*\n+++ .*\n@@','n')
setlocal filetype=diff
endif
It works with things like "git show" and "git log -p" too. Here's
updated version for those who are interested:
command! -complete=file -nargs=* Git call s:RunShellCommand('git '.<q-args>)
" To run any shell command:
"command! -complete=file -nargs=+ Shell call s:RunShellCommand(<q-args>)
" Additional $VCS commands:
"command! -complete=file -nargs=* Hg call s:RunShellCommand('hg '.<q-args>)
"command! -complete=file -nargs=* Svn call s:RunShellCommand('svn '.<q-args>)
"command! -complete=file -nargs=* Bzr call s:RunShellCommand('bzr '.<q-args>)
" In case a shell command wants to open $EDITOR we use something
" that works from inside Vim.
let $EDITOR = '/usr/bin/gvim --nofork'
function! s:RunShellCommand(cmdline)
botright new
setlocal buftype=nofile bufhidden=wipe nobuflisted noswapfile nowrap
call setline(1,a:cmdline)
call setline(2,substitute(a:cmdline,'.','=','g'))
execute 'silent $read !'.escape(a:cmdline,'()%#')
setlocal nomodifiable
if search('\m\C^--- .*\n+++ .*\n@@','n')
setlocal filetype=diff
endif
1
endfunction
From: Michael Wookey <hidden> Date: 2016-06-15 22:45:19
quoted
If you alter the RunShellCommand() function to the following -
quoted
if stridx(a:cmdline, "diff") > 0
set filetype=diff
endif
quoted
Then Vim will apply diff syntax highlighting to the scratch buffer
when a "diff" command is executed.
Good idea. I implemented the same thing this way:
if match(a:cmdline,'\v^(git|hg|svn|bzr) diff') >= 0
setlocal filetype=diff
endif
Vim 7.2 provides a better alternative. If the command is specifically
'git' then setting the filetype to 'git' also provides the correct
syntax highlighting.
For example,
if v:version >= 702
if stridx(a:cmdline, "git") == 0
setlocal filetype=git
endif
endif
Syntax highlighting is displayed correctly for several commands including:
:Git diff
:Git show
:Git log
And possibly others. If Vim (7.2) is your default editor when
performing a "git commit" then there is also a new built in Vim
command -
:DiffGitCached
This opens a preview window with the contents of "git diff --cached".
The :DiffGitCached command is only available when filetype=gitcommit.
Perhaps some of these ideas should be added to the Vim wiki...
http://vim.wikia.com/wiki/Display_shell_commands%27_output_on_Vim_window
From: Teemu Likonen <hidden> Date: 2016-06-15 22:45:19
Michael Wookey wrote (2008-09-08 08:47 +1000):
Vim 7.2 provides a better alternative. If the command is specifically
'git' then setting the filetype to 'git' also provides the correct
syntax highlighting.
Thanks, I didn't know that. Definitely better. I see filetype "git" is
already in my Vim 7.1.314 (Debian Etch backports).
I personally have the opposite preference. The home page gives an
overview and a link to the repository. The repository has no overview or
easy-to-find link to the home page. Therefore I'd almost always perfer a
link to the project home page to get an idea. For 9 out of 10 projects I
wouldn't download the code anyway.
But who are we to impose our preferences on another poster?
Peter
--
Peter Valdemar Mørch
http://www.morch.com