Vim의 내용에 현재 파일 이름을 어떻게 삽입합니까?


38

검색 한 후 :echo @%vim-screen의 맨 아래 줄에 현재 파일 이름을 표시 한다는 것을 알게 되었습니다.

떠나지 않고 파일의 내용에 파일 이름 (전체 경로 유무)을 덤프하고 싶습니다 vim.

이것을 할 수있는 방법이 있습니까?

답변:


27

다른 방법이있을 것이라고 확신합니다 ...하지만 원하는 주요 명령 :r[ead]은 명령의 출력을 버퍼에 삽입하는 것입니다.

따라서 파일 이름 만 삽입하려면 다음을 수행하십시오.

:r! echo %

그리고 전체 경로를 포함하려면 :

:r! echo %:p

더 많은 정보를 위해서:

:help read
:help filename-modifiers 

37

현재 파일 이름이 "%레지스터에 있으므로;를 사용 하여 파일 을 삽입 할 수 있습니다 (삽입 모드에서) <c-r>%. 전체 경로는로 삽입 할 수 있습니다 <c-r>=expand("%:p"). 자주 사용하면 매크로를 만들 수 있습니다. 더 비슷한 트릭을 참조 :h expand하고 :h "=.


어쩌면 내가 잘못 읽고 있지만 <c-r>다시 실행 명령으로 매핑 되지 않았 습니까?
JC Yamokoski

10
삽입 모드 <c-r>에서 다음 문자가 레지스터임을 지정합니다.
케빈

알았어, 고마워 완전히 ... 삽입 모드로 전환하는 것을 잊었다
JC Yamokoski에게

"%p일반 또는 시각적 모드 에서도 수행 할 수 있습니다 .
naught101

15

에서 볼 수 있듯이 :h registers"%레지스터는 현재 파일 이름을 포함합니다. 이 :pu[t]명령은 레지스터의 내용을 텍스트에 삽입합니다.

따라서 실제 파일 이름을 삽입하려면 명령 모드에서 다음 중 하나를 입력하십시오.

:put %

또는

"%p

전체 경로와 함께 파일 이름을 삽입하려면 다음을 입력하십시오.

:put=expand('%:p')

명령 모드에서.


더 많은 정보:

:h pu[t]

입력 "rp하면 register의 내용을 붙여 넣을 수 있습니다 "r.


3
:put "%:p"나를 위해 작동하지 않습니다. :와 같이 expand () 만 작동하는 것 같습니다 . 불행히도 :put =expand('%:p')덜 번거롭지 않습니다 <c-r>=expand('%:p').
akavel

@akavel 당신이 맞습니다, 나는 대답을 업데이트 할 것입니다. 감사합니다! ;) 그리고 실제로, 둘 다 똑같이 장황하다.
braunmagrin

5

간단한 방법은 다음을 실행하는 것입니다.

!!echo %
  • !! 현재 행을 뒤에 오는 명령의 결과로 바꿉니다.

  • % 명령에서 편집 된 파일의 이름으로 대체되므로 편집 된 파일에 해당 이름이 효과적으로 삽입됩니다.

파일 이름은 vi (m) 명령에 전달 된 파일 이름이며 상대 또는 절대 경로를 포함 할 수 있습니다. 파일 이름을 제거하고 파일 이름 만 유지하려면 다음을 실행하십시오.

!!basename %

1

이 작업을 자주 수행해야하는 경우 http://vim.wikia.com/wiki/Insert_current_filename에 따라 키 시퀀스를 원하는 것에 바인딩하는 것이 유용 할 수 있습니다.

삽입 모드에있을 때 커서 위치에 확장자없이 현재 파일 이름을 삽입합니다.

:inoremap \fn <C-R>=expand("%:t:r")<CR>

확장 사용을 유지하려면

:inoremap \fn <C-R>=expand("%:t")<CR>

파일이 사용중인 디렉토리의 절대 경로를 삽입하려면 다음을 수행하십시오.

:inoremap \fn <C-R>=expand("%:p:h")<CR>

파일이 사용중인 디렉토리의 상대 경로를 삽입하려면 다음을 수행하십시오.

:inoremap \fn <C-R>=expand("%:h")<CR>

위의 모든 vim것은 세션에 직접 적용 되거나 .vimrc(행의 선행 콜론이 선택 사항 인)에 넣을 수 있습니다 .


0

현재 파일 이름 (경로 또는 확장자없이)을 현재 위치 (새 줄 없음, 현재 줄 바꾸기 없음)에 삽입하는 가장 간단한 방법을 인터넷 검색했습니다. 이전 답변 과이 링크를 결합 하면 이것이 내가 찾고있는 것입니다.

에서 삽입 모드 :

<C-R>=expand("%:t:r")

다음에 (이미 명령이 이미 기록 된 상태) :

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