configuring-neovim

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Neovim (LazyVim) 설정

Neovim (LazyVim) 配置

목적과 범위

目的与范围

LazyVim 기반 Neovim 구성에서 Nix 경계, 플러그인 경계, 입력기 관련 운영 포인트를 다룬다.
本文介绍基于LazyVim的Neovim配置中,Nix管理边界、插件管理边界、输入法相关的操作要点。

아키텍처

架构

Hybrid 방식: Nix가 바이너리/외부 도구 관리, lazy.nvim이 플러그인 관리.
  • Mason 비활성화: LSP/포매터/린터는
    extraPackages
    로 Nix가 설치
  • lazy.nvim: 런타임에 플러그인 다운로드 및 관리
  • mkOutOfStoreSymlink:
    ~/.config/nvim
    → repo의
    files/nvim/
    심볼릭 링크 (양방향 수정 가능)
混合模式:Nix负责管理二进制文件/外部工具,lazy.nvim负责管理插件。
  • 禁用Mason:LSP/格式化工具/代码检查器通过
    extraPackages
    由Nix安装
  • lazy.nvim:在运行时下载并管理插件
  • mkOutOfStoreSymlink
    ~/.config/nvim
    → 仓库中
    files/nvim/
    的符号链接(支持双向修改)

빠른 참조

快速参考

파일 구조

文件结构

modules/shared/programs/neovim/
├── default.nix                      # Nix 설정 (extraPackages, 심볼릭 링크)
└── files/nvim/                      # → ~/.config/nvim
    ├── init.lua                     # 진입점 (require("config.lazy"))
    ├── stylua.toml                  # Lua 포매터 (2-space indent)
    ├── lazy-lock.json               # 플러그인 버전 잠금 (자동 생성, 커밋 대상)
    ├── lazyvim.json                 # LazyVim extras 추적 (자동 관리)
    └── lua/
        ├── config/
        │   ├── lazy.lua             # lazy.nvim 부트스트랩 + extras 목록
        │   ├── options.lua          # Vim 옵션
        │   ├── keymaps.lua          # 커스텀 키맵 (jk→Esc)
        │   └── autocmds.lua         # 모바일 화면 감지, FocusGained 한글 IM 전환
        └── plugins/
            ├── disabled.lua         # Mason (mason-org/), mini.surround (nvim-mini/), tokyonight.nvim, indent-blankline.nvim, neo-tree.nvim 비활성화
            ├── colorscheme.lua      # Catppuccin Mocha
            ├── lsp.lua              # 추가 LSP (cssls, html)
            ├── treesitter.lua       # 파서 목록
            ├── editor.lua           # nvim-surround, auto-save, treesitter-context, flash.nvim, vim-abolish, snacks.nvim, im-select
            ├── lint.lua             # markdownlint-cli2 설정
            └── ui.lua               # bufferline, lualine, noice
modules/shared/programs/neovim/
├── default.nix                      # Nix配置(extraPackages、符号链接)
└── files/nvim/                      # → ~/.config/nvim
    ├── init.lua                     # 入口点(require("config.lazy"))
    ├── stylua.toml                  # Lua格式化工具(2空格缩进)
    ├── lazy-lock.json               # 插件版本锁定(自动生成,需提交)
    ├── lazyvim.json                 # 追踪LazyVim extras(自动管理)
    └── lua/
        ├── config/
        │   ├── lazy.lua             # lazy.nvim引导 + extras列表
        │   ├── options.lua          # Vim选项
        │   ├── keymaps.lua          # 自定义快捷键映射(jk→Esc)
        │   └── autocmds.lua         # 检测移动屏幕、获取焦点时切换韩文输入法
        └── plugins/
            ├── disabled.lua         # 禁用Mason(mason-org/)、mini.surround(nvim-mini/)、tokyonight.nvim、indent-blankline.nvim、neo-tree.nvim
            ├── colorscheme.lua      # Catppuccin Mocha
            ├── lsp.lua              # 额外LSP(cssls、html)
            ├── treesitter.lua       # 解析器列表
            ├── editor.lua           # nvim-surround、auto-save、treesitter-context、flash.nvim、vim-abolish、snacks.nvim、im-select
            ├── lint.lua             # markdownlint-cli2配置
            └── ui.lua               # bufferline、lualine、noice

extraPackages 요약

extraPackages摘要

