Komut moduna gidip yazdığımda
:!mycommand %
Komutumu mevcut dosyada çalıştırıyorum ( %mevcut dosya adına genişletildi). Tam dosya adını (tam yolla) genişleten benzer bir yapı var mı?
Windows kullanıyorum.
Komut moduna gidip yazdığımda
:!mycommand %
Komutumu mevcut dosyada çalıştırıyorum ( %mevcut dosya adına genişletildi). Tam dosya adını (tam yolla) genişleten benzer bir yapı var mı?
Windows kullanıyorum.
Yanıtlar:
:!mycommand %:p
İlişkili:
:!cd %:p:h
:help filename-modifiers
:%p, göreli yol yerine dosyanın mutlak yoludur. :%p%hdosyanın ana dizininin mutlak yoludur. Sadece kullanmak %:hgöreli bir yolla sonuçlanabilir.
cd ~ ; vim .vimrcVim:, :!echo %:h'.' göreli yol için.
Diğer iki cevap benim için işe yaramadı (bazı nedenlerden dolayı). Ancak, bu combo'nun Normal modda yazıldığında tam yolu gösterdiğini buldum:
1Ardından tuşuna basınCtrlG
Kaynak: Vim Tips Wiki'de " Mevcut dosyanın adını al ". Ayrıca {count}CTRL-Gbölümüne bakın :help CTRL-G.
:!). Sizin {count}CTRL-Gdizisi arayüzünde tam yolunu gösteren içindir.
:pÖrneğin ekleyin
:!mycommand %:p
Ve %:p:hsize dosyanın bulunduğu dizinin yolunu verecektir.
Mevcut vim dosya adını yazdırmak için:
: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
(Bir vim fonksiyonlu), örneğin, için için resolve()ve expand()mevcut komut mutlak yol için herhangi bir sembolik <sfile>:p(yerine %:p) ve ardından execiçin -ed dosya bir işlev yerel vim değişken içerdiği :sourcefnameescapel: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")
Notlar:
:help fnamemodify%:p(arabellek dosyası) / <sfile>:p(komut dosyası)expand('<sfile>') bir işlevin içinden çalışmıyorl:varnameçalışmıyor; yani, exec- dize birleştirme - vefnameescape:messages en son 200 vim [hata,] mesajını yazdırırReferanslar
Mevcut dosyanın adını alın 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
Kendi yolunuzda tam yolu vimrckullanmak istiyorsanız, bunun gibi bir şey kullanabilirsiniz:
let vimFiles = '$HOME/.vim'
let absPath = expand(vimFiles . '/subDir')
Bu size Windows'ta ters eğik çizgi içeren bir yol verecektir.