N-S-02 Neovim 터미널 환경 구축 (Alacritty, Tmux)
글 정보
- 카테고리
- Programming/Neovim
- 태그
- NeovimAlacrittyTmux
1. Alacritty (가장 빠른 터미널)
1.1. 이론: 왜 Alacritty인가?
Alacritty는 Rust 언어로 작성된 크로스 플랫폼 터미널 에뮬레이터입니다. 개발자들 사이에서 '가장 빠른 터미널'로 통하는 데에는 명확한 이유가 있습니다.
- GPU 가속 렌더링
- CPU가 아닌 그래픽 카드(GPU)를 사용하여 화면을 그립니다.
- 텍스트가 쏟아지는 상황에서도 타의 추종을 불허하는 속도를 자랑합니다.
- 확고한 철학
- "가장 빠르고, 가장 가볍게."
- 성능을 저해하는 불필요한 기능은 과감히 배제했습니다.
1.1.1. Neovim 사용자가 선호하는 이유
Alacritty는 특히 키보드 중심의 개발 환경(Neovim)과 궁합이 좋습니다.
- 입력 지연(Latency)의 최소화
- 키를 누르는 즉시 화면에 글자가 박히는 듯한 반응 속도를 보여줍니다.
- 미세한 딜레이도 용납하지 않는 개발자에게 "손에 착 붙는 맛"을 선사합니다.
- 트루 컬러(True Color) 완벽 지원
- 복잡한 코드 하이라이팅 색감을 뭉개짐 없이 원본 그대로 표현합니다.
- 티어링(Tearing) 제로
- 대량의 로그 파일을 고속으로 스크롤할 때 화면이 밀리거나 깨지지 않습니다.
1.1.2. 결론
- 안정성 (Stability): Rust 언어 특유의 메모리 안전성으로 크래시가 거의 없음
- 이식성 (Portability): 설정 파일 하나(
alacritty.toml)로 모든 OS에서 동일 환경 구축 - 퍼포먼스 (Performance): 타이핑과 코드 리딩이라는 본질에 가장 충실한 경험
1.2. 실습: 설치 및 설정
1.2.1. 설치 (Apple Silicon Mac 기준)
설치 과정은 매우 간단합니다. Homebrew를 사용하여 터미널 본체와 아이콘이 포함된 폰트를 설치합니다.
# 1. Alacritty 설치
brew install --cask alacritty
# 2. Nerd Font 설치 (아이콘 깨짐 방지용)
brew install --cask font-jetbrains-mono-nerd-font
Note: 만약 "악성 코드가 없음을 확인할 수 없습니다"라는 경고창이 뜨며 실행되지 않는다면?
시스템 설정>개인정보 보호 및 보안>보안영역에서 '확인 없이 열기'를 클릭하여 해결할 수 있습니다.
[실행 확인] 아래와 같이 심플한 창이 뜬다면 설치 성공입니다. 
1.2.2. 설정 (Dotfiles와 심볼릭 링크)
설치의 핵심은 alacritty.toml 설정 파일을 다루는 것입니다.
여기서는 Dotfiles 관리 방식을 도입하여, 여러 기기에서 설정을 동기화하기 쉽게 구성하겠습니다.
- 심볼릭 링크(Symbolic Link)란?
- 윈도우의 '바로가기'와 유사하지만 훨씬 강력한 개념입니다.
- 원본 파일은
~/.dotfiles에 두고, 실제 설정 경로인~/.config에는 원본을 가리키는 '링크'만 둡니다. - 이렇게 하면 원본 파일 하나만 수정해도 모든 설정이 자동으로 반영됩니다.
1. 디렉터리 구조 생성
# 홈 디렉토리의 dotfiles 폴더 내에 설정 폴더 생성
[test@MacBookAir] ~/.dotfiles (main)
❯ mkdir -p .config/alacritty
# 설정 파일 생성
[test@MacBookAir] ~/.dotfiles (main)
❯ touch ./.config/alacritty/alacritty.toml
2. alacritty.toml 작성*생성한 파일을 열어 아래 내용을 붙여넣습니다. (가독성 중심의 옵션과 눈이 편안한 라이트 테마를 적용했습니다.)
# =========================================================
# Alacritty Config (Fixed)
# =========================================================
[general]
# 설정 파일 import (현재는 비어있음)
import = []
[window]
# 창 초기 크기 (가로 130, 세로 40)
dimensions = { columns = 130, lines = 40 }
# 창 내부 여백 (글자가 창 끝에 딱 붙지 않게 함)
padding = { x = 20, y = 20 }
# 투명도 및 블러 효과 (약간의 투명도)
opacity = 0.96
blur = true
# Option 키를 Alt 키로 인식 (왼쪽만) - 맥 특화 설정
option_as_alt = "OnlyLeft"
[font]
# 설치한 Nerd Font 지정
normal = { family = "JetBrainsMono Nerd Font", style = "Regular" }
bold = { family = "JetBrainsMono Nerd Font", style = "Bold" }
italic = { family = "JetBrainsMono Nerd Font", style = "Italic" }
size = 14.5
offset = { x = 0, y = 1 } # 폰트 렌더링 위치 미세 조정
[cursor]
style = { shape = "Block", blinking = "On" } # 커서는 블록 형태, 깜빡임 켬
unfocused_hollow = true # 창이 비활성일 때는 커서 속을 비움
# =========================================================
# Colors: Catppuccin Latte (Light Theme)
# =========================================================
[colors]
primary = { background = "#eff1f5", foreground = "#4c4f69" }
cursor = { text = "#eff1f5", cursor = "#dc8a78" }
vi_mode_cursor = { text = "#eff1f5", cursor = "#8839ef" }
[colors.normal]
black = "#5c5f77"
red = "#d20f39"
green = "#40a02b"
yellow = "#df8e1d"
blue = "#1e66f5"
magenta = "#8839ef"
cyan = "#209fb5"
white = "#acb0be"
[colors.bright]
black = "#6c6f85"
red = "#d20f39"
green = "#40a02b"
yellow = "#df8e1d"
blue = "#1e66f5"
magenta = "#8839ef"
cyan = "#209fb5"
white = "#bcc0cc"
3. 심볼릭 링크 연결 이제 우리가 만든 설정 파일을 실제 Alacritty가 읽는 경로로 연결합니다.
# ln -s [원본 경로] [타겟 경로]
[test@MacBookAir] ~/.dotfiles (main) ⚡
❯ ln -s ~/.dotfiles/.config/alacritty/alacritty.toml ~/.config/alacritty
4. 결과 확인
- 설정 전:

