* Extremely simple Vim interface for Git
@ 2008-09-06 19:37 Teemu Likonen
2008-09-07 10:32 ` Michael Wookey
2008-09-07 13:23 ` Thomas Adam
0 siblings, 2 replies; 11+ messages in thread
From: Teemu Likonen @ 2008-09-06 19:37 UTC (permalink / raw)
To: git
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
^ permalink raw reply [flat|nested] 11+ messages in thread* Re: Extremely simple Vim interface for Git
2008-09-06 19:37 Extremely simple Vim interface for Git Teemu Likonen
@ 2008-09-07 10:32 ` Michael Wookey
2008-09-07 13:13 ` Teemu Likonen
2008-09-07 13:23 ` Thomas Adam
1 sibling, 1 reply; 11+ messages in thread
From: Michael Wookey @ 2008-09-07 10:32 UTC (permalink / raw)
To: Teemu Likonen; +Cc: git
> 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..
^ permalink raw reply [flat|nested] 11+ messages in thread* Re: Extremely simple Vim interface for Git
2008-09-07 10:32 ` Michael Wookey
@ 2008-09-07 13:13 ` Teemu Likonen
2008-09-07 17:46 ` Teemu Likonen
2008-09-07 22:47 ` Michael Wookey
0 siblings, 2 replies; 11+ messages in thread
From: Teemu Likonen @ 2008-09-07 13:13 UTC (permalink / raw)
To: Michael Wookey; +Cc: git
Michael Wookey wrote (2008-09-07 20:32 +1000):
> If you alter the RunShellCommand() function to the following -
> if stridx(a:cmdline, "diff") > 0
> set filetype=diff
> endif
> 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
^ permalink raw reply [flat|nested] 11+ messages in thread* Re: Extremely simple Vim interface for Git
2008-09-07 13:13 ` Teemu Likonen
@ 2008-09-07 17:46 ` Teemu Likonen
2008-09-07 22:47 ` Michael Wookey
1 sibling, 0 replies; 11+ messages in thread
From: Teemu Likonen @ 2008-09-07 17:46 UTC (permalink / raw)
To: Michael Wookey; +Cc: git
Teemu Likonen wrote (2008-09-07 16:13 +0300):
> > 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
^ permalink raw reply [flat|nested] 11+ messages in thread* Re: Extremely simple Vim interface for Git
2008-09-07 13:13 ` Teemu Likonen
2008-09-07 17:46 ` Teemu Likonen
@ 2008-09-07 22:47 ` Michael Wookey
2008-09-08 5:26 ` Teemu Likonen
1 sibling, 1 reply; 11+ messages in thread
From: Michael Wookey @ 2008-09-07 22:47 UTC (permalink / raw)
To: Teemu Likonen; +Cc: git
>> If you alter the RunShellCommand() function to the following -
>
>> if stridx(a:cmdline, "diff") > 0
>> set filetype=diff
>> endif
>
>> 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
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: Extremely simple Vim interface for Git
2008-09-06 19:37 Extremely simple Vim interface for Git Teemu Likonen
2008-09-07 10:32 ` Michael Wookey
@ 2008-09-07 13:23 ` Thomas Adam
2008-09-07 13:59 ` Teemu Likonen
2008-09-08 17:41 ` Bob Hiestand
1 sibling, 2 replies; 11+ messages in thread
From: Thomas Adam @ 2008-09-07 13:23 UTC (permalink / raw)
To: Teemu Likonen; +Cc: git
Hi --
2008/9/6 Teemu Likonen <tlikonen@iki.fi>:
> 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>)
Looks interesting. Have you seen this though:
http://code.google.com/p/vcscommand/
-- Thomas Adam
^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2008-09-09 6:27 UTC | newest]
Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-09-06 19:37 Extremely simple Vim interface for Git Teemu Likonen
2008-09-07 10:32 ` Michael Wookey
2008-09-07 13:13 ` Teemu Likonen
2008-09-07 17:46 ` Teemu Likonen
2008-09-07 22:47 ` Michael Wookey
2008-09-08 5:26 ` Teemu Likonen
2008-09-07 13:23 ` Thomas Adam
2008-09-07 13:59 ` Teemu Likonen
2008-09-07 14:11 ` Thomas Adam
2008-09-08 17:41 ` Bob Hiestand
2008-09-09 6:26 ` "Peter Valdemar Mørch (Lists)"
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.