2010-02-10 10 views
116

Kiedy przejść do trybu poleceń i wpiszJak mogę rozwinąć pełną ścieżkę bieżącego pliku, aby przejść do polecenia w Vimie?

:!mycommand % 

mam moja komenda wykonana na bieżącym pliku (% rozpręża się do aktualnej nazwy pliku). Czy istnieje podobna konstrukcja, która rozszerza pełną nazwę pliku (z pełną ścieżką)?

Używam systemu Windows.

+0

Podobny do http://stackoverflow.com/q/741024/80161 i http://stackoverflow.com/q/916875/80161 –

+0

:! Mycommand "%" – SdidS

Odpowiedz

152

:!mycommand %:p

Powiązane:.

:!cd %:p:h

+21

Jak znaleźć to w pomocy VIM? – keflavich

+53

@keflavich ': help filename-modifiers' –

+0

, aby uzyskać katalog zawierający bieżący plik, myślę, że%: h jest wystarczający. Dlaczego potrzebuję%: p: h tutaj? – HVNSweeting

29

Dołącz :p, np.

:!mycommand %:p 

I %:p:h daje ścieżkę do katalogu, w którym znajduje się plik w

63

Pozostałe dwie odpowiedzi nie pracować dla mnie (z jakiegoś powodu). Uważam jednak, że to kombi wyświetla pełną ścieżkę po wpisaniu w trybie Normal:

Prasowym następnie CtrlG

Źródło: „Get the name of the current file” na czubkach Vima Wiki. Zobacz także dział {count}CTRL-G z :help CTRL-G.

+5

To inny temat. Pytanie dotyczy włączenia ścieżki bufora w łańcuchu poleceń (stąd wiodące ':!'). Twoja sekwencja '{count} CTRL-G' służy do wyświetlania pełnej ścieżki w interfejsie użytkownika. –

+2

@StefanMajewsky w odniesieniu do tytułu pytania, który faktycznie mnie tu przyniósł, to powinna być wybrana odpowiedź. – rahmanisback

0

Jeśli chcesz korzystać z pełnej ścieżki w vimrc, można użyć mniej więcej tak:

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

ten daje ścieżkę z ukośniki w systemie Windows.

4

Aby wydrukować aktualną vim pliku:

: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 

Na przykład (z funkcją vim), aby resolve() i expand() wszelkie dowiązania symboliczne do bezwzględnej ścieżki do bieżącego skryptu <sfile>:p (zamiast %:p), a następnie exec do sourcefnameescape -ed filename zawarty w funkcji lokalnego vim zmiennej 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") 

Uwagi:

Odniesienia

Powiązane problemy