사용자 매뉴얼

명령어 자동 완성

명령어 자동 완성은 일반 터미널 세션에서 입력하는 동안 셸 자체의 자동 완성 정의에서 가져온 후보 목록을 표시합니다. 명령은 터미널의 일반 입력 줄에 그대로 남아 있으며, 후보를 선택하면 텍스트만 삽입되고 명령은 실행되지 않습니다. 이 기능은 AI 모델을 사용하지 않습니다.

자동 완성은 macOS와 Linux에서 사용할 수 있습니다. Windows에서는 현재 이 기능이 꺼져 있습니다(아래 Windows 섹션 참조).

설정과 조작

설정 ▸ 터미널 ▸ "명령어 자동 완성"에는 세 가지 모드가 있습니다.

  • 자동 표시(기본값): VelaTerm은 약 25ms 동안 입력을 모은 다음 셸에 후보를 요청합니다. 그 사이에 계속 입력해도 대기 시간은 다시 시작되지 않습니다. 요청이 처리되는 동안 계속 입력하면 다음 요청에는 가장 최근의 입력만 사용되며, 오래된 결과는 버려집니다. 입력과 정확히 일치하는 후보도 목록에 남습니다.
  • Tab으로 표시: Tab을 누를 때만 후보가 표시됩니다.
  • 끄기: 후보 목록을 표시하지 않으며, Tab은 셸 고유의 동작을 그대로 따릅니다.

설정을 변경하면 열려 있는 터미널에 즉시 적용되며, 같은 VelaTerm 백엔드에 연결된 모든 클라이언트가 같은 설정을 사용합니다.

키와 마우스 조작은 다음과 같습니다.

  • 위쪽 및 아래쪽 화살표 키로 후보를 선택하고, Page Up과 Page Down으로 긴 목록을 넘깁니다.
  • Tab을 누르거나 마우스로 클릭하면 선택한 후보가 삽입됩니다.
  • Enter는 항상 셸로 전달되어, 후보를 적용하지 않고 입력한 그대로 현재 명령을 실행합니다.
  • Esc를 누르면 목록이 닫힙니다.
  • Ctrl+Space를 누르면 후보를 직접 요청합니다.
  • 선택 위치를 더 이상 옮길 수 없으면 위쪽 및 아래쪽 화살표 키가 셸로 전달됩니다. 따라서 첫 번째 후보에서 위쪽 화살표 키를 누르면 기록에서 이전 명령을 불러옵니다.

후보는 정확히 일치하는 항목, 접두사가 일치하는 항목, 부분 문자열이 일치하는 항목, 셸이 제공한 그 밖의 항목 순으로 정렬됩니다. 정확히 일치하는 항목과 접두사가 일치하는 항목 안에서는 대소문자까지 일치하는 항목이 먼저 옵니다. 각 그룹 안에서는 짧은 후보가 먼저 오며, 길이가 같으면 알파벳순으로 정렬됩니다.

목록은 각 후보에서 입력한 내용과 일치하는 부분을 강조 표시하고, 셸이 설명을 제공하면 그 설명도 표시합니다. 긴 설명은 후보 위에 마우스 포인터를 올려 읽을 수 있습니다. 결과가 갱신되는 동안에도 목록의 위치와 선택은 유지됩니다. 후보를 적용하면 목록이 닫히며, 후보가 /로 끝나는 디렉터리인 경우에도 마찬가지입니다. 다음 디렉터리 단계를 보려면 Tab을 다시 누릅니다. 자동 표시 모드에서는 계속 입력하면 목록이 다시 열립니다.

삽입이 처리되기 전에 입력을 변경하면, VelaTerm은 셸에서 새 결과를 받을 때까지 기다렸다가 해당 후보가 여전히 제공되는 경우에만 삽입합니다.

지원하는 셸

셸자동 완성
Zsh셸 고유의 자동 완성 위젯과 compadd를 사용하며, 기존 자동 완성 정의가 그대로 적용됩니다.
Bash 4 이상등록된 자동 완성 함수와 사양을 사용하며, 등록된 것이 없으면 명령 이름과 파일 이름을 제안합니다.
Fish셸 고유의 complete -C 후보와 설명을 사용합니다.
PSReadLine을 사용하는 PowerShell(pwsh)PowerShell 고유의 CommandCompletion.CompleteInput을 사용합니다.
Bash 3.2 및 기타 셸셸 고유의 Tab 동작만 사용할 수 있으며, 후보 목록은 표시되지 않습니다.

macOS에 기본으로 포함된 Bash는 3.2 버전입니다. macOS에서 Bash로 자동 완성을 사용하려면 Homebrew 등으로 설치한 최신 Bash를 로그인 셸로 설정합니다.

