-
-
Save shakefu/3780676 to your computer and use it in GitHub Desktop.
mvim updated to handle command line options and stdin
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/sh | |
# | |
# This shell script passes all its arguments to the binary inside the | |
# MacVim.app application bundle. If you make links to this script as view, | |
# gvim, etc., then it will peek at the name used to call it and set options | |
# appropriately. | |
# | |
# Based on a script by Wout Mertens and suggestions from Laurent Bihanic. This | |
# version is the fault of Benji Fisher, 16 May 2005 (with modifications by Nico | |
# Weber and Bjorn Winckler, Aug 13 2007). | |
# First, check "All the Usual Suspects" for the location of the Vim.app bundle. | |
# You can short-circuit this by setting the VIM_APP_DIR environment variable | |
# or by un-commenting and editing the following line: | |
# VIM_APP_DIR=/Applications | |
# Updated by shakefu to handle stdin, and -options | |
if [ -z "$VIM_APP_DIR" ] | |
then | |
myDir="`dirname "$0"`" | |
myAppDir="$myDir/../Applications" | |
for i in ~/Applications ~/Applications/vim $myDir $myDir/vim $myAppDir $myAppDir/vim /Applications /Applications/vim /Applications/Utilities /Applications/Utilities/vim; do | |
if [ -x "$i/MacVim.app" ]; then | |
VIM_APP_DIR="$i" | |
break | |
fi | |
done | |
fi | |
if [ -z "$VIM_APP_DIR" ] | |
then | |
echo "Sorry, cannot find MacVim.app. Try setting the VIM_APP_DIR environment variable to the directory containing MacVim.app." | |
exit 1 | |
fi | |
binary="$VIM_APP_DIR/MacVim.app/Contents/MacOS/Vim" | |
# Next, peek at the name used to invoke this script, and set options | |
# accordingly. | |
name="`basename "$0"`" | |
gui= | |
opts= | |
stdin=false | |
diffmode=false | |
# GUI mode, implies forking | |
case "$name" in m*|g*|rm*|rg*) gui=true ;; esac | |
# Restricted mode | |
case "$name" in r*) opts="$opts -Z";; esac | |
# vimdiff, view, and ex mode | |
case "$name" in | |
*vimdiff) | |
opts="$opts -dO" | |
;; | |
*view) | |
opts="$opts -R" | |
;; | |
*ex) | |
opts="$opts -e" | |
;; | |
esac | |
# Preserve command line options lazily | |
while [ -n "$1" ]; do | |
case $1 in | |
-d) diffmode=true; shift;; | |
-?*) opts="$opts $1"; shift;; | |
-) stdin=true; break;; | |
*) echo "*"; break;; | |
esac | |
done | |
# Last step: fire up vim. | |
# The program should fork by default when started in GUI mode, but it does | |
# not; we work around this when this script is invoked as "gvim" or "rgview" | |
# etc., but not when it is invoked as "vim -g". | |
if [ "$gui" ]; then | |
# Note: this isn't perfect, because any error output goes to the | |
# terminal instead of the console log. | |
# But if you use open instead, you will need to fully qualify the | |
# path names for any filenames you specify, which is hard. | |
# Handle stdin | |
if $stdin; then | |
exec "$binary" -g $opts - | |
elif $diffmode; then | |
exec "$binary" -f -g -d $opts $* | |
elif $tabs && [[ `$binary --serverlist` = "VIM" ]]; then | |
#make macvim open stuff in the same window instead of new ones | |
exec "$binary" -g $opts --remote-tab-silent ${1:+"$@"} & | |
wait | |
else | |
exec "$binary" -g $opts ${1:+"$@"} | |
fi | |
else | |
exec "$binary" $opts ${1:+"$@"} | |
fi |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment