bash 中的文件类型相关别名

bash 中的文件类型相关别名

我正在尝试在 bashrc 中创建一个依赖于文件类型的 gvim 别名:

if [[ $file == *.tex ]]; then
  alias vi="/home/rudra/bin/vims.py"
else
  alias vi="gvim"
fi

我期望运行~/bin/vims.py foo.tex文件vi foo.texgvim bar.txt当我输入vi bar.txt.但是,它不起作用,并且仅gvim foo.{tex/txt}针对所有扩展运行。

它还显示:

which vi
alias vi='gvim'
    /usr/bin/gvim

所以我想,如果 *.tex 的条件根本不起作用。知道为什么吗?

我在用:

bash --version 
GNU bash, version 4.3.43(1)-release (x86_64-redhat-linux-gnu)

\vim --version
VIM - Vi IMproved 8.0 (2016 Sep 12, compiled Jan 26 2017 07:53:42)

还:

vi --version
bash: syntax error near unexpected token `--version'

答案1

这是一个 shell 函数 ,edit它将使用编辑器打开一个文件。它默认为gvim,但如果文件有.tex后缀,它会选择另一个编辑器:

function edit
{
    typeset argc="$#"
    typeset file="${!argc}"

    typeset cmd="gvim"

    case "$file" in
        *.tex)  cmd="/home/rudra/bin/vims.py" ;;
    esac

    command "$cmd" "$@"
}

这使得为​​特定文件名后缀添加其他编辑器变得容易。

该函数可能会放入您的~/.bashrc文件中。

手册bash包含以下声明

对于几乎所有用途,别名都被 shell 函数取代。

相关内容