duk*_*ave 174 vim clipboard yank
假设当前缓冲区是一个打开以进行编辑的文件,因此:e不显示E32: No file name.
我想猛拉一个或全部:
~\myfile.txtc:\foo\bar\myfile.txtmyfile.txtJD *_*ias 198
TL; DR
:let @" = expand("%")>
这会将文件名复制到unamed寄存器,然后你可以使用good old p来粘贴它.当然,您可以将其映射到密钥以便更快地使用.
:nmap cp :let @" = expand("%")<cr>
你也可以用它来完整的路径
:let @" = expand("%:p")
说明
Vim使用未命名的寄存器来存储已删除或复制(抽出)的文本,同样在粘贴它时会读取此寄存器中的文本.
使用let我们可以手动将文本存储在寄存器中,:let @" = "text"但我们也可以存储表达式的结果.
在上面的例子中,我们使用expand扩展通配符和关键字的函数.在我们的示例中,我们使用expand('%')扩展当前文件名.我们可以将其修改expand('%:p')为完整的文件名.
详情:help let :help expand :help registers请见
Ant*_*zzo 66
如果要将当前缓冲区文件名放在系统级剪贴板中,请尝试将寄存器更改为@ +:
" relative path
:let @+ = expand("%")
" full path
:let @+ = expand("%:p")
" just filename
:let @+ = expand("%:t")
Run Code Online (Sandbox Code Playgroud)
编辑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
Run Code Online (Sandbox Code Playgroud)
然后例如<leader>cf将复制当前缓冲区的相对路径(默认领导者是反斜杠(\)).我经常使用这些命令在文件上运行命令或在命令行上执行其他操作.我不经常使用最后的文件名/目录名.
您可以考虑更直观的映射,例如<leader>cfr相对,<leader>cfa绝对,<leader>cff仅文件名,<leader>cfd目录.
Lon*_*Rob 20
答案已在 Neovim/Ubunutu 上测试。
:let @+=@%
Run Code Online (Sandbox Code Playgroud)
据我所知,%寄存器已经包含相对文件路径,因此就像将%寄存器的内容移动到代表您最喜欢的剪贴板的任何寄存器一样简单。
这个SO答案涉及从一个寄存器复制到另一个寄存器
对我来说似乎很简单。不需要任何难以记住的expand()东西。
如果这样,:reg您将在%寄存器中看到当前文件的名称."%p例如,您可以将其粘贴.
如果像我一样,你经常切换到'alternate'缓冲区,那么它的完整路径和文件名放在#寄存器中是非常方便的."#p例如,您可以将其粘贴.
注意(以防万一这是我的设置特有的行为):我在Ubuntu 14.04.4 LTS上使用VIM 7.4.52.