コマンドモードに切り替えて
:!mycommand %
現在のファイルでコマンドを実行します(%
現在のファイル名に展開されます)。完全なファイル名を(完全なパスで)展開する同様の構成はありますか?
Windowsを使用しています。
コマンドモードに切り替えて
:!mycommand %
現在のファイルでコマンドを実行します(%
現在のファイル名に展開されます)。完全なファイル名を(完全なパスで)展開する同様の構成はありますか?
Windowsを使用しています。
回答:
:!mycommand %:p
関連:
:!cd %:p:h
:help filename-modifiers
:%p
は、相対パスではなく、ファイルへの絶対パスです。:%p%h
ファイルの親ディレクトリへの絶対パスです。just %:h
を使用すると、相対パスになる可能性があります。
cd ~ ; vim .vimrc
、Vim :、:!echo %:h
「。」が表示されます 相対パス。
他の2つの答えは(何らかの理由で)うまくいきませんでした。ただし、このコンボは通常モードで入力すると完全なパスを表示することがわかりました。
1次に押すCtrlG
出典:Vim Tips Wikiの「現在のファイルの名前を取得する」。も参照してください{count}CTRL-G
セクション:help CTRL-G
。
:!
)。あなたの{count}CTRL-G
順序は、UIの完全なパスを表示するためのものです。
追加:p
、例えば
:!mycommand %:p
そして%:p:h
、ファイルが存在するディレクトリのパスを提供します。
現在の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
%:p
exec
source
fnameescape
l: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")
ノート:
:help fnamemodify
%:p
バッファファイル)/ <sfile>:p
(スクリプトファイル)expand('<sfile>')
関数内からは機能しませんl:varname
が機能しません。そう、exec
-文字列連結-とfnameescape
:messages
最新の200 vim [エラー、]メッセージを出力します参考文献
現在のファイルの名前を取得します http://vim.wikia.com/wiki/Get_the_name_of_the_current_file
Set_working_directory_to_the_current_file http://vim.wikia.com/wiki/Set_working_directory_to_the_current_file