readline에 vi 키 바인딩을 사용하면 줄의 시작 부분으로 이동하는 방법은 무엇입니까?

readline에 vi 키 바인딩을 사용하면 줄의 시작 부분으로 이동하는 방법은 무엇입니까?

여러 줄 명령에는 다음과 같은 차이점이 있습니다.

  • 줄 시작
  • 명령 시작

vim 키 바인딩 사용set -o vi FOR READLINE(예: bash, psql 등), 명령의 시작 부분 대신 줄의 시작 부분으로 이동하는 방법.

VIM에는 그런 문제가 없습니다. 이는 readline 애플리케이션의 vi 키 바인딩에 있습니다..

이것을 복사하세요...모두(아래 여러 줄의 인용문)

여러 줄 명령에는 다음과 같은 차이점이 있습니다.

  • 줄 시작
  • 명령 시작

vim 키 바인딩을 사용하면 set -o vi명령 시작 부분 대신 줄 시작 부분으로 어떻게 이동할 수 있나요?

이제 다음 지침을 따르세요..

  1. 유형echo "
  2. 위의 내용을 붙여넣으세요.
  3. "명령을 완료하려면 을 입력 하고 키를 누르세요 Enter.

이제 위쪽 화살표를 눌러 명령 버퍼에 넣습니다.

  1. 이제 줄의 시작과 끝으로 어떻게 이동합니까?명령이 아니다?
  2. 여러 줄 명령에서 한 줄 위로 이동하는 방법,다른 명령을 실행하지 마십시오?

답변1

이것이 효과가 있는지 잘 모르겠습니다.정확히당신이 원하는 것은 무엇입니까? 하지만 이것이 아마도 당신이 얻을 수 있는 가장 가까운 것일 것입니다.

escv

$EDITOR현재 명령은 선택한 편집기(예: Debian에 설정된 편집기 /etc/alternatives)에서 열립니다. 아마도 이것을 vi 또는 vim으로 설정하고 , 등을 사용하여 jk사이 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"

다음 사항에 유의하세요.

  1. PS2( >내 컴퓨터에서는) 직접 입력할 때처럼 인쇄되지 않습니다.
  2. 명령 내의 줄이 아닌 이전 명령을 계속 누르 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이를 알 수 있습니다 . 종료하려면 입력하세요 .PS2yup""Return

그래서 우리는 다음과 같이 결론을 내릴 수 있습니다.readline은 여러 줄 명령의 줄을 구분하지 않습니다.위에서 입력했습니다. readline이 구별되지 않으면 그 위의 Vi 모드도 구별되지 않습니다.

여러 줄을 개별적으로 편집해야 하는 경우 @BartonChittenden의 답변(+1)을 따르고 편집기를 입력하세요. 편집기는 행 사이를 탐색할 수 있도록 행을 여러 엔터티로 분리합니다.

답변4

이 순서는 Shift ^나에게 맞는 것 같습니다.

관련 정보