- 설정 후 (폰트, 여백, 테마 적용):

2. Neovim (현대적인 텍스트 에디터)
2.1. 이론: Neovim이란?
Neovim은 전설적인 에디터 Vim을 현대적으로 리팩토링한 프로젝트입니다.
- 강력한 확장성
Lua언어를 기반으로 한 플러그인 생태계를 가집니다.- VSCode 못지않은 IDE급 기능(자동완성, 에러 검출, 리팩토링)을 가볍게 구현합니다.
- 키보드 중심의 철학 (Vim Motion)
- 마우스 없이 코드를 편집하는 강력한 문법을 제공합니다.
d(삭제) +w(단어) = 단어 삭제c(변경) +$(줄 끝까지) = 현재 위치부터 끝까지 수정- 터미널 통합
- Tmux와 연동하여 코딩, 컴파일, 배포를 한 화면에서 물 흐르듯 처리할 수 있습니다.
2.2. 실습: 설치 및 설정
2.2.1. 설치
Neovim 본체와 플러그인 구동에 필요한 필수 도구들을 설치합니다.
# 1. Neovim 설치
brew install neovim
# 2. 필수 의존성 설치 (파일 검색 및 그렙 도구)
# ripgrep: 파일 내용 검색 / fd: 파일명 검색
brew install ripgrep fd
nvim 명령어로 실행했을 때 아래 화면이 나오면 설치 완료입니다. 
2.2.2. 설정 (Lazy.nvim 기반)
Neovim 설정은 Lua 언어를 사용하며, 모듈화된 구조를 권장합니다.
플러그인 매니저로는 요즘 가장 핫한 Lazy.nvim을 사용합니다.
1. 폴더 구조 생성
체계적인 관리를 위해 아래와 같이 폴더와 파일을 생성합니다.
nvim/
├── init.lua (설정의 진입점)
└── lua/
├── config/
│ ├── options.lua (기본 옵션: 줄번호, 들여쓰기 등)
│ └── lazy.lua (플러그인 매니저 설정)
└── plugins/
└── utils.lua (개별 플러그인 모음)
터미널에서 명령어로 빠르게 생성해 봅시다.
# 디렉토리 생성
mkdir -p ~/.dotfiles/.config/nvim/lua/config
mkdir -p ~/.dotfiles/.config/nvim/lua/plugins
# 파일 생성
touch ~/.dotfiles/.config/nvim/init.lua
touch ~/.dotfiles/.config/nvim/lua/config/options.lua
touch ~/.dotfiles/.config/nvim/lua/config/lazy.lua
touch ~/.dotfiles/.config/nvim/lua/plugins/utils.lua
2. 파일별 내용 작성
A. lua/config/options.lua (기본 설정)
-- [Leader Key] 스페이스바 (나만의 단축키 조합을 위한 키)
vim.g.mapleader = " "
vim.g.maplocalleader = "\\"
-- [UI Options]
vim.opt.number = true -- 줄 번호 표시
vim.opt.mouse = "a" -- 마우스 사용 허용
vim.opt.clipboard = "unnamedplus" -- 시스템 클립보드와 공유
vim.opt.termguicolors = true -- 트루컬러 지원
vim.opt.background = "light" -- 라이트 테마 명시
-- [Indentation] 들여쓰기 (2칸 설정)
vim.opt.tabstop = 2
vim.opt.shiftwidth = 2
vim.opt.expandtab = true
-- [StatusLine Override] 상태바 색상 강제 지정 (테마 적용 후 덮어쓰기)
vim.api.nvim_create_autocmd("ColorScheme", {
callback = function()
vim.api.nvim_set_hl(0, "StatusLine", { fg = "#4c4f69", bg = "#bcc0cc" })
vim.api.nvim_set_hl(0, "StatusLineNC", { fg = "#4c4f69", bg = "#eff1f5" })
end,
})
B. lua/plugins/utils.lua (플러그인 목록)
return {
-- 1. Telescope (강력한 파일 찾기 도구)
{
"nvim-telescope/telescope.nvim",
tag = "0.1.6",
dependencies = { "nvim-lua/plenary.nvim" },
keys = {
-- Leader(스페이스) + f + f 로 파일 찾기
{ "<leader>ff", "<cmd>Telescope find_files<cr>", desc = "Find Files" },
-- Leader + f + g 로 파일 내용 검색
{ "<leader>fg", "<cmd>Telescope live_grep<cr>", desc = "Live Grep" },
},
opts = {
defaults = { file_ignore_patterns = { ".git/", "node_modules" } },
},
},
-- 2. Tmux Navigator (Tmux 창과 Neovim 창을 매끄럽게 이동)
{
"christoomey/vim-tmux-navigator",
lazy = false,
keys = {
-- Ctrl + h/j/k/l 로 이동
{ "<c-h>", "<cmd><C-U>TmuxNavigateLeft<cr>", desc = "Window Left" },
{ "<c-j>", "<cmd><C-U>TmuxNavigateDown<cr>", desc = "Window Down" },
{ "<c-k>", "<cmd><C-U>TmuxNavigateUp<cr>", desc = "Window Up" },
{ "<c-l>", "<cmd><C-U>TmuxNavigateRight<cr>", desc = "Window Right" },
},
},
}
C. lua/config/lazy.lua (Lazy.nvim 부트스트랩)
플러그인 매니저가 설치되어 있지 않으면 자동으로 설치하는 코드입니다.
-- Lazy.nvim 자동 설치 코드
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
if not (vim.uv or vim.loop).fs_stat(lazypath) then
vim.fn.system({
"git", "clone", "--filter=blob:none",
"https://github.com/folke/lazy.nvim.git", "--branch=stable", lazypath,
})
end
vim.opt.rtp:prepend(lazypath)
-- 플러그인 로드 설정
require("lazy").setup({
spec = {
-- plugins 폴더 안의 모든 파일을 자동으로 불러옵니다.
{ import = "plugins" },
},
ui = { border = "rounded" }, -- UI 테두리 둥글게
})
D. init.lua (최종 진입점)
require("config.options") -- 1. 기본 옵션 로드
require("config.lazy") -- 2. 플러그인 매니저 로드
2.2.3. Neovim 필수 단축키 (Cheat Sheet)
Vim은 '모드(Mode)' 전환이 핵심입니다. 처음엔 어색하지만 익숙해지면 생각하는 속도로 편집할 수 있습니다.
- 모드 전환
- Normal Mode (기본):
Esc(모든 명령은 여기서 시작합니다) - Insert Mode (입력):
i(커서 위치에서 입력 시작) - Visual Mode (선택):
v(텍스트 드래그/선택) - 파일 조작 (Normal Mode에서)
- 저장:
:w(Write) - 종료:
:q(Quit) - 저장 후 종료:
:wq - 강제 종료:
:q!(변경사항 버리기) - 플러그인 단축키 (커스텀 설정)
- 파일 찾기:
+f+f(파일명 검색) - 내용 검색:
+f+g(전체 파일 내 텍스트 검색)
3. 심볼릭 링크 및 실행
# 링크 연결
[test@MacBookAir] ~/.dotfiles (main) ⚡
❯ ln -s ~/.dotfiles/.config/nvim ~/.config/nvim
# 실행
❯ nvim
실행 후 Space + f + f를 눌러 파일 검색창이 뜬다면 성공입니다! 
3. Tmux (터미널 멀티플렉서)
3.1. 이론: 왜 Tmux인가?
Tmux는 "터미널을 여러 개로 쪼개서 관리해 주는 도구"입니다.
- 세션 유지 (Persistence) - 가장 중요한 기능
- SSH 접속 중 와이파이가 끊겨도, Tmux 세션은 서버 백그라운드에서 살아있습니다.
- 다시 접속해서
attach만 하면 작업하던 화면이 그대로 복구됩니다. - 창 관리 (Window & Pane)
- Alacritty의 부족한 탭/분할 기능을 완벽하게 보완합니다.
- 하나의 창을 좌우/상하로 쪼개서(Pane) 에디터와 로그를 동시에 봅니다.
- Neovim과의 통합
- 마우스 없이
Ctrl+h/j/k/l만으로 에디터와 터미널 창을 자유롭게 넘나듭니다.
3.2. 실습: 설치 및 설정
3.2.1. 설치
brew install tmux
3.2.2. 설정 (tmux.conf)
Tmux 역시 깔끔한 라이트 테마와 Vim 친화적인 키 설정을 적용합니다.
가장 큰 변화는 불편한 Ctrl+b 키를 Ctrl+Space로 바꾸는 것입니다.
1. 설정 파일 생성
[test@MacBookAir] ~/.dotfiles (main)
❯ mkdir -p .config/tmux
❯ touch .config/tmux/tmux.conf
2. tmux.conf 작성
# ~/.dotfiles/.config/tmux/tmux.conf
# 1. Prefix 변경 (핵심!)
# 기존 C-b 해제하고 Ctrl+Space로 변경 (엄지+새끼손가락 타건)
unbind C-b
set -g prefix C-Space
bind C-Space send-prefix
# 2. 기본 설정
set -g default-terminal "xterm-256color"
set -ag terminal-overrides ",xterm-256color:RGB" # 트루컬러 지원
set -g mouse on # 마우스 사용 허용
set -g base-index 1 # 창 번호를 0번이 아닌 1번부터 시작
# 3. Smart Pane Switching (Neovim 통합 핵심 로직)
# 현재 활성 창이 Vim인지 확인
is_vim="ps -o state= -o comm= -t '#{pane_tty}' \
| grep -iqE '^[^TXZ ]+ +(\\S+\\/)?g?(view|n?vim?x?)(diff)?$'"
# Ctrl + h,j,k,l 로 Vim 창과 Tmux 창을 구분 없이 이동
bind-key -n 'C-h' if-shell "$is_vim" 'send-keys C-h' 'select-pane -L'
bind-key -n 'C-j' if-shell "$is_vim" 'send-keys C-j' 'select-pane -D'
bind-key -n 'C-k' if-shell "$is_vim" 'send-keys C-k' 'select-pane -U'
bind-key -n 'C-l' if-shell "$is_vim" 'send-keys C-l' 'select-pane -R'
# 4. 창 분할 키 직관적으로 변경
# | (좌우 분할), - (상하 분할)
bind | split-window -h -c "#{pane_current_path}"
bind - split-window -v -c "#{pane_current_path}"
# 5. UI 테마 (깔끔한 그레이 톤)
set-option -g status-position top
set-option -g status-style bg="#e6e9ef",fg="#4c4f69"
set-option -g status-left "#[bg=#5c5f77,fg=#eff1f5,bold] ❐ #S #[bg=default,fg=default] "
set-option -g status-right "#[fg=#5c5f77] %Y-%m-%d %H:%M "
3. 링크 연결 및 실행
# 링크 연결
ln -s ~/.dotfiles/.config/tmux ~/.config/tmux
# 실행
tmux
[확인 포인트]
- 상단에 깔끔한 Status Bar가 생겼나요?

