zsh에서 ALT + LeftArrowKey 솔루션 찾기


130

최근에 bash에서 zsh로 전환했지만 한 번에 한 단어 씩 앞뒤로 이동하는 Alt+ LeftArrowKey와 Alt+ RightArrowKey가 그립습니다 .

지금 Alt+를 누르면 LeftArrowKey몇 개의 글자로 돌아가서 갇혀 있습니다. 나는 더 이상 뒤로 가지 않을 것이며 내가 예상했던 것처럼 Alt+ RightArrowKey로 라인의 끝으로 돌아 가지 않을 것입니다. 화살표 키를 사용하여 줄의 끝으로 이동할 수도없고 두 번째에서 마지막으로 만 이동합니다. 줄에 새 문자를 입력하거나 실제로 삭제할 수 없습니다.

사랑하는 지름길을 어떻게 되 찾을 수 있습니까?

중요한 경우 터미널을 사용하는 Mac OS X에 있습니다.

답변:


243

실행 cat한 다음 키를 눌러 바로 가기가 보내는 코드를 확인합니다.
( 완료되면 Ctrl+ C를 눌러 종료 cat합니다.)
저에게는 (ubuntu, konsole, xterm) Alt+를 눌러 ←전송 ^[[1;3D하므로 .zshrc에 넣을 것입니다.

bindkey "^[[1;3C" forward-word
bindkey "^[[1;3D" backward-word

(실제로 나는 CtrlWindows 또는 Linux GUI 아래의 일반 텍스트 상자에서와 같이 단어별로 이동 하려면 + 화살표 를 사용하는 것을 선호합니다 .)

관련 질문 : Terminator Terminal Emulator에서 Zsh를 실행할 때 .zshrc의 키 설정 (Home / End / Insert / Delete) 수정


15
당신은 나의 구세주입니다! 내 Mac에서 "Alt + <-"는 "^ [b"를,->는 "^ [f"를 주어 추가했습니다. 매력처럼 작동합니다. Ctrl + 화살표는 Mac에서 데스크톱 간 전환을 위해 예약되어 있습니다.
— Mads Ohm Larsen

1
한 가지 메모는 ctrl + <-cat ^[[D이 나에게 보고 하고 ctrl + v가보고하고 있다는 것 ^[OD입니다. Ctrl + v의 제안은 작동했지만 cat 's는 작동하지 않았습니다. 또한 ctrl + v는 alt + <-및 alt +-> 모두에 대해 동일한 것을보고했습니다. 나는 cat의 출력을보고 "[["를 "O"로 대체하여이 두 가지를 추가 할 수있었습니다.
— Mike S

10
cat 아래의 내 출력은 ^[^[[C정방향 단어와 ^[^[[D역방향 단어에 대한 것이지만 .zshrc에서 업데이트하는 것은 어떤 이유로 작동하지 않았습니다.
— Yunti

2
@Yunti - 퍼팅 bindkey "^[^[[D" backward-word과 bindkey "^[^[[C" forward-word에 ~ / .zprofile 나를 위해 일한!
— Fernando Espinosa

남자! 내 생명을 구했습니다! 공유해 주셔서 감사합니다!
— Joao Henrique

187

셸에 관계없이 iTerm을 사용하는 모든 사용자

여기에 제공된 모든 솔루션은 제 생각에 역방향 접근 방식을 취합니다. 기본적으로 셸에 터미널에서 설정 한 일부 esc 시퀀스 또는 기타 키 바인딩을 수신하도록 지시하여 셸을 전환 할 때 호환성 문제를 생성합니다 (다른 셸에 SSH를 사용하는 경우 BASH에서 ZSH로 전환하는 등 모든 키 바인딩은 아니지만 일부).

대부분의 셸에는 미리 바인딩 된 기본 시퀀스 집합이 있습니다. 또한 100 % 일관 적이지는 않지만 충분히 가깝습니다. 따라서 셸에서 특정 작업에 대한 키 바인딩을 만드는 가장 쉬운 방법은 터미널 응용 프로그램에 셸간에 일관된 기본 키 바인딩에 바인딩하도록 지시하는 것입니다.

나는 네이티브 맥 키 바인딩에 가까운 응답에 터미널을 얻기 위해 압축 솔루션을 썼다 여기에

iTerm 환경 설정 ⌘+ 탭으로 ,이동하고 Profiles( Keys탭을 사용할 수 있지만 프로필에 키 바인딩을 추가하면 프로필을 저장 하고 여러 컴퓨터에 동기화 할 수 있음) keys하위 탭으로 이동하고 다음을 입력합니다.

커서를 왼쪽으로 한 단어 이동

⌥+ ←16 진수 코드 보내기 :0x1b 0x62

커서를 오른쪽으로 한 단어 이동

⌥+ →16 진수 코드 보내기 :0x1b 0x66

그리고 ZSH뿐만 아니라 BASH, irb / pry, node 등을 실행하는 서버에 SSH를 사용하는 경우에도 원하는 동작을 제공해야합니다.


1
zsh가 제대로 작동하지만 irb 및 기타 콘솔이 아니기 때문에 허용되는 솔루션에 문제가 있습니다. 이전 설정 지우기 (권장되는 iTerm 프로필에서)는 매력처럼 작동합니다!
— llekn

1
bindkey 솔루션은 Mac에서 성가신 오류 소리를냅니다. 이것이 올바른 방법이어야합니다.
— Weishi Zeng

@Lev 셸이 기본 구성에 매핑되지 않았기 때문일 수 있습니다. 실행 bindkey | grep forward-word하면 "^[f" forward-word반환되는 것을 볼 수 있지만 그렇지 않은 경우 두 가지 옵션이 있습니다. 반환 된 다른 사람의 일에 매핑하거나 추가 "^[f" forward-word당신에게 .zshrc.
— Travis

이것은 셸 "^[f"에서 가장 일관되게 사용되는 바인딩 forward-word이며 내 bash 버전에서 기본적으로 설정된 유일한 바인딩 인 것 같습니다 .
— Travis

어떻게 든 옵션 대신 명령 버튼으로 작동했습니다. 감사합니다. :)
— Vaibhav Jain

72

~ / .zshrc에 다음을 추가하면 OSX Mountain Lion에서 저에게 효과적이었습니다.

bindkey -e
bindkey '[C' forward-word
bindkey '[D' backward-word

4
이 솔루션은 사용할 때마다 iTerm 2에서 "종"을 트리거하므로 단어 사이를 건너 뛰는 것은 정말 짜증날 수 있습니다.
— Matthew Morek

1
방법을 사람의 그림은 ^ @MatthewMorek 이런 일이 발생하지 않도록하기
— 다니엘 고베

18
'\ e \ e'는 종을 막습니다. 터미널 호환 모드에서 사용하여 ITerm 2 엘 캐피 탄의 내 구성은 bindkey "\e\e[D" backward-word bindkey "\e\e[C" forward-word
— 요하네스 Gontrum

감사합니다. 이것은 macOs Sierra의 문제를 해결했습니다. 터미널 또는 iTerm2에서 벨소리가 들리지 않습니다.
— Raspo 2017

시작이나 단어가 아닌 단어의 끝에서 이동하도록 설정하는 방법은 무엇입니까?
— Mafro34

22

MacOS High Siera 10.13.6 또는 Mojave 10.14.2 및 ZSH와 함께 iTerm2 사용 단어에서 이동하려면 다음과 같이 입력해야합니다.

bindkey "\e\e[D" backward-word
bindkey "\e\e[C" forward-word

다른 솔루션이 작동하지 않습니다.


1
이것은 나에게도 효과가 있었던 유일한 솔루션입니다. 감사합니다! Mac OS Mojave
— jamescampbell

OS Catalina에서도 작동합니다!
— Reed Richards

7

귀하의 질문에 엄격하게 답변하지는 않지만 forward-word및 의 기본 바인딩 backward-word은 alt-fresp입니다. alt-b.

이 작품은 모든 곳에서, 또한과 일치하면서 홈 행을 떠날 것을 요구하고, 좋은 기억을 돕는 특성 (F = 앞으로, B = 백)를 가지고하지 않습니다 ctrl-f및 ctrl-b있는 forward-character및 backward-character.

화살표 키를 뜯어 내세요!


4
zsh / iterm2에서 작동하지 않고 ƒ 및 ∫ (cb cf 작동)를 인쇄합니다.
— Davorin

2

나를 위해 작동하도록 이 답변을 사용 했지만 코드를 바꿔야했습니다 (왼쪽 <-> 오른쪽)

⌥ + ← 16 진수 코드 보내기 : 0x1b 0x66
⌥ + → 16 진수 코드 보내기 : 0x1b 0x62

다음을 내 ~/.zshrc

bindkey -e
bindkey "^[b" forward-word
bindkey '^[f' backward-word

bindkey대신 s 를 변경하여 에 바인딩 ^[f하고 에 바인딩 forward-word하지 않으면 혼란스럽지 않을 것 backward-word입니다.
— Nickolay

1

Mavericks (10.9.4)에서 코드는 1; 5입니다 ... 그래서 alt를 화살표로 바인딩하기 위해 다음을 사용하여 .zshrc를 사용합니다.

bindkey "^[[1;5C" forward-word
bindkey "^[[1;5D" backward-word

CTRL + V를 사용한 다음 사용할 명령을 사용할 수 있습니다.

Yosemite에서는 Rob의 솔루션을 사용합니다.


1
bindkey "[C" forward-word bindkey "[D" backward-word
— Farkie 2015

0

zsh에서 bindkey명령을 사용하여 키보드 단축키를 볼 수 있습니다 .

bindkey사용자 지정 키 바인딩없이 사용할 수있는 옵션을 탐색하는 데 사용 합니다.

즉 ^[b , 단어를 뒤로 이동하고 단어 ^[f를 앞으로 이동합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.