假设当前缓冲区是一个打开编辑的文件,那么:e不会显示E32: No文件名。

我想要扯掉其中一个或全部:

文件名与状态行中显示的完全一致,例如~\myfile.txt 文件的完整路径,例如c:\foo\bar\myfile.txt 只是文件名,例如myfile.txt


当前回答

如果您希望简单地拉出当前打开的文件名的路径,那么只需按:

step1: ctrl + g[你会在窗口底部看到整个根路径] Step2:用鼠标选择路径 用鼠标中间的滚轮粘贴

其他回答

我把它放在我的vimc中:

nnoremap yl :let @" = expand("%:p")<cr>

以下是我的解决方案:

" 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>
" }}}

如果你在终端vim上,并且想要复制到系统剪贴板:为了便于记忆,不需要预定义的映射/函数:

:!echo %

打印当前缓冲区的相对路径到终端,在那里你可以复制它,然后输入回vim。(如前所述,您可以在命令后加上:p或:t以获得绝对或basename,如果您能记住....)

如果您执行:reg,您将在%寄存器中看到当前文件的名称。例如,您可以用“%p”粘贴它。

如果你像我一样,经常切换到“备用”缓冲区,那么将它的完整路径和文件名放在#寄存器中是非常方便的。例如,您可以用“#p”粘贴它。

注意(以防这是特定于我的设置的行为):我在Ubuntu 14.04.4 LTS上使用VIM 7.4.52。

我使用xclip来访问X的剪贴板,所以我使用:

nmap <localleader>d :call system("xclip -i -selection clipboard", expand("%:p"))<CR>