代码之家  ›  专栏  ›  技术社区  ›  Aakash Goel

如何使用bashrc函数更改到文件目标目录?

  •  1
  • Aakash Goel  · 技术社区  · 14 年前

    我在bashrc中使用这个小函数来快速查看我使用的任何自定义实用程序的源代码:

    function wvi()
    {
        vi `which $1`;
    }
    

    例如, fvi mysort 将打开我的实用程序的源代码 mysort .

    还有一件事我可以在这里用- 自动切换到实用程序所在的目录 .

    例如,

    ~ $ which mysort
    /usr/bin/mysort
    ~ $
    

    然后 fvi mysort公司 应该做一个 cd /usr/bin 然后使用打开 vi .

    我怎么能把这个逻辑 .basrhc ? 是否有一些直接的实用程序,或者我需要先获取路径,然后切掉最后一个节点?

    5 回复  |  直到 14 年前
        1
  •  2
  •   shuvalov    14 年前
    dirname `which mysort`
    
        2
  •  1
  •   Dennis Williamson    14 年前

    无需外部设施:

    fvi () {
        cd "${1%/*}"
        vi "${1##*/}"
    }
    
        3
  •  1
  •   sorpigal    14 年前

    我会这样做的

    wvi () {(
        p=$(which "$1")
        cd "${p%/*}"
        ${EDITOR:-vi} "${p##/*/}"
    )}
    

    $EDITOR而不是在用户可能更喜欢emacs的情况下抛出的文本vi(--:

        4
  •  0
  •   glenn jackman    14 年前
    wvi() {
        local file="$(which "$1")"
        cd $(dirname "$file")
        vi $(basename "$file")
        cd -  # return to the previous dir
    }
    

    你不需要 function 关键字定义函数时 ()

    你可以编写函数在子shell中操作,这样你就不必在之后整理:

    wvi() (
        file="$(which "$1")"
        cd $(dirname "$file")
        vi $(basename "$file")
    )
    
        5
  •  0
  •   Wesley Rice    14 年前
    cd $(dirname `which $1`)
    

    在大多数情况下都可以使用,不过您可能希望通过包含以下内容来解释符号链接

    cd $(dirname $(readlink `which $1`))
    

    if语句(测试内置的-h选项查找符号链接)

    if [ -h `which $1 ]; then
      ...
    

    您可能希望这样做的原因是,vim的行为在打开符号链接时有时会发生变化,这取决于您打算对打开的文件执行什么操作。