在 Vifm 中复制不带扩展名的文件名

在 Vifm 中复制不带扩展名的文件名

维夫姆维基并使用剪辑,它们展示了如何复制所选文件的文件名:

nnoremap yn :!echo -n %c | xclip -selection clipboard %i<cr>:echo expand('%"c') "is yanked to clipboard"<cr>

但它会使用扩展名复制它,如何将不带扩展名的文件名复制到剪贴板?

答案1

使用 sed 删除第一个点之后(包括第一个点)的所有内容:

:nnoremap yn :!sed "s/\..*//"<<<%c|xclip -selection clipboard %i<cr>

如果您的 shell 不支持这里字符串 ( <<<),请使用 printf (为什么 printf 比 echo 更好?)通过管道输入 sed:

:nnoremap yn :!printf '%%s' %c|sed "s/\..*//"|xclip -selection clipboard %i<cr>

Vifm 处理在将命令传递给 shell 之前。%c成为文件名(正确转义); %s也将被替换,因此%%s需要这样 printf 才能获得%s.同样,<cr>是“Enter 等效”并且是必需的,否则整个命令只会在命令行中弹出。

这已经被测试过。即使名称精美的文件也 t*.a .<!e>&通过了测试,剪贴板也会得到t*.

如果您想删除之后的所有内容(包括)最后的 点(不是第一个),使用sed "s/\.[^.]*$//".


要在状态栏中显示复制的字符串,请重复该命令直至 sed 并使用%S宏。

:nnoremap yn :!printf '%%s' %c|sed "s/\..*//"|xclip -selection clipboard %i<cr>:!printf '%%s' %c|sed "s/\..*//;s/$/ is yanked to clipboard/" %S<cr>

相关内容