答案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>