在Vim中当前缓冲区的文件名/路径

假设当前缓冲区是一个打开进行编辑的文件,所以:e不显示E32: No file name

我想抽出一个或所有的:

  • 文件名完全如状态行所示,例如~myfile.txt
  • 文件的完整路径,例如c:foobarmyfile.txt
  • 只是文件名,例如myfile.txt

  • 尝试这个:

    :let @" = expand("%")

    这会将文件名复制到unamed寄存器,然后您可以使用良好的'p'来粘贴它。 当然你可以将它映射到一个密钥以便更快使用。

    :nmap cp :let @" = expand("%")

    你也可以使用这个完整路径

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

    使用:帮助扩大更多细节


    几乎你所要求的,它可能会: 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的目录。

    链接地址: http://www.djcxy.com/p/37633.html

    上一篇: Yank file name / path of current buffer in Vim

    下一篇: How to back up local Mercurial repositories and use rebase?