read -e
SQL 쿼리와 유사한 쿼리에 대한 힌트를 제공 하는 유틸리티를 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 xxxsql
export RLWRAP_EDITOR="vim '+call cursor(%L,%C)"
call_cursor
vim
추가 보너스로 여러 줄 명령의 경우에도 완전한 명령 기록을 갖게 됩니다(이러한 명령 기록은 기록 목록에 넣기 전에 한 줄 명령으로 "압축"되지만 재사용할 때 다시 확장됩니다).
편집: 더 많은 정보를 찾을 수 있습니다 rlwraps Github 페이지. 모든 용도처럼GNU 라인 읽기 라이브러리그 행동의 대부분은지정됨 사용자에는 위에서 언급한 외부 편집기 호출용 특수 키를 제어하는 여러 가지 자체 옵션이 $INPUTRC
추가되었습니다 (기본값은 + ).rlwrap
CTRL^