rkttu
1
- tmux와 SSH, nvim, 강력한 검색·자동화 스크립트를 결합하여, 원격 서버의 파일을 GUI 없이도 즉시 탐색·수정·검색하는 독특한 워크플로우를 구현
- 키 조합 하나로 tmux 복수 창에서 파일명 자동 검색 및 바로 열기, 파일 전환, 버퍼 관리까지 모두 단축키로 처리함
- VSCode의 느린 속도와 키 바인드 충돌에 불만을 느껴 직접 스크립트로 모든 조작을 통합함
- regex, perl, tmux, nvim 등 유닉스 도구들을 조합해 파일 경로·라인 정보 자동 인식 및 열기를 실현함
- 직접 구현 과정이 매우 복잡하지만, 터미널의 강력함과 확장성을 극대화할 수 있음을 보여줌
나만의 터미널 사용법
- 이 글은 터미널과 도구를 결합해 효율적인 개발 환경을 구축한 경험을 공유함
- 일반적으로 동영상이 필요한 복잡한 과정이기 때문에 텍스트와 함께 실동영상을 연동함(영상 감상 필수)
- 영상의 일부 단계는(0:11, 0:21, 0:41)은 많은 사람들이 "이게 가능하냐?"고 놀라는 부분임
영상 속 터미널 워크플로우 단계별 요약
- 0:00 : Windows Terminal을 노트북에서 실행
- 0:02 : ctrl + shift + 5 단축키로 새 터미널 탭을 열고,
ssh
로 집에 있는 데스크탑에 접속, 바로 tmux 실행
- 0:03 : tmux에서 기본 쉘 zsh 실행, 프롬프트 표시 및 전체 설정을 비동기로 로드
- 0:08 :
zoxide
로 최근 디렉토리 fuzzy 검색 후 이동
- 0:09 : ripgrep 명령어 입력 시작, zsh가 이전 사용 이력 기반으로 자동완성, ctrl + f로 수락
- 0:11 :
ctrl + kf
단축키로 tmux 스크롤백 전체에서 파일명 검색, 파일명이 파란색으로 하이라이팅
- 0:12 :
n
키를 계속 눌러 검색된 파일 리스트 중 원하는 파일을 탐색
- 0:21 :
o
키로 선택한 파일을 기본 앱(nvim)에서 열기, tmux가 새 창에서 실행(여전히 원격 서버에서 작동)
- 0:26 : rust-analyzer로 코드 내 여러 레퍼런스를 이동 시도, 일부 매크로는 인식 실패, 0:32에 정상적으로 이동 성공
- 0:38 :
ctrl + kh
로 tmux 포커스를 왼쪽 창으로 전환
- 0:39 :
n
키를 다시 눌러 “copy-mode” 상태에서 이전 파일 검색 결과를 계속 탐색
- 0:41 :
o
키로 이번엔 다른 파일을 기존 nvim 인스턴스에 열기
- 0:43 :
b
키로 열려 있는 파일 버퍼 목록 확인, 두 파일을 번갈아 전환하며 마무리
왜 이렇게 터미널 워크플로우를 쓰게 됐는가?
- VSCode가 느리고, 특히 vim 플러그인 사용 시 매우 버벅거림
- 에디터, vim 플러그인, 터미널, 윈도우 관리 기능 간에 키 바인드 충돌이 자주 발생해 불편함
- Zed 에디터도 시도해봤으나, 당시엔 아직 미성숙했고 키 바인드 충돌 문제도 여전했음
- nvim(Neovim)을 터미널에서 직접 사용하기 시작했지만,
- ripgrep 등으로 검색한 파일명을 일일이 복사해서 에디터에 붙여넣는 과정이 너무 번거로움
- 특히 ripgrep 결과에서 파일명과 라인 번호가 함께 나오면,
- 붙여넣을 때마다 구문 오류 발생
- 실제로 파일을 열기 전에 불필요하게 편집하는 일이 많아짐
- VSCode의 ctrl-click처럼 파일 경로를 바로 열 수 있는 워크플로우가 필요하다고 느낌
- 그래서 tmux를 활용해 원하는 기능을 직접 구현하게 됨
- 사람들이 왜 tmux를 쓰냐고 물으면, 바로 이 자동화와 세션 유지 때문이라고 설명
- 터미널은 생각보다 훨씬 강력하지만, 기본 기능만으로는 이러한 자동화가 드러나지 않음
- tmux는 비록 오래되고 문법이 복잡하며 버그도 있지만, 확장성과 커스터마이징 가능성 때문에 선택함
주요 구현 방법
tmux에서 전체 스크롤백 파일명 검색
- tmux copy-mode에서 복잡한 정규표현식으로 파일명 패턴 매칭
- 직접 제작한 regex 스크립트(
search-regex.sh
)로 파일 경로, 라인, 컬럼까지 하이라이팅
- 예시 tmux 설정:
bind-key f copy-mode \; send-keys -X search-backward '정규표현식'
선택 파일을 새 창/현재 창에서 열기
- tmux 단축키로 선택 파일을 디폴트 앱 또는 에디터(nvim 등)로 열도록 커스텀
- 상대경로 지원 및 tilde 확장 포함
bind-key -T copy-mode-vi o send-keys -X copy-pipe 'cd #{pane_current_path}; ...'
bind-key -T copy-mode-vi O send-keys -X copy-pipe-and-cancel 'tmux send-keys ...'
파일을 이미 열린 nvim 인스턴스에서 열기
- perl 스크립트로 tmux가 특정 nvim pane을 찾아, 해당 pane에 파일/라인 정보까지 직접 키 입력 전달
file:line:column
구문을 vim 명령으로 변환해 자동 오픈
이 방식의 장점과 한계
- 로컬 터미널의 기능 한계 극복: tmux를 통한 원격 서버의 자유로운 파일 탐색/수정/검색 구현
- 에디터가 원격 편집 프로토콜을 지원하지 않아도 동일 워크플로우 가능
- 모든 키 바인드·검색·파일 전환·버퍼 관리 등을 완전히 내 입맛에 맞게 통합
- VSCode 플러그인 제작보다 더 빠르고 쉽게 자동화 가능
- 직접 제작한 스크립트들은 깨지기 쉽고 유지보수 어렵기 때문에, 남에게 추천하긴 힘듦
대체 솔루션
- 대체로 추천하는 오픈소스/도구 조합:
fish + zoxide + fzf
: 퍼지 디렉토리, 명령 검색, 일부 파일 검색 워크플로우 대체 가능
- 에디터 내장 기능(탭, 윈도우, fuzzy finder 등)도 대부분의 사용자에게 충분함
qf
: 터미널 출력에서 파일 선택이 가능하지만, 상호작용적인 도구와는 연동 불가, vi-like CLI 사용
e
: file:line 경로를 인식하는 소도구(에디터 종류별로 별도 스크립트 필요)
vim --remote
, code filename
, emacsclient
등도 비슷한 효과, 단 file:line 인식은 불완전함
결론 및 교훈
- 터미널은 생각보다 훨씬 강력하며, 직접 스크립트로 조합하면 GUI 툴에서 불가능한 자동화 가능
- 단, 유지보수성, 스크립트 내재된 버그 등 실용적 한계 존재
- 터미널 워크플로우 자동화에 관심 있다면 커스텀 tmux/nvim/fzf 환경부터 단계적으로 구축하는 것이 현실적임
1개의 좋아요