Vim의 명령에 전달할 현재 파일의 전체 경로를 확장하려면 어떻게해야합니까?


답변:


161

:!mycommand %:p

관련 :

:!cd %:p:h


23
VIM 도움말에서 어떻게 찾을 수 있습니까?
keflavich

57
@keflavich:help filename-modifiers
아니카 백 스톰에게

현재 파일이 포함 된 디렉토리를 얻으려면 % : h이면 충분하다고 생각합니다. 여기에 % : p : h가 필요한 이유는 무엇입니까?
HVNSweeting 2013 년

1
@HVNSweeting :%p은 상대 경로가 아닌 파일의 절대 경로입니다. :%p%h파일의 상위 디렉토리에 대한 절대 경로입니다. just %:h을 사용 하면 상대 경로가 생성 될 수 있습니다.
Annika Backstrom

2
@HVNSweeting Shell : cd ~ ; vim .vimrc, Vim : :!echo %:h, '.'이 표시되어야합니다. 상대 경로.
Annika Backstrom 2013

65

다른 두 답변은 (어떤 이유로) 저에게 효과가 없었습니다. 그러나이 콤보는 일반 모드에서 입력 할 때 전체 경로를 표시합니다.

그런 1다음CtrlG

출처 : Vim Tips Wiki의 " 현재 파일 이름 가져 오기". 의 {count}CTRL-G섹션을 참조하십시오 :help CTRL-G.


5
그것은 다른 주제입니다. 문제는 명령 문자열에 버퍼 경로를 포함하는 것입니다 (따라서 선행 :!). 당신의 {count}CTRL-G순서는 UI에 전체 경로를 표시하기위한 것입니다.
Stefan Majewsky

3
실제로 나를 여기로 가져온 질문 제목과 관련하여 @StefanMajewsky가 선택한 답변이어야합니다.
doc_id 2013 년

29

추가 :p, 예 :

:!mycommand %:p

그리고 %:p:h파일이있는 디렉토리의 경로를 제공합니다.


9

현재 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

(a VIM 기능) 예 할 resolve()expand()현재 스크립트 절대 경로에 대한 심볼 링크 <sfile>:p(대신 %:p) 다음 execto -ed 파일명 함수 VIM 로컬 변수를 포함 :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")

노트:

참고 문헌



0

에서 전체 경로를 vimrc사용하려면 다음과 같이 사용할 수 있습니다.

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

이것은 Windows에서 백 슬래시가있는 경로를 제공합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.