터미널에 존재하는 IDE입니다. GUI처럼 느껴지는 TUI(Text User Interface)를 제공합니다. 터미널에서 실행되는 VS Code, Zed, Sublime의 진정한 대안이 될 수 있습니다. 단일 Go 바이너리이며 설정이 필요 없습니다.
전체 문서는 docs-web/src/content/docs/에 있습니다.
(tttedit.dev에서 게시됨).
brew tap eugenioenko/ttt
brew trust eugenioenko/ttt
brew install ttt
curl -sSfL https://raw.githubusercontent.com/eugenioenko/ttt/main/install.sh | sh
이 스크립트는 사용자의 OS/아키텍처에 맞는 최신 릴리스 바이너리를 다운로드하여 /usr/local/bin에 설치합니다.
. 다른 위치에 설치하려면:
INSTALL_DIR=~/.local/bin curl -sSfL https://raw.githubusercontent.com/eugenioenko/ttt/main/install.sh | sh
@Dominiquini가 AUR 패키지를 유지 관리해 준 것에 감사드립니다.
yay -S ttt
참고: flake는 main을 추적합니다.
. 미래의 태그된 릴리스는 고정된 flake를 배포할 것이며, 그때까지는 main에서 설치하십시오.
설치 없이 사용해 보기:
nix run github:eugenioenko/ttt
flake.nix에 추가하기:
inputs:
{inputs.ttt.url = "github:eugenioenko/ttt";}
그리고 environment.systemPackages 또는 home-manager 패키지에 다음을 추가하십시오.
inputs.ttt.packages.${system}.default
@pirate-boop가 flake의 vendorHash를 동기화해 준 것에 감사드립니다.
Go 1.18 이상 필요:
go install github.com/eugenioenko/ttt/cmd/ttt@latest
이것은 ttt 바이너리를 $GOPATH/bin (또는 기본값인 $HOME/go/bin)에 설치합니다. 해당 디렉터리가 PATH에 포함되어 있는지 확인하십시오.
Linux, macOS, Windows용 사전 빌드된 바이너리는 Releases 페이지에서 다운로드할 수 있습니다. 사용자의 플랫폼에 맞는 것을 다운로드하여 실행 가능하게 만들고 PATH에 넣어주십시오.
참고: 소스에서 빌드하는 것은 최신 개발 코드를 컴파일하며, 이는 작업 중인 기능이 포함될 수 있고 공식 릴리스보다 안정성이 떨어질 수 있습니다.
git clone https://github.com/eugenioenko/ttt.git
cd ttt
make build
이것은 bin/ttt에 최적화된 바이너리를 생성합니다. 이를 PATH에 추가하거나 편리한 곳으로 복사하십시오:
cp bin/ttt ~/.local/bin/
TTT는 Herdr 플러그인으로 제공되므로, Herdr 터미널 작업 공간 내의 패널로 열 수 있습니다.
herdr plugin install eugenioenko/ttt/herdr-plugin
설치 후에는 키(예: Ctrl+b e)에 바인딩하여 단일 키 스트로크로 활성 워크트리에서 TTT를 실행할 수 있습니다. 설정 및 구성 세부 정보는 Herdr 플러그인 README를 참조하십시오.
Syntax highlighting: VS Code의 TextMate 엔진을 순수 Go 언어로 포팅한 textmate-go가 제공하며, 124개 언어를 지원하고 다중 라인 구문도 정확하게 처리합니다.
Bracket matching: 하이라이트된 쌍으로 중괄호 매칭 기능을 제공합니다.
Find and Replace: 일체형 검색 바(Ctrl+F)와 매치 탐색 기능, 교체 바(Ctrl+R)를 통해 하나씩 교체 및 전체 교체가 가능합니다.
Go to Line (Ctrl+G)
Selection, copy/cut/paste (Ctrl+C/X/V): 시스템 클립보드 지원이 됩니다.
Undo/redo (Ctrl+Z/Y): 커맨드 패턴 기반의 undo 스택을 통해 구현됩니다.
Code folding: 폴드를 토글(Ctrl+K [), 모든 폴드 접기/펼치기, 폴드 인식 검색 및 탐색 기능을 제공합니다.
Line operations: 라인 주석 토글, 라인 이동/복제/삭제, 라인 결합, 라인 정렬, 선택 영역을 라인으로 분할하는 기능이 있습니다.
Multi-cursor editing: 다음 발생 위치를 선택(Ctrl+D), 모든 발생 위치를 선택(Ctrl+K L), 커서 추가 시 Alt+클릭을 사용합니다. 타이핑, 백스페이스, 삭제, 엔터가 모든 위치에서 동시에 작동합니다.
.editorconfig 지원
indent detection: 파일별로 들여쓰기가 자동으로 감지되며, 상태 표시줄의 indent picker를 통해 수동으로 재정의할 수 있습니다.
Mouse support: 클릭하여 커서 위치 지정, 탭 클릭, 사이드바/패널 구분선 드래그, 마우스 오른쪽 버튼을 통한 컨텍스트 메뉴가 지원됩니다.
Auto-completion: LSP(Language Server Protocol) 기반의 자동 완성 기능으로, 실시간 필터링, 디바운스, 자동 임포트 지원이 가능합니다.
Signature help: (와 ,에서 매개변수 힌트를 자동으로 보여줍니다.
진단 기능(Diagnostics) — 인라인 중괄호 밑줄 스퀴글, 문제 패널, 호버 팝업 및 상태 표시줄 카운트
문서 형식 지정(Document formatting) — 문서 형식 지정, 선택 영역 형식 지정, 그리고 LSP 또는 외부 포맷터를 통한 저장 시 자동 형식 지정
Git blame — 상태 표시줄에 현재 줄에 대한 인라인 책임 정보 표시 (작성자, 상대 시간, 요약)
현재 라인 하이라이팅과 함께 라인 번호 제공
효율적인 터미널 업데이트를 위한 디프 기반 렌더러 (double-buffered cell grid)
단일 세션에서 여러 프로젝트 디렉토리를 열 수 있습니다. 각 루트는 탐색기, 검색 및 변경 사항 패널에서 접을 수 있는 그룹으로 나타납니다.
ttt # 현재 디렉토리 열기
ttt . # 현재 디렉토리도 열기
ttt /경로/디렉토리명 # 해당 디렉토리를 워크스페이스로 열기
...
워크스페이스 파일은 .ttt 확장자를 사용하며 폴더 목록을 상대 경로로 저장합니다:
{
"folders": [
{ "path": "." },
...
파일 메뉴에서 **'워크스페이스로 저장(Save Workspace As...)'**을 사용하여 워크스페이스 파일을 생성하고, 명령 팔레트에서 '워크스페이스에 폴더 추가(Add Folder to Workspace)' 및 **'워크스페이스에서 폴더 제거(Remove Folder from Workspace)'**를 수행합니다. 상태 표시줄의 git 브랜치는 활성 파일이 속한 워크스페이스 폴더에 따라 자동으로 전환됩니다.
파일 탐색기 & 워크스페이스를 참조하십시오.
사이드바의 멀티 루트 파일 트리 (Ctrl+K E). 여러 폴더가 열려 있을 때, 각 루트는 접을 수 있는 그룹으로 표시됩니다.
- 디렉토리가 파일보다 먼저 정렬되며, 둘 다 알파벳순입니다.
- Enter 또는 화살표 키로 확장/축소할 수 있습니다.
- 마우스 오른쪽 버튼 컨텍스트 메뉴:
새 파일(New File), 새 폴더(New Folder), 이름 변경(Rename), 삭제(Delete) - 사이드바 액션 버튼으로 새로고침(Refresh) 및 새 파일
**탐색기: 활성 파일 표시(Explorer: Reveal Active File)**는 트리를 활성 파일까지 확장하고 선택합니다. explorer.autoReveal을 설정하면 모든 탭 전환 시 이 기능을 수행할 수 있습니다.
파일 유형 아이콘은 테마에 따라 색상이 지정됩니다 (nvim-web-devicons의 글리프 매핑 사용). 터미널에 Nerd Font가 필요하므로 기본적으로 비활성화되어 있으며, "appearance": { "icons": "nerd-font" } 또는 **옵션 > 폰트 아이콘(Options > Font Icons)**을 통해 활성화할 수 있습니다.
사이드바 검색 패널 (Ctrl+K F)은 ripgrep으로 구동됩니다. 결과는 일치 횟수별로 파일에 따라 그룹화되어 표시됩니다.
Smart-case 매칭이 기본입니다. Include/Exclude glob 필터를 포함하려면 토글 화살표를 클릭하여 필터 입력(예: *.go, vendor/**)을 표시하세요. - 검색, 포함, 제외 입력 간에 Tab 키로 이동합니다. - 모든 작업 공간 폴더에서 동시에 검색합니다. - 결과를 클릭하면 해당 파일과 줄로 바로 이동합니다. Search를 참조하세요. 사이드바의 변경 사항 패널(Ctrl+K C)은 전체 스테이징 워크플로우를 제공합니다. 작업 트리의 파일 및 확장된 커밋 아래의 파일들은 간결한 디렉토리 Tree 또는 전체 경로 List(기본값)로 표시될 수 있습니다. 이 선택은 git.fileView에 유지됩니다. 파일 유형 아이콘은 상태 문자와 파일 이름 사이에 위치하며, Explorer처럼 공유되는 appearance.icons 설정을 따르며 Nerd Font가 필요하고 기본적으로 비활성화되어 있습니다. Options > Font Icons를 통해 토글할 수 있습니다. 변경 사항, 커밋 세부 정보 및 Explorer는 관련 메뉴에서 안전한 Expand All과 Collapse All 작업을 노출합니다. Staging: Spacebar — 선택된 파일의 스테이징/언스테이징을 전환합니다. 모든 언스테이징 파일은 a를 눌러 스테이징하고, 섹션 헤더에서는 +/- 버튼으로 해당 섹션의 모든 파일을 스테이징/언스테이징합니다. Committing: - 파일 목록 아래에 인라인 커밋 메시지 입력란이 있습니다(트리에서 Tab 키로 포커스). - 메시지를 입력하고 Enter를 누르면 모든 스테이징된 파일이 커밋됩니다. - 커밋 기록은 가장 최근의 10개 커밋으로 시작하며, **Load older commits…**를 활성화하여 동일한 HEAD 스냅샷의 제한된 페이지를 추가할 수 있습니다. 원격 작업: 사이드바 액션 버튼에서 Pull, Push, Sync(pull 후 push)를 수행합니다. 멀티 루트 워크스페이스에서는 그룹 헤더 메뉴 버튼을 통해 리포지토리별 작업을 할 수 있습니다. Diff 뷰:
- 변경된 파일을 선택하여 구문 강조가 적용된 분할 또는 통합 diff를 열 수 있습니다.
- **옵션(Options)**에서 전역 보기 모드, 컨텍스트, 줄 바꿈, 고대비 프레젠테이션을 설정할 수 있으며, Changes 패널 메뉴에서도 동일한 상황별 제어 기능을 제공합니다. Changes 전용 뷰는 접힌 컨텍스트 행을 보여주며, 이는 제자리에서 확장할 수 있습니다. 전체 파일 컨텍스트는 전역적으로 또는 diff 별로 사용할 수 있습니다.
- 추적되지 않은(untracked) 파일은 에디터에서 바로 열립니다.
다중 루트(Multi-root):
- 변경 사항은 저장소별로 그룹화되며, 각 저장소는 자체적인 접기/펼치기가 가능한 Staged/Changes 섹션과 커밋 입력란을 가집니다.
- 파일 상태 배지:
M(수정됨), A(추가됨), D(삭제됨), R(이름 변경됨), U(추적되지 않음)
GitHub pull request 리뷰:
ttt https://github.com/owner/repo/pull/123 # PR 리뷰
ttt . https://github.com/owner/repo/pull/123 # 리포지토리 트리를 열고 PR 리뷰
PR을 리뷰 표면으로 열어줍니다. 커밋별 히스토리 상세 정보, 현재 변경 사항의 실시간 보기, 그리고 로컬 diff와 동일한 통합 프레젠테이션 제어 기능을 제공합니다.
diff 및 코드 리뷰 경험을 기여해 준 @arimxyer에게 감사드립니다.
Git Integration을 참고하세요.
사이드바에 현재 파일의 심볼 트리(Symbol tree)가 있습니다. 탐색하고 정의로 이동할 수 있습니다. Go와 Markdown에 대한 내장 폴백(fallback) 기능을 사용하여 LSP 문서 심볼을 사용합니다. 명령어 팔레트에서 열 수 있습니다.
Outline 기능을 기여해 준 @tenox7에게 감사드립니다.
Ctrl+P— 사용 가능한 모든 명령어를 담은 명령어 팔레트를 엽니다.
Ctrl+K P— 빠른 파일 열기(워크스페이스 폴더 전체의 파일을 검색합니다).
- 빠른 열기 모드에서
>를 입력하여 명령어 모드로 전환하고, >를 삭제하여 다시 돌아옵니다.
?를 입력하여 패널, 탐색 및 키 바인딩에 대한 검색 가능한 도움말을 찾아봅니다. 메뉴 단축키는 사용자의 키 바인딩으로부터 동적으로 해결됩니다.
하단 패널(Ctrl+K B로 토글)에는 터미널(Terminal), 문제(Problems), 참조(References) 탭이 포함되어 있습니다.
진단(Diagnostics) 탭 — 파일별로 모든 LSP 진단(오류, 경고) 목록을 보여주며, 클릭하면 해당 위치로 이동합니다. 참조(References) 탭 — '모든 곳에서 찾기(Find All References)' 결과를 표시하며, 클릭하면 해당 위치로 이동합니다. 터미널(Terminal) 탭 — 통합 터미널 에뮬레이터입니다 (아래 참조).
내장된 터미널 에뮬레이터입니다. Ctrl+T를 눌러 터미널 패널을 토글하거나, Alt+T를 눌러 전체 화면으로 전환할 수 있습니다.
Ctrl+K T를 누르면 새 터미널 탭이 생성됩니다. 여러 개의 탭은 왼쪽 가장자리에 세로형 내부 탭 바가 있습니다 — eugenioenko/xterm-go (gitpod-io/xterm-go의 유지보수 포크)를 통해 전체 VT 이스케이프 시퀀스를 지원하며, aymanbagabas/go-pty를 통해 PTY 관리를 수행합니다.
- True color(24비트) 및 256색 렌더링 지원
- 터미널이 포커스되면 강제 키(Ctrl+T, Alt+T, Ctrl+Q, Ctrl+P, Ctrl+K P, Ctrl+B, F6)를 제외한 모든 키가 PTY로 전송됩니다.
- 터미널 셸 및 스크롤백은
settings.json에서 설정할 수 있습니다.
; ANSI 색상은 theme.json의 terminal 필드를 통해 테마별로 구성할 수 있습니다.
통합 터미널(Integrated Terminal)을 참조하세요.
TTT는 언어 인식 편집을 위한 내장 LSP 지원 기능을 갖추고 있습니다: 자동 완성, 시그니처 도움말, 정의/구현/타입 정의로 이동, 참조 찾기, 심볼 이름 변경, 호버, 문서/선택 영역 포맷팅, 저장 시 포맷팅(format-on-save), 그리고 진단 기능 등이 포함됩니다.
언어 서버는 플러그인을 통해 구성합니다 — 사용하려는 언어에 대한 LSP 플러그인과 해당 서버 바이너리를 Plugins 패널 또는 명령 팔레트에서 설치하세요. 사용 가능한 플러그인은 다음과 같습니다:
lsp-go, lsp-typescript, lsp-python, lsp-c, lsp-rust, lsp-lua, lsp-zig, lsp-vue, lsp-svelte, lsp-css, lsp-html, lsp-json, lsp-yaml, lsp-bash, lsp-docker, lsp-tailwindcss, lsp-kotlin, lsp-java, lsp-ruby, lsp-dart, lsp-elixir, lsp-php, lsp-terraform, lsp-markdown, lsp-haskell
또한, ~/.config/ttt/settings.json에서 사용자 정의 서버를 수동으로 추가할 수도 있습니다. LSP 기능을 완전히 비활성화하려면: `
failed. 클릭하여 OUTPUT 패널을 열 수 있으며, 각 서버는 lsp:<server> 아래에 시작 명령과 stderr를 기록합니다.
LSP 가이드와 LSP 기능 참조 문서를 참고하여 키 바인딩, 구성 및 기능별 세부 정보를 확인하세요.
탭은 VS Code와 유사한 '핀-재클릭(pin-on-reclick)' 모델을 따릅니다:
- 탐색기 또는 검색에서 파일을 열면 현재 고정되지 않은 탭이 대체됩니다. - 이미 열려 있는 탭을 클릭하거나 같은 파일을 다시 열면 해당 탭이 핀 처리됩니다. Ctrl+W를 눌러 탭을 닫고, Alt+./**Alt+,**로 탭 간 전환합니다. - 탭에서 마우스 오른쪽 버튼을 클릭하면 닫기(Close), 다른 것 닫기(Close Others), 모두 닫기(Close All) 옵션이 나타납니다. - 탭을 드래그하여 순서를 재배열할 수 있습니다.
TTT는 JSON 파일을 통해 완전히 사용자 정의 가능한 테마를 지원합니다. 모든 색상은 테마화가 가능합니다. 구문 강조, diff 배경, 사이드바, 탭, 상태 표시줄, 터미널 ANSI 색상, 경계선 및 의미론적 색상(성공, 위험, 경고) 등이 포함됩니다.
바이너리(internal/config/themes/)에는 10개의 테마가 기본 제공됩니다: Aurora, Bubblegum, Default Dark, Default Light, Hotline, Monokai, One Dark, Solarized Dark, Solarized Light, Virtru Dark. 저장소에서 다운로드할 수 있는 추가 78개 테마도 있습니다.
보기(View) > 테마 전환(Switch Theme) (또는 명령 팔레트)을 통해 실시간 미리보가 가능합니다. 사용자 정의 테마를 만들려면 기본 제공 파일을 ~/.config/ttt/themes/로 복사하고 settings.json에서 `