tcsh가 한 줄짜리 'which -> vim' 명령을 실행할 수 없는 이유는 무엇입니까?

tcsh가 한 줄짜리 'which -> vim' 명령을 실행할 수 없는 이유는 무엇입니까?

실제로 내용을 확인하려면 which 명령을 실행한 다음 vim에서 열어야 하는 경우가 많습니다. 탭 완성 기능을 사용하여 이 작업을 수행하는 별칭이나 함수를 원합니다. 내가 시도한 것은 다음과 같습니다.

superwhich() {
    which "$1" | vim
}

superwhich2() {
    vim $(which $1)
}

이들 중 어느 것도 작동하지 않습니다. 내가 놓친 것이 있나요?

답변1

csh그리고 tcsh기능이 없습니다.

유일한 방법은 별칭을 사용하고 !기록 대체를 통해 매개변수를 전달하는 것입니다.

alias superwhich 'vim "`which \!:1`"'

superwhich bzgrep

또는 더 나은 방법(오류 검사 포함):

alias superwhich 'set q = `which \!:1`; if(-r "$q") vim "$q"'

답변2

이에 대한 스크립트를 정의할 수 있습니다.

#! /bin/sh -
for cmd do
  if
    cmd_path=$(command -v -- "$cmd")
  then
    set -- "$@" "$cmd_path"
  else
    printf >&2 '"%s" not found\n' "$cmd"
  fi
  shift
done
[ "$#" -gt 0 ] && vim -- "$@"

그런 다음 모든 쉘에서 사용할 수 있습니다.

sh내장 기능(예: echo/ [...) 에서는 작동하지 않습니다 .

를 사용하려면 zsh다음을 실행하면 됩니다.

vim =cmd

또는

vim cmd(:P)

명령 파일을 편집합니다 cmd.

관련 정보