gpt4 book ai didi

vim - 如何获取路径字符串的父目录

转载 作者:行者123 更新时间:2023-12-04 21:04:27 26 4
gpt4 key购买 nike

对于任何路径字符串(不一定是当前文件的路径),我都想与vimscript中的bash dirname命令或python os.path.split()[0]做相同的事情。

样本所需的行为:

  • /a/b/-> /a
  • /a/b-> /a

  • 我已经尝试过 fnamemodify(),但是对我来说,它的输出似乎取决于dirs是否存在:
    :ec fnamemodify( '/usr/idontexist', ':p:h')

    给出:
    /usr

    很好,但是:
    :ec fnamemodify( '/usr/bin', ':p:h')

    给出:
    /usr/bin

    这不是我想要的,我无法弄清楚它在做什么。

    我希望找到一个跨平台的解决方案。

    最佳答案

    您是否阅读过:h描述的这一部分:

     When the file name ends in a path separator, only the path
    separator is removed. Thus ":p:h" on a directory name results
    on the directory name itself (without trailing slash).

    这是由于以下原因:
    :ec fnamemodify( '/usr/bin/', ':p:h')  "directory, ending with /
    -> /usr/bin
    :ec fnamemodify( '/usr/bin/', ':h') "directory, ending with /
    -> /usr/bin
    :ec fnamemodify( '/usr/bin', ':p:h') "directory, not ending with /
    -> /usr/bin
    :ec fnamemodify( '/usr/bin', ':h') "directory, not ending with /
    -> /usr

    因此,有两个因素决定输出。
  • (如果您的字符串以separator结尾)
  • (如果您使用过:p
  • )

    为了实现您的目标,如果字符串以 /(或 \ in win?))结尾,则可以删除最后一个字符,然后将其传递给不带 :p的函数

    关于vim - 如何获取路径字符串的父目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16485748/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com