mirror of
				https://github.com/ohmyzsh/ohmyzsh.git
				synced 2025-11-04 21:31:19 +08:00 
			
		
		
		
	This avoids spawning additional processes as $PWD **always** contains the current working directory.
		
			
				
	
	
		
			73 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			73 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
#
 | 
						|
# See README.md
 | 
						|
#
 | 
						|
# Derek Wyatt (derek@{myfirstnamemylastname}.org
 | 
						|
# 
 | 
						|
 | 
						|
function resolveFile
 | 
						|
{
 | 
						|
  if [ -f "$1" ]; then
 | 
						|
    echo $(readlink -f "$1")
 | 
						|
  elif [[ "${1#/}" == "$1" ]]; then
 | 
						|
    echo "$PWD/$1"
 | 
						|
  else
 | 
						|
    echo $1
 | 
						|
  fi
 | 
						|
}
 | 
						|
 | 
						|
function callvim
 | 
						|
{
 | 
						|
  if [[ $# == 0 ]]; then
 | 
						|
    cat <<EOH
 | 
						|
usage: callvim [-b cmd] [-a cmd] [file ... fileN]
 | 
						|
 | 
						|
  -b cmd     Run this command in GVIM before editing the first file
 | 
						|
  -a cmd     Run this command in GVIM after editing the first file
 | 
						|
  file       The file to edit
 | 
						|
  ... fileN  The other files to add to the argslist
 | 
						|
EOH
 | 
						|
    return 0
 | 
						|
  fi
 | 
						|
 | 
						|
  local cmd=""
 | 
						|
  local before="<esc>"
 | 
						|
  local after=""
 | 
						|
  while getopts ":b:a:" option
 | 
						|
  do
 | 
						|
    case $option in
 | 
						|
      a) after="$OPTARG"
 | 
						|
         ;;
 | 
						|
      b) before="$OPTARG"
 | 
						|
         ;;
 | 
						|
    esac
 | 
						|
  done
 | 
						|
  shift $((OPTIND-1))
 | 
						|
  if [[ ${after#:} != $after && ${after%<cr>} == $after ]]; then
 | 
						|
    after="$after<cr>"
 | 
						|
  fi
 | 
						|
  if [[ ${before#:} != $before && ${before%<cr>} == $before ]]; then
 | 
						|
    before="$before<cr>"
 | 
						|
  fi
 | 
						|
  local files=""
 | 
						|
  for f in $@
 | 
						|
  do
 | 
						|
    files="$files $(resolveFile $f)"
 | 
						|
  done
 | 
						|
  if [[ -n $files ]]; then
 | 
						|
    files=':args! '"$files<cr>"
 | 
						|
  fi
 | 
						|
  cmd="$before$files$after"
 | 
						|
  gvim --remote-send "$cmd"
 | 
						|
  if typeset -f postCallVim > /dev/null; then
 | 
						|
    postCallVim
 | 
						|
  fi
 | 
						|
}
 | 
						|
 | 
						|
alias v=callvim
 | 
						|
alias vvsp="callvim -b':vsp'"
 | 
						|
alias vhsp="callvim -b':sp'"
 | 
						|
alias vk="callvim -b':wincmd k'"
 | 
						|
alias vj="callvim -b':wincmd j'"
 | 
						|
alias vl="callvim -b':wincmd l'"
 | 
						|
alias vh="callvim -b':wincmd h'"
 |