최근 몇 달 동안 Chrome에서 URL을 복사한 다음 Chrome에서 Shift-Insert를 누르면 붙여 urxvt
넣은 URL이 이스케이프된다는 사실을 발견했습니다.
예를 들어 원래 URL은 다음과 같습니다.
http://example.com/?a=c
붙여넣은 내용은 다음과 같습니다.
http://example.com/\?a\=c
하지만 웹 브라우저나 에 붙여넣는 경우에는 vim
벗어날 수 없습니다.
아치리눅스를 사용하고 있습니다 urxvt
,,,zsh
oh-my-zsh.
답변1
이것은"url-quote-magic"이라는 Z 쉘 모듈행동 중. 쉘 메타 문자와 인용을 완전히 무시하더라도 원하는 결과를 얻을 수 있도록 노력합니다. ZLE에서 따옴표가 없는 단어가 URL(스키마 앞에 오는)처럼 보이는 경우를 감지하고 나머지 단어 내에서 문자 자체 삽입이 발생하는 방식을 변경합니다.
붙여넣기 작업만 입력한 경우
http://example.com/?a=c명령줄 편집기로 이동하면 다음 명령이 표시됩니다.달릴 때파일 이름 확장을 시도하고실행 실패파일 이름이 일치하지 않기 때문입니다. Vivek Verma의 유명한 예예:
~$mpvhttps://www.youtube.com/watch?v=HcgJRQWxKnw zsh: 일치하는 항목이 없습니다.https://www.youtube.com/watch?v=HcgJRQWxKnw ~$
?
기억하세요: Z Shell에는 , [
및 ;뿐만 아니라 (명령 이름 검색) 및 (숫자 범위), , 및 등 많은 파일 이름 확장자 문자가 ]
있습니다 . 여기에는 Korn 쉘 호환성 메커니즘도 포함되지 않습니다. 보다*
=
<
>
~
^
#
zshexpn매뉴얼 페이지에는 꽤 긴 세부사항이 있습니다.
url-quote-magic은 이것이 인용된 단어가 아닌지 확인하고 http:
패턴 접두사를 식별하고 파일 이름 확장을 호출하지 않도록 및를 및 로 ?
변경합니다 .=
\?
\=
그러니 당신이 아니라면실제로 원한다, 어떤 이유에서든 붙여넣거나 입력하는 URL(작은따옴표를 묶지 마십시오)은 모든 파일 이름 확장의 적용을 받게 되며 작동하지 않거나 (드문 극단적인 예상치 못한 경우) 예상치 못한 결과 일치가 발생합니다. URL에서 쉘 메타 문자의 자동 인용이 자동으로 수행되었다고 분명히 생각했기 때문에 기뻐할 것입니다. ☺
답변2
@JdeBP가 무슨 일이 일어나고 있는지에 대해 좋은 설명을 제공했지만 이 동작에 대해 무엇을 할 수 있는지 알 수 없는 것 같습니다.
붙여넣을 때 zsh가 URL 링크를 이스케이프 처리하는 것을 방지하려면 URL 링크를 큰따옴표로 묶으세요.
"http://example.com/?a=c"
내용 붙여넣기:
"http://example.com/?a=c"
답변3
살펴볼 가치가 있는 것은 oh-my-zsh와 safe-paste 플러그인의 사용(또는 부족)입니다:
- Safe Paste 플러그인은 안전한 붙여넣기를 보장하지 않으며 다른 기능을 중단시킵니다. 1742 화논평
이 플러그인을 활성화하면 URL을 포함하여 붙여넣은 특수 문자의 이스케이프도 중단됩니다.
- #4434를 붙여넣은 후 키보드 입력이 비활성화됩니다.
- 데비안 버그 보고서 로그 - #802581 zsh: URL을 붙여넣을 때 url-quote-magic이 더 이상 작동하지 않습니다.
이러한 보고서와 유사한 보고서에서 url-quote-magic
다음 변경 사항으로 인해 손상된 것으로 보입니다.아니요브래킷 붙여넣기 기능을 사용하세요. 아마도 적절한 위치에서 버그 보고서를 열어야 할 것입니다.
답변4
분명히 이것이 이 문제를 해결하는 가장 깨끗한 방법은 아니지만 다음은 zsh의 자동 이스케이프를 사용하지 않고 문자열을 복사하는 해결 방법입니다.
sudo apt-get install xclip
alias zhistory_paste='echo : `expr $(date +%s) + 1`:0\;`printf "$(xclip -o clipboard)\n"` >> ~/.zsh_history && fc -R'
이제 무언가를 붙여넣고 싶을 때 zhistory_paste
위쪽 화살표 키를 사용하여 끈을 당겨 빼내기만 하면 됩니다.