Nix
extraPackages
로 관리하는 도구 카테고리:
  • LSP: lua-language-server, nil, vtsls, tailwindcss-language-server, yaml-language-server, vscode-langservers-extracted, markdown-oxide
  • 포매터: prettier, stylua, nixfmt
  • 린터: statix, markdownlint-cli2
  • 빌드: tree-sitter, gcc (Linux 전용), nodejs
ripgrep
,
fd
,
fzf
libraries/packages.nix
에서,
lazygit
은 Home Manager (
programs.lazygit.enable = true
)로 설치됨 — 중복 추가 금지
通过Nix
extraPackages
管理的工具类别:
  • LSP:lua-language-server、nil、vtsls、tailwindcss-language-server、yaml-language-server、vscode-langservers-extracted、markdown-oxide
  • 格式化工具:prettier、stylua、nixfmt
  • 代码检查器:statix、markdownlint-cli2
  • 构建工具:tree-sitter、gcc(仅Linux)、nodejs
ripgrep
fd
fzf
libraries/packages.nix
中安装,
lazygit
通过Home Manager(
programs.lazygit.enable = true
)安装 — 禁止重复添加

핵심 절차

核心步骤

  1. modules/shared/programs/neovim/default.nix
    에서 런타임 도구(
    extraPackages
    )를 선언한다.
  2. files/nvim/lua/plugins/*.lua
    에서 LazyVim 플러그인 동작을 조정한다.
  3. Mason 비활성화 원칙을 유지하고 LSP/formatter/linters는 Nix 패키지로 관리한다.
  4. 변경 후 Neovim을 재시작해 LSP attach, tree-sitter, im-select 동작을 확인한다.
  1. modules/shared/programs/neovim/default.nix
    中声明运行时工具(
    extraPackages
    )。
  2. files/nvim/lua/plugins/*.lua
    中调整LazyVim插件的行为。
  3. 坚持禁用Mason的原则,LSP、格式化工具、代码检查器均通过Nix包管理。
  4. 修改后重启Neovim,检查LSP附加、tree-sitter、im-select的运行情况。

제약사항

限制条件

  • programs.neovim
    plugins
    /
    initLua
    /
    extraConfig
    추가 금지 (심볼릭 링크 충돌)
  • DAP 디버깅 미지원 (Mason 비활성화로 js-debug-adapter 미설치)
  • default.nix
    함수 시그니처에
    nixosConfigPath
    명시 필수
  • extraPackages에 C 컴파일러(gcc 등) 추가 시 반드시
    lib.optionals pkgs.stdenv.isLinux
    사용
    — macOS에서 LLVM 소스 빌드 방지
  • marksman 사용 금지
    markdown-oxide
    사용. marksman은 dotnet→Swift 의존성 체인으로 macOS에서 Swift 소스 빌드 실패
  • 禁止向
    programs.neovim
    添加
    plugins
    /
    initLua
    /
    extraConfig
    (避免符号链接冲突)
  • 不支持DAP调试(因禁用Mason未安装js-debug-adapter)
  • default.nix
    函数签名中必须明确
    nixosConfigPath
  • 向extraPackages添加C编译器(如gcc)时,必须使用
    lib.optionals pkgs.stdenv.isLinux
    — 避免在macOS上构建LLVM源码
  • 禁止使用marksman → 使用
    markdown-oxide
    。marksman依赖dotnet→Swift的链式依赖,在macOS上会导致Swift源码构建失败

트러블슈팅

故障排除

빌드 지연, 한국어 입력, tree-sitter 오류는 references/troubleshooting.md를 우선 확인한다.
若遇到构建延迟、韩文输入法问题、tree-sitter错误,请优先查看references/troubleshooting.md

참조

参考资料

  • 패키지/extras 상세: references/packages.md
  • 키맵/치트시트:
    cheat nvim/{topic}
    명령으로 조회 — 소스:
    modules/shared/programs/cheat/cheatsheets/nvim/
  • 한국어 입력: references/korean-input.md
  • 기타 상세: references/details.md
  • 트러블슈팅: references/troubleshooting.md
  • 包/extras详情:references/packages.md
  • 快捷键映射/速查表:使用
    cheat nvim/{topic}
    命令查询 — 来源:
    modules/shared/programs/cheat/cheatsheets/nvim/
  • 韩文输入法:references/korean-input.md
  • 其他详情:references/details.md
  • 故障排除:references/troubleshooting.md