Windows에서는 경로가 (불합리하게) 매우 길기 때문에 일부 링크를 터미널에 끌어서 놓거나 파일 관리자에서 경로를 복사하여 붙여넣는 것이 일반적입니다. 쉘 초기화 파일에 유사한 기능을 넣을 수 있습니다
cdw() { cd "`cygpath -u $1`" }
이제 Windows 버전이 있습니다 cd
. "C:\Program Files"가 클립에 있다고 가정하면 다음을 입력할 수 있습니다.
cdw
" CTRL+ V"
그리고 거기에 CD가 있습니다. 나는 당신의 말에 동의합니다. 따옴표는 지루합니다. cdw
CTRL+ V(큰따옴표 없이)는 킬러가 될 것입니다 cd
. 표시된 것처럼
Bash에서 이 명령을 활용하는 것은 쉽습니다 .history
여기. 하지만 저는 를 사용하고 있습니다 zsh
. 여기서 실행하면 history
마지막 명령(즉, history
자체)이 반환되지 않습니다. 시행착오를 거쳐 다음과 같은 기능을 생각해냈습니다.
cdw(){
print -s
set $(fc -l -1 | tail -2 | head -1)
shift 2
p=`cygpath -u "$*"`
cd "$p"
}
작동하지만 너무 복잡해 보입니다. 당신이 나보다 더 우아한 해결책을 찾을 수 있는지 궁금합니다.
답변1
히스토리 해킹은 이 문제를 해결하는 매우 이상한 방법이며 매우 취약합니다. 괄호와 같은 Windows 파일 이름의 특정 유효한 문자에는 작동하지 않습니다.
붙여넣은 Windows 경로를 사용하는 더 쉬운 방법이 있습니다. 이것을 라인 편집기에 붙여넣는 대신 getclip
유틸리티를 호출하십시오(예:cygutils-extra
최신 버전의 Cygwin 에서).
cdw () {
cd -- "$(getclip)"
}
cd -- "`getclip`"/../foo
$IFS
dir 경로에 문자(기본적으로 공백, 탭, 줄 바꿈 및 NUL)가 포함되어 있지 않으면 큰따옴표를 사용할 필요가 없습니다.
경로를 편집할 수 있으려면 키를 다음에 바인딩하십시오.expand-or-complete-prefix
, 예를 들어 다음을 입력 "`getclip`"
하고 누릅니다 Esc Tab.
bindkey '\e\t' expand-or-complete-prefix
또 다른 접근 방식은 키를 바인딩하여 클립보드의 참조 내용을 삽입하는 것입니다.
insert-quoted-clipboard-content () {
LBUFFER+=${(q)$(getclip)}
}
zle -N insert-quoted-clipboard-content
bindkey '^X^V' insert-quoted-clipboard-content
답변2
자일스 답변질문은 Zsh에 관한 것이기 때문에 Zsh에 대한 것입니다. Google이 나를 이 페이지로 데려왔지만 나는 Bash를 사용하고 있습니다. 에 추가하면 .bashrc
.
# Convert Windows paths to Cygwin paths and add " if necessary. Then paste to the command buffer.
paste()
{
local prefix=${READLINE_LINE:0:${READLINE_POINT}}
local suffix=${READLINE_LINE:${READLINE_POINT}}
local text=$(getclip)
# Does the clipboard contents look like a Windows path (e.g., C:\Program Files)?
if [[ ${text} =~ [A-Z]:\\.* ]]; then
text=$(cygpath --mixed "${text}")
# Add quotes if there are any spaces in the path
if [[ ${text} == *" "* ]]; then
text='"'${text}'"'
fi
fi
# Insert the clipboard contents at the current cursor position
READLINE_LINE=${prefix}${text}${suffix}
# Move the cursor to the end of the inserted text
((READLINE_POINT += ${#text}))
}
# Remove Ctrl+V binding
stty lnext undef
# Change Control+v to execute paste()
bind -x '"\C-v":"paste"'
답변3
제가 질문을 잘못 이해한 것인지는 모르겠지만 최악의 경우에는 이것이 다른 사람들에게 도움이 될 수 있다고 생각했습니다. Windows 경로 와 유사한 기능을 만들 필요 가 없습니다 .cdw
cd
Cygwin은 cd
따옴표로 묶는 한 이미 이를 허용합니다.
예를 들어, cd 'C:\Program Files'
변경씨너의 것을 바꿔라디./cygdrive/c/Program Files
1 : 나는 의도적으로 "필요"라는 단어를 사용합니다. 여전히 합법적이고 합리적인 상황이 있을 수 있습니다.욕구만들다 cdw
.