자동 완성은 일반 터미널 세션에서만 사용할 수 있습니다. 에이전트 세션에는 영향을 주지 않습니다.

셸 통합을 불러오는 방식

VelaTerm은 터미널이 시작될 때 셸 통합을 불러옵니다. 셸 시작 파일은 수정하지 않으며, 사용자 지정 시작 명령은 셸 통합을 불러온 뒤에 그대로 실행됩니다. 이 기능이 포함된 버전을 설치하기 전부터 실행 중이던 터미널은 다시 시작해야 합니다.

  • Zsh는 사용자의 로그인 파일을 읽은 뒤 임시 시작 파일을 통해 셸 통합을 불러오고, 그다음 ZDOTDIR을 원래대로 되돌립니다. 터미널에 아무것도 입력하지 않습니다.
  • Bash는 임시 --rcfile로 시작합니다. 이 파일은 먼저 Bash의 일반적인 순서대로 로그인 파일(/etc/profile, 그다음 ~/.bash_profile, ~/.bash_login, ~/.profile 중 처음 발견된 파일)을 읽은 뒤 셸 통합을 불러옵니다. 터미널에 아무것도 입력하지 않습니다. 다만 일반 로그인 셸과 비교하면 두 가지 차이가 남습니다. shopt -q login_shell은 false를 반환하고, 셸이 종료될 때 ~/.bash_logout이 실행되지 않습니다.
  • Fish와 PowerShell에는 이에 상응하는 시작 훅이 없으므로, VelaTerm은 셸이 시작될 때 셸 통합을 불러오는 명령 한 줄을 보냅니다. 이 줄은 새 터미널의 맨 위에 표시됩니다.

셸 통합 스크립트에도 PowerShell 실행 정책이 그대로 적용되며, VelaTerm은 이 정책을 우회하지 않습니다.

명령이 실행 중일 때, 전체 화면 프로그램이 열려 있을 때, 입력기(IME)로 글자를 조합하는 동안, 기록을 탐색하는 동안(Ctrl+R, Ctrl+S, 화살표 키)에는 자동 완성이 일시 중지됩니다. 화살표 키는 자동 요청을 시작하지 않으므로, 위쪽 화살표 키를 반복해서 누르면 이전 명령을 계속 거슬러 올라갑니다. 셸 통합이 활성화되지 않았거나 후보를 찾지 못하면 Tab은 셸 고유의 동작을 따릅니다.

터미널 안에서 SSH나 다른 중첩 셸을 시작해도 해당 환경에는 셸 통합이 설치되지 않습니다.

Windows

Windows에서는 설정과 관계없이 셸 통합을 불러오지 않으며, "명령어 자동 완성" 설정도 표시되지 않습니다. cmd, Windows PowerShell, pwsh, Git Bash, WSL 터미널은 셸 고유의 Tab 동작을 그대로 사용합니다. Windows에서 이 기능을 불러오려면 새 터미널마다 명령을 입력해야 하고 요청할 때마다 보조 프로세스가 시작되어 입력이 느려지므로, 이 기능은 꺼 둔 상태로 유지됩니다.

제한 사항

  • 후보는 셸에 설치된 자동 완성 정의에 따라 달라집니다. VelaTerm은 자체 명령 목록이나 기록 기반 예측을 제공하지 않습니다.
  • 일부 복잡한 Bash 자동 완성 스크립트는 Readline의 내부 동작에 의존하며, 셸 통합은 이를 정확히 재현할 수 없습니다.
  • 자동 완성 함수는 외부 프로그램을 실행할 수 있어 느려질 수 있습니다. 목록은 2초가 지나면 더 이상 기다리지 않지만, 아직 실행 중인 셸 함수를 종료하지는 않습니다. 평소처럼 Ctrl+C를 눌러 중단합니다.
  • 셸 통합은 후보 수집에 Ctrl+F12를, 선택한 후보 삽입에 Ctrl+F11을 사용합니다. 터미널이 시작된 뒤 셸 설정에서 이 키에 다른 동작을 할당하면 자동 완성이 동작하지 않을 수 있습니다. Bash 4.0에서 4.3 사이의 버전에서는 셸 통합이 Enter와 Ctrl+J의 키 바인딩도 감쌉니다.
  • 설명은 셸이 제공합니다. Bash 자동 완성 정의 중에는 설명을 제공하지 않는 것이 많으며, 이 경우 후보에 설명이 표시되지 않습니다.

테스트 환경

이 기능은 macOS의 Zsh 및 Bash 5.2, Linux의 Bash, Zsh, Fish, PowerShell 7.4에서 테스트했습니다.