# HG changeset patch # User Steve Losh # Date 1333473485 14400 # Node ID 7200fd1fb402799b4292a0bb2e2a574423082bfd Initial commit. diff -r 000000000000 -r 7200fd1fb402 README.markdown --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/README.markdown Tue Apr 03 13:18:05 2012 -0400 @@ -0,0 +1,18 @@ +Clam +==== + +Clam.vim is a lightweight Vim plugin to easily run shell commands. + +Installation and Usage +---------------------- + +Use Pathogen to install. + +[Read the docs][docs] for more information. + +[docs]: http://vim-doc.heroku.com/view?https://raw.github.com/sjl/clam.vim/master/doc/clam.txt + +License +------- + +MIT/X11. diff -r 000000000000 -r 7200fd1fb402 doc/clam.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/doc/clam.txt Tue Apr 03 13:18:05 2012 -0400 @@ -0,0 +1,96 @@ +*clam.txt* easily work with shell commands + + ___ __ __ __ __ + / __)( ) /__\ ( \/ ) + ( (__ )(__ /(__)\ ) ( + \___)(____)(__)(__)(_/\/\_) + + A lightweight Vim plugin for working with shell commands. + +============================================================================== +CONTENTS *clam-contents* + + 1. Usage ........................... |ClamUsage| + 2. Mappings ........................ |ClamMappings| + 2.1 Refresh .................... |ClamRefresh| + 2.2 Pipe ....................... |ClamPipe| + 3. License ......................... |ClamLicense| + 4. Bugs ............................ |ClamBugs| + 5. Contributing .................... |ClamContributing| + 6. Changelog ....................... |ClamChangelog| + +============================================================================== +1. Usage *ClamUsage* + +The :Clam command is your point of entry to Clam. Use it to run a shell +command like this: > + + :Clam ls -l + +This will open up a new vertical split with the results of the command in it. +You can edit the text in this split like any other buffer. + +When you close the buffer with :quit or something similar Clam will place your +cursor back in the split you came from. + +You might want to set up your own mapping to make Clam easier to use. The +author has something like this in his .vimrc: > + + nnoremap ! :Clam + +That's Clam in a nutclamshell. + +============================================================================== +2. Mappings *ClamMappings* + +Clam also defines two special mappings in the command output window for your +convenience. + +------------------------------------------------------------------------------ +2.1 Refresh *ClamRefresh* + +Bound to: r + +"Refresh" the output by running the command again. + +This is useful for commands where the output might change frequently and you +want to watch it in real time. + +------------------------------------------------------------------------------ +2.2 Pipe *ClamPipe* + +Bound to: p + +"Pipe" the buffer through another command and replace the contents with its +result. + +This allows you to run a shell pipeline where you can manually inspect and +massage the intermediate results. + +============================================================================== +3. License *ClamLicense* + +Clam is MIT/X11 licensed. + +============================================================================== +4. Bugs *ClamBugs* + +If you find a bug please post it on the issue tracker: +http://github.com/sjl/clam.vim/issues/ + +============================================================================== +5. Contributing *ClamContributing* + +Think you can make this plugin better? Awesome! Fork it on BitBucket or +GitHub and send a pull request. + +BitBucket: http://bitbucket.org/sjl/clam.vim/ +GitHub: http://github.com/sjl/clam.vim/ + +============================================================================== +6. Changelog *ClamChangelog* + +v1.0.0 + * Initial stable release. + +============================================================================== diff -r 000000000000 -r 7200fd1fb402 package.sh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/package.sh Tue Apr 03 13:18:05 2012 -0400 @@ -0,0 +1,3 @@ +#!/usr/bin/env bash + +hg archive ~/Desktop/clam.zip -I 'doc' -I 'plugin' -I README.markdown diff -r 000000000000 -r 7200fd1fb402 plugin/clam.vim --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/plugin/clam.vim Tue Apr 03 13:18:05 2012 -0400 @@ -0,0 +1,65 @@ +" ============================================================================ +" File: clam.vim +" Description: A simple little shell. +" Maintainer: Steve Losh +" License: MIT/X11 +" ============================================================================ + + +" Init {{{ + +if !exists('g:clam_debug') && (exists('loaded_clam') || &cp) + finish +endif + +let loaded_clam = 1 + +"}}} +" Function {{{ + +function! s:Execlam(command) + " Build the actual command string to execute + let command = join(map(split(a:command), 'expand(v:val)')) + + " Find any already-open clam windows for this command. + let winnr = bufwinnr('^' . command . '$') + + " Open the new window (or move to an existing one). + if winnr < 0 + silent! execute 'botright vnew ' . fnameescape(command) + else + silent! execute winnr . 'wincmd w' + endif + + " Set some basic options for the output window. + setlocal buftype=nowrite bufhidden=wipe nobuflisted noswapfile nowrap nonumber + + " Actually run the command, placing its output in the current window. + echo 'Executing: ' . command + silent! execute 'silent %!'. command + + " When closing this buffer in any way (like :quit), jump back to the original window. + silent! execute 'au BufUnload execute bufwinnr(' . bufnr('#') . ') . ''wincmd w''' + + " Map r to "refresh" the command (call it again). + silent! execute 'nnoremap r :call ExecuteInShell(''' . command . '''):AnsiEsc' + + " Map p to "pipe" the buffer into a new command. + silent! execute 'nnoremap p ggVG!' + + " Highlight ANSI color codes if the AnsiEsc plugin is present. + if exists("g:loaded_AnsiEscPlugin") + silent! execute 'AnsiEsc' + endif + + silent! redraw + + echo 'Shell command executed: ' . command +endfunction + +" }}} +" Command {{{ + +command! -complete=shellcmd -nargs=+ Clam call s:Execlam() + +" }}}