vi 편집 유틸리티의 프롬프트 라인을 사용하는 방법은 무엇입니까? [폐쇄]

vi 편집 유틸리티의 프롬프트 라인을 사용하는 방법은 무엇입니까? [폐쇄]

read -eSQL 쿼리와 유사한 쿼리에 대한 힌트를 제공 하는 유틸리티를 bash에 작성했습니다 . 때로는 이 내용이 꽤 길기 때문에 vi를 열고 현재 줄을 편집하고 종료할 때 해당 줄을 vim의 내용으로 바꿀 수 있기를 원합니다. 나는 읽기 라인을 사용합니다 read. 그것은 다음과 같습니다:

query> select .... from .... very long... <ctrl-e> 

이제 vi에서

select .... from .... very long...

다음과 같이 편집됨

select ...
from ....
very long ...

6번 출구

query> select ...
from ....
very long ... <enter>

쿼리가 실행됩니다.

업데이트: "read -e" 전에 "set -o vi"를 사용하는 것이 나에게는 좋은 방법인 것 같지만 현재 <esc>v열린 버퍼를 클릭하면 해당 줄의 내용은 포함되지 않지만 내 기록의 내용은 포함되지 않습니다. 기타 쿼리(이전에 입력한 쿼리는 아님)

답변1

먼저, vi를 쉘 명령줄 편집기로 사용하고 있는지 확인해야 합니다.

set -o vi

이제 명령줄에 명령을 입력/복사할 수 있습니다. 삽입 모드를 종료하고 일반 모드로 들어가려면 Esc또는 Shift+ 를 사용하십시오 Tab. 이제 vi열기를 누를 수 있습니다 v.

에서는 vi이제 원하는 모든 변경 작업을 수행하고 버퍼를 저장하고 종료 vi하면 명령이 실행됩니다.

답변2

CtrlBash에서는 + x, Ctrl+를 사용하여 현재 명령줄의 편집기를 호출 할 수 있습니다 e.

제가 가지고 있는 시스템에서는 이 기능이 man readline자체 문서가 아니라 man bash"readline" 섹션에 있으므로 이것이 bash 전용 기능인지, 아니면 다른 readline 기반 프로그램에서 지원하는지 확실하지 않습니다.

bash에 대한 문서는 다음과 같습니다.

edit-and-execute-command( C-xC-e)

현재 명령줄에서 편집기를 호출하고 결과를 셸 명령으로 실행합니다. Bash는 $VISUAL, $EDITOR및 편집기를 순서대로 호출하려고 시도합니다 .emacs

답변3

프롬프트가 쉘 프롬프트인 한 read다른 모든 답변은 유효하고 유용합니다 (예:

그렇지 않은 경우(완전히 명확하지 않은 경우), 예를 들어 SQL 인터프리터를 사용할 때 특수(구성 가능한) 키를 사용하여 선택한 편집기(예: 입력에 지정된)를 호출 xxxsql할 수 있습니다 . 커서를 유지하는 데 유용합니다 . 호출 시 위치 )rlwrap --multi-line -a xxxsqlexport RLWRAP_EDITOR="vim '+call cursor(%L,%C)"call_cursorvim

추가 보너스로 여러 줄 명령의 경우에도 완전한 명령 기록을 갖게 됩니다(이러한 명령 기록은 기록 목록에 넣기 전에 한 줄 명령으로 "압축"되지만 재사용할 때 다시 확장됩니다).

편집: 더 많은 정보를 찾을 수 있습니다 rlwraps Github 페이지. 모든 용도처럼GNU 라인 읽기 라이브러리그 행동의 대부분은지정됨 사용자에는 위에서 언급한 외부 편집기 호출용 특수 키를 제어하는 ​​여러 가지 자체 옵션이 $INPUTRC 추가되었습니다 (기본값은 + ).rlwrapCTRL^

관련 정보