현재 버퍼가 편집을 위해 열린 파일이라고 가정하면 :e
표시되지 않습니다 E32: No file name
.
하나 또는 모두를 잡아 당기고 싶습니다.
- 상태 표시 줄에 표시된 것과 정확히 같은 파일 이름
~\myfile.txt
- 파일의 전체 경로, 예 :
c:\foo\bar\myfile.txt
- 파일 이름 만
myfile.txt
현재 버퍼가 편집을 위해 열린 파일이라고 가정하면 :e
표시되지 않습니다 E32: No file name
.
하나 또는 모두를 잡아 당기고 싶습니다.
~\myfile.txt
c:\foo\bar\myfile.txt
myfile.txt
답변:
TL; DR
:let @" = expand("%")
>
그러면 파일 이름이 unamed register에 복사되고 , good old p
를 사용 하여 붙여 넣을 수 있습니다. 물론 빠른 사용을 위해 키에 매핑 할 수도 있습니다.
:nmap cp :let @" = expand("%")<cr>
당신은 또한 전체 경로에 사용할 수 있습니다
:let @" = expand("%:p")
설명
Vim은 이름을 지정하지 않은 레지스터 를 사용하여 붙여 넣을 때와 같이 삭제되거나 복사 된 (감지 된) 텍스트를이 레지스터에서 텍스트를 읽을 때 저장합니다.
를 사용하여 let
텍스트를 레지스터에 수동으로 저장할 수 :let @" = "text"
있지만 식의 결과를 저장할 수도 있습니다.
위의 예에서는 expand
와일드 카드와 키워드를 확장 하는 함수 를 사용합니다 . 이 예 expand('%')
에서는 현재 파일 이름을 확장하는 데 사용 합니다. expand('%:p')
전체 파일 이름 으로 수정할 수 있습니다 .
자세한 내용 :help let
:help expand
:help registers
을 참조하십시오
unnamedplus
클립 보드 사용으로let @+ = expand("%")
"%:h"
파일 이름없이 전체 경로를 얻는 데 사용하십시오 .
거의 모든 요구 사항과 수행 방식 : Ctrl+R %
현재 파일 이름을 현재 위치로 가져옵니다 (명령 프롬프트, 편집 버퍼 등). 자세한 내용은 이 Vim Tip 을 참조하십시오 .
Ctrl+R %
insert
모드 에서 작동 하지만 edit
모드에서는 Ctrl+R
다시 실행을 의미합니다.
현재 버퍼 파일 이름을 시스템 레벨 클립 보드에 넣으려면 레지스터를 @ +로 변경하십시오.
" relative path
:let @+ = expand("%")
" full path
:let @+ = expand("%:p")
" just filename
:let @+ = expand("%:t")
편집 20140421 : 나는 이것을 일반적으로 사용하므로 몇 가지 바로 가기를 만들었습니다. Linux Vims는 Mac Vims 와 약간 다르게 작동 하므로 특별한 경우도 있습니다. 당신이 당신의 다음을 넣는 경우 ~/.vimrc
:
" copy current file name (relative/absolute) to system clipboard
if has("mac") || has("gui_macvim") || has("gui_mac")
" relative path (src/foo.txt)
nnoremap <leader>cf :let @*=expand("%")<CR>
" absolute path (/something/src/foo.txt)
nnoremap <leader>cF :let @*=expand("%:p")<CR>
" filename (foo.txt)
nnoremap <leader>ct :let @*=expand("%:t")<CR>
" directory name (/something/src)
nnoremap <leader>ch :let @*=expand("%:p:h")<CR>
endif
" copy current file name (relative/absolute) to system clipboard (Linux version)
if has("gui_gtk") || has("gui_gtk2") || has("gui_gnome") || has("unix")
" relative path (src/foo.txt)
nnoremap <leader>cf :let @+=expand("%")<CR>
" absolute path (/something/src/foo.txt)
nnoremap <leader>cF :let @+=expand("%:p")<CR>
" filename (foo.txt)
nnoremap <leader>ct :let @+=expand("%:t")<CR>
" directory name (/something/src)
nnoremap <leader>ch :let @+=expand("%:p:h")<CR>
endif
그런 다음 예를 들어 <leader>cf
현재 버퍼의 상대 경로를 복사합니다 (기본 지시선은 백 슬래시 ( \
)). 필자는 종종 파일에서 명령을 실행하거나 명령 줄에서 다른 작업을 수행하기 위해 이러한 명령을 사용합니다. 나는 실제로 마지막 파일 이름 / 디렉토리 이름을 자주 사용하지 않습니다.
<leader>cfr
상대, <leader>cfa
절대, <leader>cff
파일 이름, <leader>cfd
디렉토리 와 같은보다 직관적 인 매핑을 고려할 수 있습니다 .
"*
와 "+
당신이 플랫폼 확인하고 바로 사용으로 분배 할 수 있도록 동일@+
다른 두 가지 답변의 정보 결합 : 파일의 현재 전체 경로를 잡아 당기고 다른 창에서 명령 버퍼에 넣으려면 먼저 수행 :let @" = expand("%:p")
한 다음 다른 창으로 이동하여을 입력하십시오 Ctrl+R "
.
동일한 디렉토리에 머무르면서 이전 디렉토리를 열어 둔 상태에서 파일을 복사하는 데 유용합니다. 예를 들면 다음과 같습니다.
시작 : src / com / benatkin / paint / shapes / Circle.java 편집
유형
:let @" = expand("%:p")
(경로가 기본 클립 보드 버퍼로 이동합니다.)로 새 창을 엽니 다
:sp
유형
:e Ctrl+R"
화살표 키를 사용하여 Circle으로 돌아가서 Square로 변경하고 <CR>을 누릅니다.
끝 : src / com / benatkin / paint / shapes / Square.java 편집
내 해결책은 다음과 같습니다.
" filename / dirname of the current file {{{
" copy result to the system clipboard and echo the result
" the cb> prompt means the clipboard
" *f*ile *n*ame, ex. init.vim
map <Leader>fn :let @+ = expand("%:t") \| echo 'cb> ' . @+<CR>
" *f*ile *p*ath, ex. /home/user/nvim/init.vim
map <Leader>fp :let @+ = expand("%:p") \| echo 'cb> ' . @+<CR>
" *d*irectory *p*ath, ex. /home/user/nvim
map <Leader>dp :let @+ = expand("%:p:h") \| echo 'cb> ' . @+<CR>
" *d*irectory *n*ame, ex. nvim
map <Leader>dn :let @+ = expand("%:p:h:t") \| echo 'cb> ' . @+<CR>
" }}}
xclip을 사용하여 X의 클립 보드에 액세스하므로 다음을 사용합니다.
nmap <localleader>d :call system("xclip -i -selection clipboard", expand("%:p"))<CR>