-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathinit.lua
172 lines (129 loc) · 5.29 KB
/
init.lua
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
-------------------------------------------------------------
-- vim general setting
-------------------------------------------------------------
vim.g.mapleader = " "
vim.g.maplocalleader = " "
vim.o.tags = "tags;/" -- recursively search
vim.wo.number = true -- 라인 번호 표시
vim.wo.relativenumber = true -- 상대적 라인 번호
-- mouse mode
vim.o.mouse = "r" -- termius를 사용 중이라서 mouse 활성화는 없는 편이 편하다.
vim.o.foldmethod = "manual"
vim.o.autochdir = true
vim.o.breakindent = true -- 줄바꿈 시 들여쓰기 유지
vim.o.ignorecase = true -- 검색 시 대소문자 구분 안함
vim.o.smartcase = true -- 대문자 포함 시 대소문자 구분
vim.wo.signcolumn = "yes" -- 사인 컬럼 항상 표시
-- Sync clipboard between OS and Neovim.
vim.o.clipboard = "unnamedplus"
vim.o.showmode = false
-- Improve default search behavior
vim.o.incsearch = true
-- Save undo history
vim.o.undofile = true
-- Set completeopt to have a better completion experience
vim.o.completeopt = "menuone,noselect"
-- set termguicolors to enable highlight groups
vim.o.termguicolors = true
-- swp은 있어야 작업 충돌을 막을 수 있다.
vim.opt.swapfile = true
-- Set terminal tab title to `filename (cwd)`
vim.opt.title = true
-- 일반 모드에서 블록 커서 설정
vim.cmd([[let &t_EI = "\e[2 q"]])
-- 삽입 모드에서 선 커서 설정
vim.cmd([[let &t_SI = "\e[6 q"]])
-- `{, [, (`는 기본 매칭, `<:>`을 HTML 태그 매칭에 추가
vim.o.showmatch = true
vim.opt.matchpairs:append("<:>")
-- 자동 닫힘 괄호 추가
vim.api.nvim_set_keymap("i", "{", "{}<Left>", { noremap = true })
vim.api.nvim_set_keymap("i", "(", "()<Left>", { noremap = true })
vim.api.nvim_set_keymap("i", "[", "[]<Left>", { noremap = true })
vim.api.nvim_set_keymap("i", "\"", "\"\"<Left>", { noremap = true })
vim.api.nvim_set_keymap("i", "'", "''<Left>", { noremap = true })
-- 현재 줄 하이라이트
vim.o.cursorline = true
-- 긴 줄을 한 줄로 표시 (줄바꿈 없음)
vim.o.wrap = false
-- 텍스트 길이 제한 설정
vim.o.textwidth = 160
-- 탭 설정 (탭을 스페이스 2개로 변환)
vim.o.expandtab = true
vim.o.tabstop = 2
vim.o.softtabstop = 2
vim.o.shiftwidth = 2 -- `<` `>` 들여쓰기가 tabstop과 동일하게 동작하도록 설정
-------------------------------------------------------------
-- pkg mgr
-------------------------------------------------------------
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
if not vim.loop.fs_stat(lazypath) then
vim.fn.system({
"git",
"clone",
"--filter=blob:none",
"https://github.com/folke/lazy.nvim.git",
"--branch=stable", -- latest stable release
lazypath,
})
end
vim.opt.rtp:prepend(lazypath)
-- 플러그인 설정 로드. .config/nvim/lua/plugins 하단의 *.lua를 로딩한다.
require("lazy").setup("plugins", {})
-------------------------------------------------------------
-- .config/nvim/lua 하위의 keymap.lua, language-specific-macro.lua 를 로드
-------------------------------------------------------------
require "keymap"
require("language-specific-macro").setupMacro()
-------------------------------------------------------------
-- autocmd
-------------------------------------------------------------
-- 현재 윈도우 높이의 1/4만큼 scrolloff를 설정하여 커서가 윈도우 아래쪽 3/4 지점에 도달했을 때 스크롤하도록 합니다
vim.api.nvim_create_autocmd("VimEnter", {
pattern = "*",
callback = function()
vim.o.scrolloff = math.floor(vim.api.nvim_win_get_height(0) * 0.25)
end
})
-------------------------------------------------------------
-- -, #, $도 단어의 일부로 인식하도록 추가합니다
vim.api.nvim_create_autocmd("FileType", {
pattern = { "typescript", "javascript", "css", "html", "json", "yaml", "markdown" },
callback = function()
vim.opt.iskeyword:append { "-", "#", "$" }
end,
})
-------------------------------------------------------------
-- path
vim.opt.path = { ".", "**" }
local function detect_and_setup_project()
-- 현재 버퍼의 파일 확장자를 가져옵니다.
local ext = vim.fn.expand("%:e")
if ext == "c" or ext == "cpp" or ext == "h" or ext == "hpp" then
-- C/C++ 파일이면 시스템 헤더와 프로젝트 내부 include 디렉터리를 추가
vim.opt_local.path:append("/usr/include/**")
vim.opt_local.path:append("/usr/local/include/**")
if vim.fn.isdirectory("include") == 1 then
vim.opt_local.path:append("include/**")
end
if vim.fn.isdirectory("src/include") == 1 then
vim.opt_local.path:append("src/include/**")
end
vim.opt_local.suffixesadd:append({ ".h", ".c", ".hpp", ".cpp" })
elseif ext == "js" or ext == "jsx" or ext == "ts" or ext == "tsx" then
-- Node.js 관련 파일이면 src와 components 디렉터리를 추가
vim.opt_local.path:append("src/**")
vim.opt_local.path:append("components/**")
vim.opt_local.suffixesadd:append({ ".js", ".jsx", ".ts", ".tsx" })
elseif ext == "py" then
-- Python 파일이면 .py 확장자만 추가
vim.opt_local.suffixesadd:append(".py")
end
end
-- BufEnter, DirChanged 등 특정 이벤트에서 호출하도록 할 수 있음
vim.api.nvim_create_autocmd("BufReadPost", {
pattern = "*",
callback = function()
detect_and_setup_project()
end,
})