假设当前缓冲区是一个打开进行编辑的文件,所以:e
不显示E32: No file name
。Vim中当前缓冲区的文件名/路径
我想拔一根或全部:
- 文件名完全一样显示在状态行,例如
~\myfile.txt
- 文件的完整路径,例如
c:\foo\bar\myfile.txt
- 只是文件名,例如
myfile.txt
假设当前缓冲区是一个打开进行编辑的文件,所以:e
不显示E32: No file name
。Vim中当前缓冲区的文件名/路径
我想拔一根或全部:
~\myfile.txt
c:\foo\bar\myfile.txt
myfile.txt
试试这个:
:let @" = expand("%")
这将文件名复制到unamed寄存器,那么你可以用好老“P”将其粘贴。当然你可以将它映射到一个密钥以便更快使用。
:nmap cp :let @" = expand("%")
你也可以用这个完整路径
:let @" = expand("%:p")
用途:帮助拓展更多细节
你问几乎什么,它可能会做:Ctrl+R %
拉动当前文件名到你在哪里(命令提示符下,编辑缓冲区,...)。有关更多信息,请参见this Vim Tip。
从其他几个答案的组合信息:如果你想抽出当前全并将其放入另一个窗口的命令缓冲区中,首先执行:let @" = expand("%:p")
,然后移至另一个窗口并键入Ctrl+R "
。
用于复制文件,同时保持在相同的目录,并保持旧的打开。例如:
开始:编辑的src/COM/benatkin /油漆/形状/ Circle.java
类型
:let @" = expand("%:p")
(该路径被拽住,主要剪贴板缓冲区。 )- 一个新窗口
公开赛
:sp
类型
:e Ctrl+R"
使用箭头键返回到圈,并更改为广场,并按<CR>
结束:编辑的src/COM/benatkin /油漆/形状/方。java的
如果你想要把当前缓冲区的文件名在您的系统级剪贴板,请尝试更改寄存器@ +:
" relative path
:let @+ = expand("%")
" full path
:let @+ = expand("%:p")
" just filename
:let @+ = expand("%:t")
编辑20140421: 我通常使用这些,所以我创建了一些快捷方式。 Linux Vims apparently operate slightly differently than 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
的目录更加直观映射。
我用XCLIP访问X的剪贴板,所以我用:
nmap <localleader>d :call system("xclip -i -selection clipboard", expand("%:p"))<CR>
如果你这样做:reg
您将在%
寄存器查看当前文件的名称。例如,您可以将它粘贴到"%p
。
如果像我一样,您经常切换到'备用'缓冲区,那么将其完整路径和文件名放在#
寄存器中非常方便。例如,您可以将它粘贴到"#p
。
注意(以防万一这是特定于我的设置的行为):我在Ubuntu 14.04.4 LTS上使用VIM 7.4.52。
这里是我的解决方案:
" 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>
" }}}
以类似http://stackoverflow.com/q/741024/80161和http://stackoverflow.com/q/2233905/80161 – 2011-05-31 19:50:16
到剪贴板:HTTP: //vi.stackexchange.com/questions/3686/copy-the-full-path-of-current-buffer-to-clipboard – 2015-10-20 08:53:38