Shell

為什麼 tcsh 不能執行單行 ‘which -> vim’ 命令?

  • May 10, 2019

我經常要執行哪個命令,然後在vim中打開它才能真正看到裡面的內容。我想要一個別名或函式來執行此操作,並帶有製表符完成。這是我嘗試過的:

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

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

這些都不起作用。有什麼我想念的嗎?

csh並且tcsh沒有功能。

唯一的方法是使用別名,並通過!歷史替換將參數傳遞給它們:

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

superwhich bzgrep

或者更好(帶錯誤檢查):

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

您可以為此定義一個腳本:

#! /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命令的文件。

引用自:https://unix.stackexchange.com/questions/517803