여러 줄 명령에는 다음과 같은 차이점이 있습니다.
- 줄 시작
- 명령 시작
vim 키 바인딩 사용set -o vi
FOR READLINE(예: bash, psql 등), 명령의 시작 부분 대신 줄의 시작 부분으로 이동하는 방법.
VIM에는 그런 문제가 없습니다. 이는 readline 애플리케이션의 vi 키 바인딩에 있습니다..
이것을 복사하세요...모두(아래 여러 줄의 인용문)
여러 줄 명령에는 다음과 같은 차이점이 있습니다.
- 줄 시작
- 명령 시작
vim 키 바인딩을 사용하면
set -o vi
명령 시작 부분 대신 줄 시작 부분으로 어떻게 이동할 수 있나요?
이제 다음 지침을 따르세요..
- 유형
echo "
- 위의 내용을 붙여넣으세요.
"
명령을 완료하려면 을 입력 하고 키를 누르세요 Enter.
이제 위쪽 화살표를 눌러 명령 버퍼에 넣습니다.
- 이제 줄의 시작과 끝으로 어떻게 이동합니까?명령이 아니다?
- 여러 줄 명령에서 한 줄 위로 이동하는 방법,다른 명령을 실행하지 마십시오?
답변1
이것이 효과가 있는지 잘 모르겠습니다.정확히당신이 원하는 것은 무엇입니까? 하지만 이것이 아마도 당신이 얻을 수 있는 가장 가까운 것일 것입니다.
escv
$EDITOR
현재 명령은 선택한 편집기(예: Debian에 설정된 편집기 /etc/alternatives
)에서 열립니다. 아마도 이것을 vi 또는 vim으로 설정하고 , 등을 사용하여 j줄 k사이 0를 탐색 할 수 있습니다 $.
보너스로,
shopt -s lithist
세미콜론으로 구분된 명령을 연결하는 대신 기록의 줄 형식이 유지됩니다.
Evan Carroll이 지적했듯이 이것은 bash에서만 작동하지만 readline을 사용하는 다른 많은 프로그램에도 외부 편집기가 있습니다. psql
예를 들어 \e
.
답변2
bash는 요청된 작업을 전혀 수행하지 않습니다. 이는 ksh를 상당히 유사하게 모방한 것입니다.육. 여기서 요청한 기능은 다음과 같습니다.육기능이지만 vim에서 제공하는 확장 기능입니다.
답변3
- 줄 시작
- 명령 시작
readline/bash에서 이 두 가지(여러 줄 명령)의 차이점을 쉽게 보여줄 수 있습니다.실행할 수 없습니다. 그리고 구별이 불가능하기 때문에 각 키에 바인딩할 수 없습니다.
다음은 모두 가정합니다.set -o vi
bash 프롬프트에 다음을 입력한다고 가정해 보겠습니다 Return. (또한 이를 눌러 출력을 생성합니다.)
[~]$ echo "yay
> yep
> yup"
yay
yep
yup
Esc다음으로 을 누르고 k다음 정보( {.}
커서 위치)를 얻습니다.
[~]$ {e}cho "yay
yep
yup"
다음 사항에 유의하세요.
PS2
(>
내 컴퓨터에서는) 직접 입력할 때처럼 인쇄되지 않습니다.- 명령 내의 줄이 아닌 이전 명령을 계속 누르 k거나 스크롤 하는 경우 .j
그럼 실제로 편집을 하고 있다고 가정해 보겠습니다.몇줄 안됨하지만 하나개행 문자를 포함하는 단일 행(예, 거기에는 큰 차이가 있습니다. 명령 기록은 개행으로 구분된 텍스트가 아닌 연결된 목록으로 메모리에 저장됩니다.)
인터프리터가 구문 분석할 때만 한 줄이 여러 명령이 된다는 것을 증명하는 방법을 찾아보겠습니다. 이것은 readline 섹션의 명령입니다 man bash
:
comment-begin (``#'')
The string that is inserted when the readline insert-comment command is executed. This command is bound to
M-# in emacs mode and to # in vi command mode.
기본적으로 해당 줄에 도달하면 #주석 처리되어 인터프리터에게 전달되어야 합니다(왜 인터프리터에게 전달되는지는 모르겠지만 기록에 표시될 것 같습니다). 어쨌든, 우리는 #readline 명령을 클릭하면 실행된다는 것을 알고 있습니다. 즉, 편집 명령이 아닙니다(실제로 Vi에서는 "다음 검색"이어야 합니다).
먼저 다음을 눌러 커서를 끝으로 이동해 보겠습니다 $.
[~]$ echo "yay
yep
yup{"}
이제 클릭 #하면 상황이 발생합니다. 쉘 세션은 다음과 같습니다.
[~]$ #echo "yay
yep
yup"
bash: yep: command not found
> { }
이상해 보이는데요, 그렇죠? 하지만 그것이 바로 우리가 요청한 것입니다. readline이 댓글을 달았습니다.철사그리고 그것을 파서에게 전달합니다. echo "yay
주석 처리되고 쉘이 실행을 시도하며 뛰어난 참조가 있기 때문에 yep
이를 알 수 있습니다 . 종료하려면 입력하세요 .PS2
yup"
"Return
그래서 우리는 다음과 같이 결론을 내릴 수 있습니다.readline은 여러 줄 명령의 줄을 구분하지 않습니다.위에서 입력했습니다. readline이 구별되지 않으면 그 위의 Vi 모드도 구별되지 않습니다.
여러 줄을 개별적으로 편집해야 하는 경우 @BartonChittenden의 답변(+1)을 따르고 편집기를 입력하세요. 편집기는 행 사이를 탐색할 수 있도록 행을 여러 엔터티로 분리합니다.
답변4
이 순서는 Shift ^
나에게 맞는 것 같습니다.