N-S-02 Neovim 터미널 환경 구축 (Alacritty, Tmux)

글 정보
카테고리
Programming/Neovim
태그
NeovimAlacrittyTmux

1. Alacritty (가장 빠른 터미널)

1.1. 이론: 왜 Alacritty인가?

Alacritty는 Rust 언어로 작성된 크로스 플랫폼 터미널 에뮬레이터입니다. 개발자들 사이에서 '가장 빠른 터미널'로 통하는 데에는 명확한 이유가 있습니다.

1.1.1. Neovim 사용자가 선호하는 이유

Alacritty는 특히 키보드 중심의 개발 환경(Neovim)과 궁합이 좋습니다.

1.1.2. 결론

  1. 안정성 (Stability): Rust 언어 특유의 메모리 안전성으로 크래시가 거의 없음
  2. 이식성 (Portability): 설정 파일 하나(alacritty.toml)로 모든 OS에서 동일 환경 구축
  3. 퍼포먼스 (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 관리 방식을 도입하여, 여러 기기에서 설정을 동기화하기 쉽게 구성하겠습니다.

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을 현대적으로 리팩토링한 프로젝트입니다.

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)' 전환이 핵심입니다. 처음엔 어색하지만 익숙해지면 생각하는 속도로 편집할 수 있습니다.

3. 심볼릭 링크 및 실행
# 링크 연결
[test@MacBookAir] ~/.dotfiles (main) ⚡
❯ ln -s ~/.dotfiles/.config/nvim ~/.config/nvim

# 실행
❯ nvim

실행 후 Space + f + f를 눌러 파일 검색창이 뜬다면 성공입니다!


3. Tmux (터미널 멀티플렉서)

3.1. 이론: 왜 Tmux인가?

Tmux는 "터미널을 여러 개로 쪼개서 관리해 주는 도구"입니다.

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

[확인 포인트]

  1. 상단에 깔끔한 Status Bar가 생겼나요?

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

3.2.3. Tmux 필수 단축키 (Cheat Sheet)

Tmux의 모든 명령은 Prefix Key(Ctrl + Space)를 먼저 누른 뒤 입력해야 합니다.

3.2.5. (심화) 세션(Session) 마스터하기

개발자는 보통 한 번에 여러 프로젝트를 진행합니다.

A 프로젝트를 하다가 B 프로젝트 긴급 수정 요청이 들어왔을 때, Tmux 세션이 빛을 발합니다.

# 'backend'라는 이름으로 세션 생성
tmux new -s backend
tmux ls
# 출력 예시:
# backend: 2 windows (created Wed Jan  2 10:00:00 2026)
# frontend: 1 windows (created Wed Jan  2 11:30:00 2026)
# 'backend' 세션으로 복귀
tmux a -t backend
# 'backend' 세션 강제 종료
tmux kill-session -t backend
Tip: 이상적인 작업 흐름 (Workflow)

1. 출근해서 tmux new -s work로 세션 생성
2. 퇴근할 때는 Prefix + d를 눌러 세션 분리(Detach) (서버엔 그대로 살아있음)
3. 다음 날 tmux a -t work로 어제 작업하던 화면 그대로 복구(Attach)

4. 마치며

이제 여러분의 터미널 환경은 이렇게 동작합니다.

  1. Alacritty로 쾌적하고 빠른 창을 엽니다.
  2. Tmux로 세션을 생성하고 화면을 입맛대로 쪼갭니다.
  3. Neovim으로 코드를 작성하며, 마우스 없이 모든 창을 넘나듭니다.

이 세 가지 도구의 조합은 초기 설정이 조금 번거로울 수 있지만, 한 번 익숙해지면 다시는 이전으로 돌아갈 수 없는 압도적인 생산성을 제공할 것입니다.