내가 역사에서 이전 줄에 대해 말하는 것이 아닙니다. 현재 여러 줄 명령에서 이전 줄에 대해 이야기하고 있습니다.
예를 들어 zsh에 여러 줄 명령을 입력하면 ( _
커서를 나타냄) :
$ for i in {1..5}; do
for> echo i_
이 시점에서 마음이 바뀌고 대신 i
루프를 통과 시키고 싶기 {1..10}
때문에 이전 줄로 돌아 가야합니다. 그러나 ⌫, ← 또는 C-b
, 또는 두 번째 줄의 시작 부분에서 모든 중지를 생각할 수있는 모든 방법으로이를 수행하는 방법을 알 수 없습니다 . 그래서, 다시 돌아갈 수 있습니까? 미리 감사드립니다.
실제로 이것은 zsh에 국한되지 않습니다. 예를 들어, 나는 bash에서도 이것을 알아 낸 적이 없습니다.
나는 이미 상당한 시간을 검색 결과없이 인터넷 검색에 보냈으므로 실례하고 이것이 분명하다면 내 Google-fu를 비난하십시오.
참고로 Emacs 키 바인딩을 사용하고 있습니다.
$ bindkey | grep delete
"^D" delete-char-or-list
"^H" backward-delete-char
"^[[3~" delete-char
"^?" backward-delete-char
이것이 도움이 될지 확실하지 않습니다.
이것이 가능하다고 생각하지 않지만 다음과 같은 다른 해결 방법이 있습니다.
일부 키를 바인딩 할 수 있습니다 (예 : 이 경우 <C-Enter>
출력하지 않도록 터미널에 지시 할 수 <C-m>
있는 경우).
function _-add-newline()
{
LBUFFER="$LBUFFER"$'\n'
}
zle -N add-newline _-add-newline
bindkey "\Ca" add-newline
. 이렇게하면 <C-a>
새 줄 을 누르면 버퍼에 나타나지만 수락 줄 위젯을 트리거하지 않고 이전 줄을 계속 편집 할 수 있습니다. 예를 들어 왼쪽 / 오른쪽 화살표를 사용하여 이동할 수 있습니다.
for x in y ; do<CR>echo foo<CR><C-c><Up>
하면 for x in y ; do\necho foo
버퍼에 표시되고 모든 텍스트를 편집 할 수 있습니다. 참고 : <CR>
마지막 줄을 유지하고 (에 의해 중단 된 줄 <C-c>
은 저장되지 않음) <C-c>
입력을 중단해야합니다. 이 변형은 이미 입력 한 경우 작동하지 않습니다 done
(먼저 <CR>
주기가 실행 됨). 마지막으로 마지막 줄을 버리고 <C-c>
다시 입력 할 수 있습니다.accept-line
는 입력을 구문 분석하고 명령을 완전히 작성했는지 여부를 결정하는 코드로 위젯을 재정의 할 수 있으며 그렇지 않은 경우 \n
버퍼에 추가 하고 (위 함수처럼) original을 실행하지 않고 accept-line
그렇지 않으면 original accept-line
이 실행됩니다. 이 변형은 구현하기가 훨씬 더 어렵 기 때문에 "이론적으로"말하고 있습니다.이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다