答え1
sed を使用して、最初のポイント以降のすべてのエントリを削除します。
:nnoremap yn :!sed "s/\..*//"<<<%c|xclip -selection clipboard %i<cr>
シェルがこの文字列()をサポートしていない場合は、<<<
printf(なぜprintfがechoより優れているのですか?)sedへのパイプ入力:
:nnoremap yn :!printf '%%s' %c|sed "s/\..*//"|xclip -selection clipboard %i<cr>
Vifm処理マクロコマンドをシェルに渡す前に。%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>