假设当前缓冲区是一个打开编辑的文件,那么:e不会显示E32: No文件名。
我想要扯掉其中一个或全部:
文件名与状态行中显示的完全一致,例如~\myfile.txt 文件的完整路径,例如c:\foo\bar\myfile.txt 只是文件名,例如myfile.txt
假设当前缓冲区是一个打开编辑的文件,那么:e不会显示E32: No文件名。
我想要扯掉其中一个或全部:
文件名与状态行中显示的完全一致,例如~\myfile.txt 文件的完整路径,例如c:\foo\bar\myfile.txt 只是文件名,例如myfile.txt
当前回答
我把它放在我的vimc中:
nnoremap yl :let @" = expand("%:p")<cr>
其他回答
我把它放在我的vimc中:
nnoremap yl :let @" = expand("%:p")<cr>
如果您希望简单地拉出当前打开的文件名的路径,那么只需按:
step1: ctrl + g[你会在窗口底部看到整个根路径] Step2:用鼠标选择路径 用鼠标中间的滚轮粘贴
答案在Neovim/ ubuntu上测试过。
:let @+=@%
据我所知,%寄存器已经包含了相对文件路径,因此将%寄存器的内容移动到代表您最喜欢的剪贴板的寄存器就很简单。
这个SO答案涉及从一个寄存器复制到另一个寄存器
对我来说很简单。不需要任何难以记住的expand()东西。
以下是我的解决方案:
" 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>
" }}}
几乎就是你想要的,它可能会这样做:在INSERT模式下,Ctrl+R %将当前文件名拉到你所在的位置(命令提示符,编辑缓冲区,…)更多信息请看Vim提示。