Vim'deki bir komuta geçmek için mevcut dosyanın tam yolunu nasıl genişletebilirim?


Yanıtlar:


161

:!mycommand %:p

İlişkili:

:!cd %:p:h


23
Bunları VIM yardımında nasıl bulursunuz?
keflavich

57
@keflavich:help filename-modifiers
Annika Backstrom

mevcut dosyayı içeren dizini almak için%: h'nin yeterli olduğunu düşünüyorum. Neden burada%: p: h gerekiyor?
HVNSweeting

1
@HVNSweeting :%p, göreli yol yerine dosyanın mutlak yoludur. :%p%hdosyanın ana dizininin mutlak yoludur. Sadece kullanmak %:hgöreli bir yolla sonuçlanabilir.
Annika Backstrom

2
@HVNSweeting Shell:, cd ~ ; vim .vimrcVim:, :!echo %:h'.' göreli yol için.
Annika Backstrom

65

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.


5
Bu farklı bir konu. Soru, arabellek yolunu bir komut dizesine dahil etmekle ilgilidir (dolayısıyla önde gelen :!). Sizin {count}CTRL-Gdizisi arayüzünde tam yolunu gösteren içindir.
Stefan Majewsky

3
Aslında beni buraya getiren soru başlığıyla ilgili @StefanMajewsky, seçilen cevap bu olmalı.
doc_id

29

:pÖrneğin ekleyin

:!mycommand %:p

Ve %:p:hsize dosyanın bulunduğu dizinin yolunu verecektir.


9

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:

Referanslar



0

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.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.