Jak mogę rozwinąć pełną ścieżkę bieżącego pliku, aby przekazać polecenie w Vimie?


Odpowiedzi:


161

:!mycommand %:p

Związane z:

:!cd %:p:h


23
Jak je znaleźć w pomocy VIM?
keflavich

57
@keflavich:help filename-modifiers
Annika Backstrom,

aby pobrać katalog zawierający aktualny plik, myślę, że%: h wystarczy. Dlaczego potrzebujesz%: p: h tutaj?
HVNSweeting

1
@HVNSweeting :%pto ścieżka bezwzględna do pliku, a nie ścieżka względna. :%p%hjest bezwzględną ścieżką do katalogu nadrzędnego pliku. Użycie just %:hmoże skutkować ścieżką względną.
Annika Backstrom

2
@HVNSweeting Shell:, cd ~ ; vim .vimrcVim :, :!echo %:hpowinno wyświetlić '.' dla ścieżki względnej.
Annika Backstrom,

65

Pozostałe dwie odpowiedzi nie zadziałały dla mnie (z jakiegoś powodu). Jednak odkryłem, że ta kombinacja wyświetla pełną ścieżkę po wpisaniu w trybie normalnym:

1Następnie naciśnijCtrlG

Źródło: „ Uzyskaj nazwę bieżącego pliku ” na Vim Tips Wiki. Zobacz także {count}CTRL-Gsekcję :help CTRL-G.


5
To inny temat. Pytanie dotyczy włączenia ścieżki bufora do ciągu poleceń (a więc wiodącego :!). Twoja {count}CTRL-Gsekwencja służy do wyświetlania pełnej ścieżki w interfejsie użytkownika.
Stefan Majewsky

3
@StefanMajewsky odnośnie tytułu pytania, które faktycznie przywiodło mnie tutaj, to powinna być wybrana odpowiedź.
doc_id

29

Dołącz :pnp

:!mycommand %:p

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


9

Aby wydrukować aktualną nazwę pliku 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

Na przykład (z funkcją vim), do resolve()i expand()wszelkich symlinków do absolutnego ścieżki do skryptu <sfile>:p(zamiast %:p), a następnie execdo sourcetej fnameescape-ed pliku zawarte w zmiennej vim funkcję lokalnego 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:

Bibliografia



0

Jeśli chcesz użyć pełnej ścieżki w swoim vimrc, możesz użyć czegoś takiego:

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

To da ci ścieżkę z ukośnikami odwrotnymi w systemie Windows.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.