Shell
為什麼 tcsh 不能執行單行 ‘which -> vim’ 命令?
我經常要執行哪個命令,然後在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
命令的文件。