CLI 편집

CLI 편집 (Editing)

DuckDB CLI는 linenoise 기반의 줄 편집(line-editing) 라이브러리를 사용해요. 단축키는 readline의 Emacs 모드를 기반으로 해요. CLI를 더 빠르게 다루고 싶다면 아래 단축키를 익혀 볼까요?

출처: 문서

본문

linenoise 기반 CLI 편집기는 macOS, Linux, Windows에서 사용할 수 있어요.

DuckDB의 CLI는 linenoise 기반의 줄 편집 라이브러리를 사용하며, 단축키는 readline의 Emacs 모드를 기반으로 해요. 아래는 사용 가능한 명령 목록이에요. CLI 안에서 .help shortcuts를 입력해도 이 단축키들을 볼 수 있어요.

이동 (Moving)

동작
Left 한 글자 뒤로 이동
Right 한 글자 앞으로 이동
Up 위 줄로 이동. 첫 줄에 있을 때 이전 히스토리 항목으로 이동
Down 아래 줄로 이동. 마지막 줄에 있을 때 다음 히스토리 항목으로 이동
Home 버퍼의 시작으로 이동
End 버퍼의 끝으로 이동
Ctrl+Left 한 단어 뒤로 이동
Ctrl+Right 한 단어 앞으로 이동
Ctrl+A 버퍼의 시작으로 이동
Ctrl+B 한 글자 뒤로 이동
Ctrl+E 버퍼의 끝으로 이동
Ctrl+F 한 글자 앞으로 이동
Alt+Left 한 단어 뒤로 이동
Alt+Right 한 단어 앞으로 이동

히스토리 (History)

동작
Ctrl+P 이전 히스토리 항목으로 이동
Ctrl+N 다음 히스토리 항목으로 이동
Ctrl+R 히스토리 검색
Ctrl+S 히스토리 검색
Alt+< 첫 히스토리 항목으로 이동
Alt+> 마지막 히스토리 항목으로 이동
Alt+N 히스토리 검색
Alt+P 히스토리 검색

텍스트 변경 (Changing Text)

동작
Backspace 이전 글자 삭제
Delete 다음 글자 삭제
Ctrl+D 다음 글자 삭제. 버퍼가 비어 있으면 편집 종료
Ctrl+H 이전 글자 삭제
Ctrl+K 커서 이후의 모든 내용 삭제
Ctrl+T 현재 글자와 다음 글자 바꾸기
Ctrl+U 모든 텍스트 삭제
Ctrl+W 이전 단어 삭제
Alt+C 다음 단어를 titlecase로 변환
Alt+D 다음 단어 삭제
Alt+L 다음 단어를 소문자로 변환
Alt+R 모든 텍스트 삭제
Alt+T 현재 단어와 다음 단어 바꾸기
Alt+U 다음 단어를 대문자로 변환
Alt+Backspace 이전 단어 삭제
Alt+\ 커서 주변의 공백 삭제

자동 완성 (Completing)

동작
Tab 자동 완성. 자동 완성 중에는 다음 항목으로 순환
Shift+Tab 자동 완성 중에는 이전 항목으로 순환
Esc+Esc 자동 완성 중에는 자동 완성 되돌리기

기타 (Miscellaneous)

동작
Enter 쿼리 실행. 쿼리가 완전하지 않으면 버퍼 끝에 개행 삽입
Ctrl+J 쿼리 실행. 쿼리가 완전하지 않으면 버퍼 끝에 개행 삽입
Ctrl+C 현재 쿼리 편집 취소
Ctrl+G 현재 쿼리 편집 취소
Ctrl+L 화면 지우기
Ctrl+O 현재 쿼리 편집 취소
Ctrl+X 커서 뒤에 개행 삽입
Ctrl+Q, then click 마우스 클릭 위치로 커서 이동
Ctrl+Z CLI를 중단하고 셸로 복귀, fg로 다시 열기

외부 편집기 모드 (External Editor Mode)

.edit 또는 \e를 사용하면 외부 텍스트 편집기에서 쿼리를 열 수 있어요.

  • 단독으로 입력하면 이전 명령을 편집용으로 열어요.
  • 멀티라인 명령 안에서 쓰면 현재 명령을 편집기에서 열어요.

편집기는 DUCKDB_EDITOR, EDITOR, VISUAL 중 첫 번째로 설정된 환경 변수에서 가져와요(그 순서대로). 아무것도 설정되지 않으면 vi를 사용해요.

Read-Line 사용하기

선호한다면 rlwrap을 사용해 셸에서 직접 read-line을 쓸 수 있어요. 그런 다음 Shift+Enter로 개행을 넣고 Enter로 쿼리를 실행하면 돼요:

rlwrap --substitute-prompt="D " duckdb -batch

더 알아보기 (Learn more)

  • linenoise — CLI가 사용하는 줄 편집 라이브러리.
  • rlwrap — read-line 래퍼 유틸리티.