Windows에서 Dotfiles의 Neovim 설정 연결하기
Windows에서 Dotfiles의 Neovim 설정 연결하기
문제 상황
Windows 환경에서 Scoop을 이용해 Neovim을 설치했고, 기존 dotfiles 저장소에 있는 Neovim 설정(nvim-lazy)을 PowerShell과 Neovim에서 동일하게 사용하고 싶었습니다.
환경
- OS: Windows 11
- Neovim 설치: Scoop으로 설치
- Dotfiles 구조:
1 2 3 4 5
C:\Users\planit\dotfiles\ ├── configs\ │ ├── nvim-lazy\ # LazyVim 기반 설정 │ └── nvim-classic\ # 클래식 Vim 설정 └── scripts\
Windows Neovim 설정 경로
Windows에서 Neovim은 다음 경로에서 설정을 찾습니다:
%LOCALAPPDATA%\nvim(일반적으로C:\Users\{사용자명}\AppData\Local\nvim)
Linux/macOS의 ~/.config/nvim과는 다른 경로를 사용합니다.
해결 방법
Dotfiles의 Neovim 설정을 Windows 설정 경로로 연결하여 하나의 설정을 공유합니다.
Junction vs Symbolic Link
Windows에서는 두 가지 방법으로 디렉토리를 연결할 수 있습니다:
- Symbolic Link: Unix 스타일의 심볼릭 링크
- 장점: Linux/macOS와 동일한 방식
- 단점: 관리자 권한 또는 개발자 모드 활성화 필요
- Junction: Windows의 디렉토리 연결 포인트
- 장점: 관리자 권한 불필요
- 단점: 디렉토리에만 사용 가능 (파일 불가)
이 가이드에서는 Junction을 사용합니다.
설정 단계
1. 기존 설정 백업 (있는 경우)
1
2
3
4
5
6
7
# 기존 nvim 설정이 있다면 백업
$NvimConfig = "$env:LOCALAPPDATA\nvim"
if (Test-Path $NvimConfig) {
$BackupPath = "$NvimConfig.backup.$(Get-Date -Format 'yyyyMMdd_HHmmss')"
Move-Item $NvimConfig $BackupPath
Write-Host "기존 설정을 $BackupPath 로 백업했습니다"
}
2. Junction 생성
1
2
3
4
5
6
# Dotfiles 경로 설정
$SourceConfig = "C:\Users\planit\dotfiles\configs\nvim-lazy"
$NvimConfigPath = "$env:LOCALAPPDATA\nvim"
# Junction 생성
cmd /c mklink /J "$NvimConfigPath" "$SourceConfig"
3. 연결 확인
1
2
3
4
5
# Junction 확인
Get-Item $env:LOCALAPPDATA\nvim | Select-Object FullName, LinkType, Target
# init.lua 파일 접근 가능 여부 확인
Test-Path $env:LOCALAPPDATA\nvim\init.lua
예상 출력:
1
2
3
4
5
FullName LinkType Target
-------- -------- ------
C:\Users\planit\AppData\Local\nvim Junction {C:\Users\planit\dotfiles\configs\nvim-lazy}
True
전체 스크립트
한 번에 실행할 수 있는 PowerShell 스크립트:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# Windows Neovim 설정 연결 스크립트
# Usage: 이 스크립트를 PowerShell에서 실행
$SourceConfig = "C:\Users\$env:USERNAME\dotfiles\configs\nvim-lazy"
$NvimConfigPath = Join-Path $env:LOCALAPPDATA "nvim"
Write-Host "Source: $SourceConfig" -ForegroundColor Cyan
Write-Host "Target: $NvimConfigPath" -ForegroundColor Cyan
Write-Host ""
# 소스 설정 존재 확인
if (-not (Test-Path $SourceConfig)) {
Write-Error "Neovim 설정을 찾을 수 없습니다: $SourceConfig"
exit 1
}
# 기존 설정 처리
if (Test-Path $NvimConfigPath) {
$Item = Get-Item $NvimConfigPath
# 이미 Junction이나 Symlink인 경우
if ($Item.LinkType -eq "Junction" -or $Item.LinkType -eq "SymbolicLink") {
Write-Host "기존 링크를 제거합니다..." -ForegroundColor Yellow
Remove-Item $NvimConfigPath -Force
}
# 일반 디렉토리인 경우 백업
else {
$BackupPath = "$NvimConfigPath.backup.$(Get-Date -Format 'yyyyMMdd_HHmmss')"
Write-Host "기존 설정을 백업합니다: $BackupPath" -ForegroundColor Yellow
Move-Item $NvimConfigPath $BackupPath -Force
}
}
# Junction 생성
Write-Host "Junction을 생성합니다..." -ForegroundColor Green
$result = cmd /c mklink /J "$NvimConfigPath" "$SourceConfig" 2>&1
if ($LASTEXITCODE -eq 0) {
Write-Host "성공적으로 Neovim 설정을 연결했습니다!" -ForegroundColor Green
Write-Host ""
# 연결 확인
Get-Item $NvimConfigPath | Select-Object FullName, LinkType, Target
} else {
Write-Error "Junction 생성 실패: $result"
exit 1
}
사용 방법
- 스크립트를
setup-nvim-windows.ps1파일로 저장 - PowerShell에서 실행:
1
.\setup-nvim-windows.ps1
- Neovim 실행:
1
nvim
처음 실행 시 Lazy.nvim이 자동으로 플러그인을 설치합니다.
주의사항
경로 수정: 스크립트의
$SourceConfig경로를 본인의 dotfiles 경로에 맞게 수정하세요.설정 변경: 향후 Neovim 설정을 변경할 때는
C:\Users\{사용자명}\dotfiles\configs\nvim-lazy\디렉토리의 파일을 수정하면 됩니다.Git 관리: Dotfiles를 Git으로 관리하면 Windows와 Linux/macOS 간 설정을 쉽게 동기화할 수 있습니다.
장점
- 하나의 Neovim 설정을 Windows, Linux, macOS에서 공유
- Dotfiles로 버전 관리 가능
- 설정 변경 시 한 곳만 수정하면 됨
- 관리자 권한 불필요 (Junction 사용)
문제 해결
Junction이 아닌 Symbolic Link를 사용하고 싶다면
개발자 모드를 활성화하거나 관리자 권한으로 PowerShell을 실행:
1
2
# 관리자 PowerShell에서 실행
New-Item -ItemType SymbolicLink -Path "$env:LOCALAPPDATA\nvim" -Target "C:\Users\$env:USERNAME\dotfiles\configs\nvim-lazy"
Junction 삭제 방법
1
2
# Junction 삭제 (설정 파일은 삭제되지 않음)
Remove-Item $env:LOCALAPPDATA\nvim
참고 자료
결론
Windows에서도 Unix 스타일의 dotfiles 관리가 가능하며, Junction을 활용하면 권한 문제 없이 설정을 깔끔하게 관리할 수 있습니다.
This post is licensed under CC BY 4.0 by the author.