Xclip
在 Vifm 中複製不帶副檔名的文件名
從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>