명령 행에서 개정판의 현재 파일 이름을 가져옵니다.


10

비슷한 파일 이름을 입력하기 위해 명령 줄에서 현재 파일의 경로를 어떻게 가져올 수 있습니까? 현재 파일 이름으로 대체되는 약어를 원하지 않고 파일 이름을 편집하고 디렉토리 경로로 완성하고 싶습니다. 예를 들어, :edit비슷한 이름 을 가진 파일이나 비슷한 디렉토리에 파일을 만들고 싶습니다.

vim src/submodule/frontend/frobnicate2.c

이제 편집 ../trunk/src/submodule/frontend/frobnicate.c하고 싶습니다 . 전체 경로를 다시 입력하지 않고을 삽입 ../trunk하고 제거하고 싶습니다 2.

물론 쉘로 돌아가서 명령 기록을 사용하거나 GUI를 통해 경로를 복사하여 붙여 넣을 수는 있지만 Vim을 떠나지 않아도되는보다 효율적인 방법을 찾고 있습니다.

답변:


11

%자신이 발견 한대로 레지스터 를 삽입하는 것 외에도을 사용할 수 있습니다 :edit %<Tab>.

보낸 사람 :help cmdline-special:

In Ex commands, at places where a file name can be used, the following
characters have a special meaning.  These can also be used in the expression
function `expand()`.

        %       Is replaced with the current file name.           :_% c_%

예를 들어 다음을 사용할 수 있습니다.

:edit %.orig

편집 file.txt.orig합니다. 예를 들어,을 입력하고을 :e ../trunk/%눌러 <Tab>상대 경로와 함께 파일 이름을 얻은 다음를 2누르기 전에를 제거하십시오 <Enter>.

경로에 수정자를 추가하여 수정할 수 있습니다. :h특히 유용한 것으로 나타났습니다 . 현재 경로의 "dirname"(또는 Vim-speak "의"head ")을 얻습니다.

:edit file/in/a/deeply/nested/subdirectory/here.txt
:edit %:h/in_same_dir_as_above.txt

:h여러 번 사용할 수도 있습니다 . 예를 들면 다음과 같습니다.

:edit %:h:h:h/file.txt

열 예정이다 file/in/a/deeply/file.txt

도 있습니다 :p유형 : 당신의 전체 경로를 제공하고있는 귀하의 경우에 유용 할 수있는 :e %:p눌러 <Tab>편집을 경로를 원하는대로. 여러 수정자를 사용할 수도 있습니다 (예 :) :e %:p:h.

:help filename-modifiers전체 목록을 참조하십시오 .

참고 : <Tab>Vim은을 확장합니다 %. 를 사용 <C-d>하면 Vim은 확장 %하지 않지만 %경로를 완료하는 동안를 대체합니다 .


5

오. :help :! 에서“파일 이름”을 검색하십시오 . : 그것은 간단 특별한 삽입 r에 egister을 현재 파일 이름을 의미합니다.CTRL-R %%


1
따라서 귀하의 답변을 바탕으로 : OP가 요청 한대로 전체 경로를 얻으려면 다음과 같이하십시오 Ctrl-r =expand('%:p'). 이것은 = register를 사용합니다 .
lcd047 5

3

vim path변수를 설정 한 경우 , :find명령 의 모든 기능 , 즉 파일 이름의 탭 완성 (디렉토리 부분을 지정할 필요없이)을 사용할 수 있습니다!

귀하의 경우에는

set path=./**

:fin frob<tab>일하는 데 필요한 전부일 수 있습니다. 자세한 내용은 :help find, :help file-searching.


0

시도 할 수있는 매핑은 다음과 같습니다.

cnoremap <a-q> <c-c>:let @a=expand('%')<CR>:<Up><c-r>a

현재 명령을 저장 한 다음 레지스터 'a'를 현재 파일 이름으로 설정합니다. 그런 다음 마지막 명령이 리콜되고 'a'레지스터 내용이 추가됩니다. 물론 'a'레지스터에 유용한 것이 있으면 덮어 씁니다.

매핑 된 문자를 다른 것으로 변경할 수 있습니다. Alt 키를 사용하고 싶지만 일부 터미널에서는 작동하지 않습니다.

Carpetsmoker가 그의 답변에서 지적했듯이 함수 호출을 다음으로 변경할 수 있습니다

expand('%:p')

전체 경로를 강요합니다.


1
이것은 무의식적으로 등록을 말살 할 것이다 a. 대신 다음과 같이 해보십시오.cnoremap <M-q> <C-r>=fnameescape(expand('%:p'))<CR>
lcd047
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.