zsh에서 사전 컴파일된 명령줄 입력

zsh에서 사전 컴파일된 명령줄 입력

저는 최근에 우분투 12.04 64비트 머신을 설정했습니다. 나는 사용한다티먹스창문이 많이 열려 있어서 다들 사용하고 있어요zsh쉘로서, 그 중 일부는chroot일반 환경과 동일한 홈 폴더를 사용하는 환경입니다.

쉘에서 임의의 명령(모든 종류, 대부분 파일 작업, vi, chroot 환경 내외의 빌드/만들기 명령)을 수행한 후 각 쉘은 과거 기록에서 미리 컴파일된 일부 명령을 즉시 표시하기 시작합니다. 무엇이든 입력하거나 이전 기록을 검색하기 전에 Ctrl-Q 등을 사용하여 제거합니다.

더 짜증나는 사실은 미리 컴파일된 명령 앞에 문자를 실수로 입력한 다음 줄을 삭제하고 내 명령을 입력하면 다음 프롬프트에서 해당 추가 문자도 얻게 된다는 것입니다. 이 수정된 입력은 zsh 기록 파일에 나타나지 않고 점점 커집니다.

.zsh_history 파일을 삭제하거나 새 셸을 생성하면 문제는 아주 짧은 시간 동안 해결되었다가 잠시 후(셸 사용 몇 분 후) 냉혹하게 다시 돌아옵니다.

다음은 얼마 후 이전 명령에서 셸로 돌아온 후 프롬프트가 어떻게 보이는지에 대한 예입니다.

[10:59:14] user:Build git:(master*) $ schroot -c full32 -- antls -l

프롬프트는 분명히 $로 끝나야 하며, ant이전에 Ctrl-Q를 사용하여 줄을 삭제하기 전에 실수로 입력한 일부 쓰레기가 뒤따른다는 점에 유의하세요.

맥락에 따라 사용하고 있습니다.오-내-zsh와 더불어제프가사이드테마와gitfast플러그인. chroot의 경우 내가 사용하고 있습니다.슈루트다음 구성으로:

[precise-full32]
description=Full 32bits dev environment
aliases=full32
type=directory
directory=/opt/chroot/full32
users=user
root-groups=root
personality=linux
preserve-environment=true

나는 어찌할 바를 모르고 여기나 다른 곳에서 설명한 이와 같은 문제를 찾을 수 없습니다. 이 짜증나는 행동의 원인이 무엇인지에 대한 단서가 있습니까?

답변1

나는 당신이 emacs 키맵( d'oh-my-zsh또는 일부 사용자 정의 구성을 통해)을 사용하고 있다고 가정합니다... 다음을 확인하십시오.

$ bindkey | grep '\^Q'
"^Q" push-line

그리고... push-line위젯은 당신이 귀찮다고 설명하는 목적에 맞게 정확하게 설계되었습니다. 긴 명령을 입력했지만 몇 가지 단계를 잊어버렸습니다... 그래서 를 push-line통해 시작하고 CTRL-Q, 새로운 프롬프트를 받고, 좋게 만들고, 이후이전에 입력했지만 아직 실행되지 않은 명령을 다시 받습니다.:

$ `cp /something/foo/bar to/another/long/path`  # to/another/long/path does not exist
[CTRL-Q]
$ mkdir to/another/long/path
[ENTER]
$ `cp /something/foo/bar to/another/long/path`  # appears again and I can execute it via [ENTER] without retyping

그래서 긴 이야기는 짧게 끝났습니다.

CTRL-U기본 바인딩인 것을 사용 하거나 해당 바로가기에 익숙하다면 kill-whole-line다시 정의하십시오 .CTRL-Q

$ bindkey '^Q' kill-whole-line

관련 정보