为什么 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 -- "$@"

然后就可以从任何 shell 使用它了。

请注意,它不适用于sh内置函数(例如echo/ [...)。

使用zsh,你只需运行:

vim =cmd

或者

vim cmd(:P)

编辑cmd命令的文件。

相关内容