- 원격 서버 개발용 편집기로 Helix를 선택한 이유는 Vim/Neovim처럼 수십 개의 플러그인 설치 없이도 사용 가능하며, 공급망 공격 위험을 줄일 수 있기 때문
-
tmux 연동 설정을 통해 Helix에서 부족한 파일 탐색기와 Git TUI 기능을 보완하고,
yazi파일 관리자,lazygit등을 팝업으로 실행할 수 있게 구성 -
Vim 스타일 키바인딩을 이식하여 줄 선택, 커서 이동, 텍스트 삭제 등의 작업을 Vim과 유사하게 동작하도록 설정하고,
ESC로 멀티 커서를 초기화하도록 변경 - 상태 표시줄(statusline) 에 Git 브랜치, 인코딩, 포지션 등의 정보를 추가해 생산성을 높임
- Tree-sitter 인젝션을 활용해 Python/Go 내부의 SQL 쿼리, Markdown의 코드 블록 등을 문법 강조 처리하여 가독성 개선
- LSP, 자동 저장, 색상 모드 등 고급 설정을 활용해 작업 생산성 높이고 세밀하게 커스터마이즈
Helix 선택 배경
- 최근의 공급망 공격 증가와 플러그인 의존성 문제로 인해 Vim/Neovim 대신 Helix를 원격 서버 개발용 편집기로 채택
- Neovim의 수십 개 플러그인 없이도 기본 기능만으로 사용 가능한 점이 주요 장점
- Helix로 전환 이후, 익숙한 Neovim 경험을 최대한 재현하기 위해 설정 커스터마이징 작업을 진행하였음
- 이를 공유하여 다른 사용자의 시간 절약을 목표로 함
Tmux 설정
- 터미널 멀티플렉서로 Tmux를 사용하며, 파일 관리자와 Git TUI 부재를 해결하기 위해 커스텀 키바인딩 추가
- Helix는 파일 탐색기에서 파일 편집을 지원하지 않아, 여러 파일을 빠르게 이동할 때 불편함이 있었음
- Tmux 설정 파일에 다음 바인딩 추가
-
prefix - y: Yazi 파일 관리자를 팝업 창으로 실행 (화면의 95% 크기) -
prefix - g: Lazygit을 팝업 창으로 실행 -
prefix - e: Tmux 출력 히스토리를 Helix 편집기로 열어 검색 및 복사 작업 수행
-
- 기본 prefix는
Ctrl + b이지만,Ctrl + \로 변경하여 사용 중 - 터미널 출력 작업에 유용하며, 특히 ClickHouse 클라이언트 출력(CSV/JSON)을 Slack으로 복사할 때 활용
- 파일로 출력하는 대신 직접 복사가 가능하여 작업 단계 절감
- 마우스로도 가능하지만 Tmux 버퍼 스크롤이 불편하여 편집기로 처리하는 것이 효율적
- Yazi와 Lazygit은 보통 Helix 편집기 위에 오버레이로 표시됨
Vim 키바인딩 이식
- Helix 키바인딩에 익숙해졌지만, 여전히 일부 Vim 바인딩을 이식하여 사용 중
- Select 모드 바인딩
-
0: 줄 시작으로 이동 -
$: 줄 끝으로 이동 -
^: 첫 번째 공백이 아닌 문자로 이동 -
G: 파일 끝으로 이동 -
D: 줄 끝까지 선택 후 삭제하고 노멀 모드로 전환 -
k/j: 위/아래 줄 전체 선택 (Helix 기본 동작은 부분 선택이라 불편함)
-
- Normal 모드 바인딩
-
D: 커서 오른쪽 텍스트 전체 삭제 (Helix는 키 입력이 너무 많아 이식) -
V: Select 모드로 전환 후 줄 전체 선택 -
ESC: 다중 커서 리셋 (Helix 기본값은 쉼표인데 불편함)
-
- Helix의 비주얼 모드 줄 선택 방식이 마음에 들지 않아 Vim 스타일로 변경
- 위/아래로 이동 시 전체 줄이 선택되도록 설정
개선된 상태바
- 기본 상태바에 현재 Git 브랜치 같은 중요 정보가 부족함
- 상태바 설정 구성
- 왼쪽: 모드, 스피너, 버전 관리, 파일명, 읽기 전용 표시, 수정 표시
- 중앙: 비어 있음
- 오른쪽: 진단, 작업 공간 진단, 위치, 전체 줄 수, 위치 백분율, 파일 인코딩, 줄 끝 형식, 파일 타입, 레지스터, 선택 수
- 구분자:
│문자 사용
- 작업 상황을 한눈에 파악 가능
유용한 키바인딩
- 커스텀 키바인딩으로 작업 효율성 대폭 향상, 발견하는 데 시간이 걸렸음
- 가장 유용한 기능: 파일 리로드, 소프트 랩 토글, Git undo, Git blame, Git diff
- 전체 커스텀 바인딩 목록
-
space - e - w: 현재 버퍼를 파일로 저장 -
space - e - c: 현재 버퍼 닫기 -
space - e - x: 다른 버퍼 모두 닫기 (수십 개 버퍼 열려 있을 때 유용) -
space - e - l: 인레이 타입 힌트 토글 (유용하지만 항상 표시하면 노이즈가 많음) -
+ - f: 현재 파일 포맷 -
+ - w: 공백 문자 렌더링 (문서 내 보이지 않는 문자 확인용) -
+ - W: 공백 문자 렌더링 비활성화 -
space - f - .: 파일 피커에서 Git 무시 파일 표시/숨김 -
space - f - r: 모든 파일 리로드 (Helix가 자동 리로드를 지원하지 않아 매우 유용, 외부 변경이나 커밋 후 gutter 업데이트용) -
space - f - x: 현재 커서의 Git 변경 사항 undo -
space - f - w: 현재 줄의 Git blame 표시 -
space - f - d: Git diff 표시
-
편집기 설정
- 6개월 사용 후 터미널 탭 전환 시 자동 저장 기능이 있다는 것을 발견
- Helix의 일부 최신 기능은 기본적으로 비활성화되어 있어, 기존 사용자가 예상치 못한 변경을 겪지 않도록 배려
- 각 옵션을 직접 확인해야 새로운 기능 발견 가능
- 주요 설정 옵션
-
line-number = "relative": 상대 줄 번호 표시 -
rulers = [120]: 시각적 수직 눈금자 설정 (자동 포맷 없이 최대 줄 길이 제한 시 유용) -
true-color = true: 트루 컬러 강제 지원 -
completion-replace = true: 자동 완성이 단어 전체를 대체 -
trim-trailing-whitespace = true: 후행 공백 제거 -
color-modes = true: 모드 표시를 색상으로 구분 -
rainbow-brackets = true: 중첩 괄호에 다른 색상 사용 (최신 기능, 아직 정식 릴리스 전) -
editor.file-picker.hidden = false: 파일 피커에 숨김 파일(dot files) 표시 -
editor.indent-guides.render = true: 시각적 들여쓰기 가이드 추가 -
editor.inline-diagnostics.cursor-line = "warning": 진단 표시 개선 (스크린샷 참조) -
editor.auto-save.focus-lost = true: 포커스 잃을 때 자동 저장 (터미널 지원 필요) -
editor.auto-save.after-delay.enable = true: 지정된 지연 시간 후 자동 저장 (300초로 설정)
-
LSP 조정
- 모든 언어에 대해 harper-ls LSP를 추가하여 주석 내 문법 오류 강조 표시
커스텀 Tree-sitter 인젝션
- Helix는 커스텀 Tree-sitter 인젝션 지정을 허용하여, 한 언어 안에서 다른 언어를 강조 표시 가능
- 사용 사례
- Python과 Go 내부의 SQL 쿼리 문법 강조
- Markdown의 YAML front matter와 코드 블록 강조
- HTML 스니펫 강조에도 활용 가능
- GitHub에 설정 파일 업로드하여 커스텀 인젝션과 설정 공유
- Helix는 플러그인 최소화, 보안성, 직관적 커스터마이징이라는 장점이 두드러진 차세대 터미널 에디터임