現在のファイルのフルパスを展開してVimのコマンドに渡すにはどうすればよいですか?


123

コマンドモードに切り替えて

:!mycommand %

現在のファイルでコマンドを実行します(%現在のファイル名に展開されます)。完全なファイル名を(完全なパスで)展開する同様の構成はありますか?

Windowsを使用しています。



:!mycommand "%"
SdidS 2017

回答:


161

:!mycommand %:p

関連:

:!cd %:p:h


23
VIMヘルプでこれらをどのように見つけますか?
keflavich 2012年

57
@keflavich:help filename-modifiers
Annika Backstrom

現在のファイルを含むディレクトリを取得するには、%:hで十分だと思います。ここに%:p:hが必要なのはなぜですか?
HVNSweeting 2013年

1
@HVNSweeting :%pは、相対パスではなく、ファイルへの絶対パスです。:%p%hファイルの親ディレクトリへの絶対パスです。just %:hを使用すると、相対パスになる可能性があります。
Annika Backstrom

2
@HVNSweeting Shell:cd ~ ; vim .vimrc、Vim :、:!echo %:h「。」が表示されます 相対パス。
Annika Backstrom 2013

65

他の2つの答えは(何らかの理由で)うまくいきませんでした。ただし、このコンボは通常モードで入力すると完全なパスを表示することがわかりました。

1次に押すCtrlG

出典:Vim Tips Wikiの「現在のファイルの名前を取得する」。も参照してください{count}CTRL-Gセクション:help CTRL-G


5
それは別のトピックです。問題は、バッファーパスをコマンド文字列に含めることです(したがって、先頭に:!)。あなたの{count}CTRL-G順序は、UIの完全なパスを表示するためのものです。
Stefan Majewsky、2012

3
@StefanMajewsky実際に私をここに連れてきた質問のタイトルに関して、これが選ばれた答えになるはずです。
doc_id


9

現在のvimファイル名を出力するには:

:help expand
:echo expand("%:p")    " absolute path
:echo expand("%:p:h")  " absolute path dirname
:echo expand("%:p:h:h")" absolute path dirname dirname
:echo expand("%:.")    " relative path
:echo expand("%:.:h")  " relative path dirname
:echo expand("%:.:h:h")" relative path dirname dirname

:echo expand("<sfile>:p")  " absolute path to [this] vimscript

:help filename-modifiers

たとえば、(vim関数を使用して)、resolve()およびの代わりにexpand()現在のスクリプトへの絶対パスへのシンボリックリンクへのシンボリックリンク、次に関数ローカルのvim変数に含まれる-edファイル名へのシンボリックリンク:<sfile>:p%:pexecsourcefnameescapel:vimrcfilename

 "  g:__sfile__dirname     -- directory containing this vimrc script
 "                            after symlinks
 "                            ~dirname(abspath(realpath(__file__)))
 let g:__sfile__dirname=fnamemodify(resolve(expand("<sfile>:p")), ":h")

 "  Source_dotvim(filename)  -- source dirname(this_vimrc)/filename
 function Source_dotvim(filename)
     let l:vimrcfilename=g:__sfile__dirname . "/" . a:filename
     if filereadable(l:vimrcfilename) && !empty(l:vimrcfilename)
         "source s:vimrcfilename "this doesn't work, so exec:
         exec "source " . fnameescape(l:vimrcfilename)
     else
         echo l:vimrcfilename . " empty or not found."
     endif
 endfunction 

 call Source_dotvim("vimrc.local.01-env.vimrc")

ノート:

参考文献



0

でフルパスを使用したい場合はvimrc、次のようなものを使用できます。

let vimFiles = '$HOME/.vim'
let absPath  = expand(vimFiles . '/subDir')

これにより、Windowsではバックスラッシュを含むパスが得られます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.