How to get the folder from a full file path?

25 views
Skip to first unread message

Zhe Lee

unread,
Jan 27, 2020, 6:25:24 AM1/27/20
to vim_use
I know %:p %:t thes things. But What I need now is not current folder I get a full file path from a regex match. 

And now I need to get the folder from this full path. 

I already Google a lot but can't find useful things all related about "%:t :p" things so how to make it. 

This is the code I use in the vimrc file. 

function! HandleURL()
  let s
:uri = matchstr(getline("."), '[a-zA-Z]*:\/[^ >,;]*')
  echo s
:uri
 
if s:uri != ""
   
if s:uri =~ '^http'
        silent
exec "AsyncRun chrome ".s:uri.""
   
else
       
""""""""""""""
       
"I want to use the totalcmd64 to run the folder of the s:uri here.
        """"""""""""""
        silent exec "
AsyncRun TOTALCMD64 ".s:uri.""
    endif
  else
    echo "
No URI found in line."
  endif
endfunction

Tnx in advance

Gary Johnson

unread,
Jan 27, 2020, 12:16:41 PM1/27/20
to vim_use
I'm not sure I understand. I think you're looking for fnamemodify()
and the ":h" modifier, perhaps this:

silent exec "AsyncRun TOTALCMD64 ".fnamemodify(s:uri, ":h")

See

:help fnamemodify()
:help filename-modifiers

Regards,
Gary

Zhe Lee

unread,
Jan 29, 2020, 7:21:08 PM1/29/20
to vim_use
 Thank you. It worked.  But after checking the  manual,  I think  `  silent exec "AsyncRun TOTALCMD64 ".fnamemodify(s:uri, ":p:h") `  It's a better way.  Am I right? 
 Thanks a lot for your help, I already find fnamemodify() before but seems my English is not good enough. 

 

Gary Johnson

unread,
Jan 30, 2020, 3:11:45 AM1/30/20
to vim_use
You're welcome. I'm glad to hear that it worked.

If s:uri is a path name relative to the current directory, you would
be right. However, if s:uri is a URI naming a file on your local
computer, then I would expect it to begin with "file:", for example:

file:///path/to/file

The part after "file://" is already a full path name, so using ":p"
is not going to help. It is not needed.

>  Thanks a lot for your help, I already find fnamemodify() before
> but seems my English is not good enough. 

You're welcome. I think that ":help expand()" may have a better
explanation of file name expansion, but I don't know whether its
English is any easier to understand.

Regards,
Gary

Reply all
Reply to author
Forward
0 new messages