답변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>