문제

현재 버퍼가 편집 할 수있는 파일이라고 가정하므로 :e 표시되지 않습니다 E32: No file name.

나는 하나 또는 전부의 하나를 잡고 싶다 :

  • 상태 라인에 표시되는 파일 이름 (예 : ~\myfile.txt
  • 파일의 전체 경로, 예를 들어 c:\foo\bar\myfile.txt
  • 파일 이름 만 (예 : myfile.txt
도움이 되었습니까?

해결책

tl; dr

:let @" = expand("%")>

파일 이름을 복사합니다 이름이없는 레지스터, 당신은 좋은 오래된 것을 사용할 수 있습니다 p 붙여 넣기. 물론 빠른 사용을 위해 이것을 키에 매핑 할 수 있습니다.

:nmap cp :let @" = expand("%")<cr>

전체 경로에 이것을 사용할 수도 있습니다

:let @" = expand("%:p")

설명

vim을 사용합니다 이름이없는 레지스터 삭제되거나 복사 된 텍스트 (Yanked)를 저장하려면이 레지스터에서 텍스트를 읽을 때 마찬가지로 페이스트 할 때 마찬가지로.

사용 let 레지스터에 텍스트를 수동으로 저장할 수 있습니다 :let @" = "text" 그러나 우리는 표현의 결과를 저장할 수도 있습니다.

위의 예에서는 기능을 사용합니다 expand 와일드 카드와 키워드를 확장합니다. 이 예에서 우리는 사용합니다 expand('%') 현재 파일 이름을 확장하려면 우리는 그것을 수정할 수 있습니다 expand('%:p') 전체 파일 이름의 경우.

보다 :help let :help expand :help registers 자세한 내용은

다른 팁

거의 당신이 요구하는 것과 할 수 있습니다. Ctrl+R % 현재 파일 이름을 어디에 있는지 (명령 프롬프트, 편집 버퍼, ...)로 끌어 당깁니다. 보다 이 vim 팁 이상.

현재 버퍼 파일 이름을 시스템 레벨 클립 보드에 넣으려면 레지스터를 @+로 변경하십시오.

" 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 디렉토리 용.

당신이한다면 :reg 현재 파일의 이름이 % 등록하다. 당신은 그것을 붙여 넣을 수 있습니다 "%p, 예를 들어.

나와 마찬가지로 종종 '대체'버퍼로 전환하면 전체 경로와 파일 이름이 # 등록하다. 당신은 그것을 붙여 넣을 수 있습니다 "#p, 예를 들어.

참고 (이것은 내 설정과 관련된 동작 인 경우) : Ubuntu 14.04.4 LTS에서 VIM 7.4.52를 사용하고 있습니다.

몇 가지 다른 답변에서 정보 결합 : 파일의 현재 전체 경로를 잡아 당기고 다른 창에 명령 버퍼에 넣으려면 먼저 :let @" = expand("%:p"), 그런 다음 다른 창으로 이동하여 입력하십시오 Ctrl+R ".

동일한 디렉토리에 머무르고 이전 디렉토리를 열어 두는 동안 파일을 복사하는 데 유용합니다. 예를 들어:

시작: 편집 src/com/benatkin/paint/shapes/circle.java

  1. 유형 :let @" = expand("%:p") (경로는 메인 클립 보드 버퍼에 젖 힙니다.)

  2. 함께 새 창을 엽니 다 :sp

  3. 유형 :e Ctrl+R"

  4. 화살표 키를 사용하여 원으로 돌아가서 정사각형으로 변경하고 누르고 누릅니다.u003CCR>

: 편집 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>
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top