Ctrl+Space누른 뒤|키를 눌러 화면이 좌우로 나뉘나요?

3.2.3. Tmux 필수 단축키 (Cheat Sheet)
Tmux의 모든 명령은 Prefix Key(Ctrl + Space)를 먼저 누른 뒤 입력해야 합니다.
- 기본 조작
- 명령 시작(Prefix):
Ctrl+Space(이걸 누르고 손을 뗀 뒤, 아래 키를 입력하세요) - 창(Pane) 쪼개기 (커스텀 설정)
- 좌우 분할:
|(Shift +\) - 상하 분할:
- - 창 닫기:
x(또는 터미널에서exit입력) - 전체 화면 확대/복구:
z(Zoom) - 이동 (Neovim 통합)
- 창 이동:
Ctrl+h/j/k/l - 특징: Prefix 키를 누를 필요 없이, Neovim과 Tmux 창 사이를 자유롭게 넘나듭니다.
- 세션 관리
- 세션 분리(Detach):
d(백그라운드로 보내고 나가기) - 세션 복구(Attach): 터미널에서
tmux a입력
3.2.5. (심화) 세션(Session) 마스터하기
개발자는 보통 한 번에 여러 프로젝트를 진행합니다.
A 프로젝트를 하다가 B 프로젝트 긴급 수정 요청이 들어왔을 때, Tmux 세션이 빛을 발합니다.
- 이름으로 세션 생성하기
- 그냥
tmux를 치면0,1같은 숫자로 세션이 만들어져 헷갈립니다. - 프로젝트 이름으로 세션을 만들면 관리가 훨씬 쉬워집니다.
# 'backend'라는 이름으로 세션 생성
tmux new -s backend
- 세션 목록 확인 (
ls) - 현재 백그라운드에서 돌아가고 있는 모든 세션을 확인합니다.
tmux ls
# 출력 예시:
# backend: 2 windows (created Wed Jan 2 10:00:00 2026)
# frontend: 1 windows (created Wed Jan 2 11:30:00 2026)
- 특정 세션으로 골라서 접속 (
attach) - 퇴근 후 다시 접속하거나, 다른 프로젝트로 넘어갈 때 사용합니다.
# 'backend' 세션으로 복귀
tmux a -t backend
- 세션 완전히 종료하기
- 작업이 완전히 끝났다면 세션을 메모리에서 삭제합니다.
- 해당 세션 안에서
exit을 계속 입력해 모든 창을 닫거나, 밖에서 아래 명령어를 씁니다.
# 'backend' 세션 강제 종료
tmux kill-session -t backend
Tip: 이상적인 작업 흐름 (Workflow)
1. 출근해서tmux new -s work로 세션 생성
2. 퇴근할 때는Prefix + d를 눌러 세션 분리(Detach) (서버엔 그대로 살아있음)
3. 다음 날tmux a -t work로 어제 작업하던 화면 그대로 복구(Attach)
4. 마치며
이제 여러분의 터미널 환경은 이렇게 동작합니다.
- Alacritty로 쾌적하고 빠른 창을 엽니다.
- Tmux로 세션을 생성하고 화면을 입맛대로 쪼갭니다.
- Neovim으로 코드를 작성하며, 마우스 없이 모든 창을 넘나듭니다.
이 세 가지 도구의 조합은 초기 설정이 조금 번거로울 수 있지만, 한 번 익숙해지면 다시는 이전으로 돌아갈 수 없는 압도적인 생산성을 제공할 것입니다.