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

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

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


当前回答

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

:!echo %

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

其他回答

如果你想把当前的缓冲区文件名放在你的系统级剪贴板中,尝试将寄存器更改为@+:

" 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表示目录映射。

答案在Neovim/ ubuntu上测试过。

:let @+=@%

据我所知,%寄存器已经包含了相对文件路径,因此将%寄存器的内容移动到代表您最喜欢的剪贴板的寄存器就很简单。

这个SO答案涉及从一个寄存器复制到另一个寄存器

对我来说很简单。不需要任何难以记住的expand()东西。

我使用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。

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

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