Xclip

在 Vifm 中複製不帶副檔名的文件名

  • August 8, 2020

Vifm wiki並使用xclip,他們展示瞭如何複製所選文件的文件名:

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

但是它使用副檔名複製它,我如何將沒有副檔名的文件名複製到剪貼板?

使用 sed 刪除所有內容,包括第一個點:

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

如果您的 shell 不支持 herestrings ( <<<),請使用 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>

引用自:https://unix.stackexchange.com/questions/603179