diff options
Diffstat (limited to 'vim')
-rw-r--r-- | vim/init/keymaps.vim | 126 | ||||
-rw-r--r-- | vim/mini.lua | 790 |
2 files changed, 463 insertions, 453 deletions
diff --git a/vim/init/keymaps.vim b/vim/init/keymaps.vim index 15bf356..81ce508 100644 --- a/vim/init/keymaps.vim +++ b/vim/init/keymaps.vim | |||
@@ -87,9 +87,9 @@ noremap <C-]> :call InCaseCdToLatestDir()<CR> | |||
87 | 87 | ||
88 | " Switch CWD to root git directory | 88 | " Switch CWD to root git directory |
89 | function! CdToGitRepo() | 89 | function! CdToGitRepo() |
90 | let l:git_dir = finddir('.git', escape(expand('%:p:h'), ' ') . ';') | 90 | let l:git_dir = finddir('.git', escape(expand('%:p:h'), ' ') . ';') |
91 | let l:repo = fnameescape(fnamemodify(l:git_dir, ':h')) | 91 | let l:repo = fnameescape(fnamemodify(l:git_dir, ':h')) |
92 | execute "cd" l:repo | 92 | execute "cd" l:repo |
93 | endfunction | 93 | endfunction |
94 | 94 | ||
95 | function! InCaseCdToLatestDir() | 95 | function! InCaseCdToLatestDir() |
@@ -256,29 +256,29 @@ function! CloseBufferSafely() | |||
256 | endif | 256 | endif |
257 | endfunction | 257 | endfunction |
258 | func! QuitWithCheck() | 258 | func! QuitWithCheck() |
259 | if g:quitVimWhenPressingCtrlC | 259 | if g:quitVimWhenPressingCtrlC |
260 | silent! quit | 260 | silent! quit |
261 | else | 261 | else |
262 | echo "Press <leader><leader>gl to allow quit with <C-c>" | 262 | echo "Press <leader><leader>gl to allow quit with <C-c>" |
263 | endif | 263 | endif |
264 | endfunc | 264 | endfunc |
265 | function! Bye() | 265 | function! Bye() |
266 | let windows = gettabinfo(tabpagenr())[0]['windows'] | 266 | let windows = gettabinfo(tabpagenr())[0]['windows'] |
267 | try | 267 | try |
268 | let bufs = gettabinfo(tabpagenr())[0]['variables']['bufs'] | 268 | let bufs = gettabinfo(tabpagenr())[0]['variables']['bufs'] |
269 | catch | 269 | catch |
270 | let bufs = getbufinfo({'buflisted': 1}) | 270 | let bufs = getbufinfo({'buflisted': 1}) |
271 | endtry | 271 | endtry |
272 | 272 | ||
273 | if len(windows) == 1 && len(bufs) == 1 | 273 | if len(windows) == 1 && len(bufs) == 1 |
274 | call QuitWithCheck() | 274 | call QuitWithCheck() |
275 | elseif &diff | 275 | elseif &diff |
276 | silent call CloseBuffersForDiff() | 276 | silent call CloseBuffersForDiff() |
277 | elseif len(windows) >1 | 277 | elseif len(windows) >1 |
278 | quit | 278 | quit |
279 | else | 279 | else |
280 | silent! call CloseBufferSafely() | 280 | silent! call CloseBufferSafely() |
281 | endif | 281 | endif |
282 | endfunction | 282 | endfunction |
283 | nnoremap <silent> <C-c> :call Bye()<CR> | 283 | nnoremap <silent> <C-c> :call Bye()<CR> |
284 | 284 | ||
@@ -291,29 +291,29 @@ function! CloseBuffersForDiff() | |||
291 | endfunction | 291 | endfunction |
292 | 292 | ||
293 | command! DiffOrig vert new | set buftype=nofile nobuflisted | read ++edit # | 0d_ | 293 | command! DiffOrig vert new | set buftype=nofile nobuflisted | read ++edit # | 0d_ |
294 | \ | diffthis | wincmd p | diffthis | 294 | \ | diffthis | wincmd p | diffthis |
295 | 295 | ||
296 | " Uset <C-w>d to toggle Diff mode | 296 | " Uset <C-w>d to toggle Diff mode |
297 | function! s:SwitchDiff() | 297 | function! s:SwitchDiff() |
298 | if &diff | 298 | if &diff |
299 | call CloseBuffersForDiff() | 299 | call CloseBuffersForDiff() |
300 | else | 300 | else |
301 | DiffOrig | 301 | DiffOrig |
302 | endif | 302 | endif |
303 | endfunction | 303 | endfunction |
304 | com! SwitchDiff call s:SwitchDiff() | 304 | com! SwitchDiff call s:SwitchDiff() |
305 | nnoremap <C-w>d <Cmd>silent! SwitchDiff<CR> | 305 | nnoremap <C-w>d <Cmd>silent! SwitchDiff<CR> |
306 | 306 | ||
307 | function! s:SwitchDiffForGitHEAD() | 307 | function! s:SwitchDiffForGitHEAD() |
308 | norm cdg | 308 | norm cdg |
309 | if &diff | 309 | if &diff |
310 | windo | if &buftype == "nofile" | bdelete | endif | 310 | windo | if &buftype == "nofile" | bdelete | endif |
311 | norm! zv | 311 | norm! zv |
312 | else | 312 | else |
313 | vert new | set buftype=nofile nobuflisted | 313 | vert new | set buftype=nofile nobuflisted |
314 | read !git show HEAD:# | 314 | read !git show HEAD:# |
315 | 0d_ | diffthis | wincmd p | diffthis | 315 | 0d_ | diffthis | wincmd p | diffthis |
316 | endif | 316 | endif |
317 | endfunction | 317 | endfunction |
318 | command! SwitchDiffForGitHEAD call s:SwitchDiffForGitHEAD() | 318 | command! SwitchDiffForGitHEAD call s:SwitchDiffForGitHEAD() |
319 | nnoremap <C-w>D <Cmd>silent! SwitchDiffForGitHEAD<CR> | 319 | nnoremap <C-w>D <Cmd>silent! SwitchDiffForGitHEAD<CR> |
@@ -339,22 +339,22 @@ inoremap <m-J> <esc><c-w>j | |||
339 | inoremap <m-K> <esc><c-w>k | 339 | inoremap <m-K> <esc><c-w>k |
340 | 340 | ||
341 | if has('terminal') && exists(':terminal') == 2 && has('patch-8.1.1') | 341 | if has('terminal') && exists(':terminal') == 2 && has('patch-8.1.1') |
342 | " vim 8.1 支持 termwinkey ,不需要把 terminal 切换成 normal 模式 | 342 | " vim 8.1 支持 termwinkey ,不需要把 terminal 切换成 normal 模式 |
343 | " 设置 termwinkey 为 CTRL 加减号(GVIM),有些终端下是 CTRL+? | 343 | " 设置 termwinkey 为 CTRL 加减号(GVIM),有些终端下是 CTRL+? |
344 | " 后面四个键位是搭配 termwinkey 的,如果 termwinkey 更改,也要改 | 344 | " 后面四个键位是搭配 termwinkey 的,如果 termwinkey 更改,也要改 |
345 | set termwinkey=<c-_> | 345 | set termwinkey=<c-_> |
346 | tnoremap <m-H> <c-_>h | 346 | tnoremap <m-H> <c-_>h |
347 | tnoremap <m-L> <c-_>l | 347 | tnoremap <m-L> <c-_>l |
348 | tnoremap <m-J> <c-_>j | 348 | tnoremap <m-J> <c-_>j |
349 | tnoremap <m-K> <c-_>k | 349 | tnoremap <m-K> <c-_>k |
350 | tnoremap <m-q> <c-\><c-n> | 350 | tnoremap <m-q> <c-\><c-n> |
351 | elseif has('nvim') | 351 | elseif has('nvim') |
352 | " neovim 没有 termwinkey 支持,必须把 terminal 切换回 normal 模式 | 352 | " neovim 没有 termwinkey 支持,必须把 terminal 切换回 normal 模式 |
353 | tnoremap <m-H> <c-\><c-n><c-w>h | 353 | tnoremap <m-H> <c-\><c-n><c-w>h |
354 | tnoremap <m-L> <c-\><c-n><c-w>l | 354 | tnoremap <m-L> <c-\><c-n><c-w>l |
355 | tnoremap <m-J> <c-\><c-n><c-w>j | 355 | tnoremap <m-J> <c-\><c-n><c-w>j |
356 | tnoremap <m-K> <c-\><c-n><c-w>k | 356 | tnoremap <m-K> <c-\><c-n><c-w>k |
357 | tnoremap <m-q> <c-\><c-n> | 357 | tnoremap <m-q> <c-\><c-n> |
358 | endif | 358 | endif |
359 | " }}} | 359 | " }}} |
360 | " MANAGE_TABS ----------------{{{ | 360 | " MANAGE_TABS ----------------{{{ |
@@ -379,16 +379,16 @@ map <leader>te :tabedit <C-r>=expand("%:p:h")<CR> | |||
379 | 379 | ||
380 | " Tab move functions | 380 | " Tab move functions |
381 | function! Tvab_MoveLeft() | 381 | function! Tvab_MoveLeft() |
382 | let l:tabnr = tabpagenr() - 2 | 382 | let l:tabnr = tabpagenr() - 2 |
383 | if l:tabnr >= 0 | 383 | if l:tabnr >= 0 |
384 | exec 'tabmove '.l:tabnr | 384 | exec 'tabmove '.l:tabnr |
385 | endif | 385 | endif |
386 | endfunc | 386 | endfunc |
387 | function! Tab_MoveRight() | 387 | function! Tab_MoveRight() |
388 | let l:tabnr = tabpagenr() + 1 | 388 | let l:tabnr = tabpagenr() + 1 |
389 | if l:tabnr <= tabpagenr('$') | 389 | if l:tabnr <= tabpagenr('$') |
390 | exec 'tabmove '.l:tabnr | 390 | exec 'tabmove '.l:tabnr |
391 | endif | 391 | endif |
392 | endfunc | 392 | endfunc |
393 | " }}} | 393 | " }}} |
394 | " FOLD ----------------{{{ | 394 | " FOLD ----------------{{{ |
@@ -516,7 +516,7 @@ function! AddSpaceForSelection() | |||
516 | '< norm! O | 516 | '< norm! O |
517 | '> norm! o | 517 | '> norm! o |
518 | exe "norm! "..(line("'<")-1).."GV"..(line("'>")+1).."G" | 518 | exe "norm! "..(line("'<")-1).."GV"..(line("'>")+1).."G" |
519 | " Otherwise, add space at start and end column | 519 | " Otherwise, add space at start and end column |
520 | else | 520 | else |
521 | call cursor('.', col("'<")) | 521 | call cursor('.', col("'<")) |
522 | execute "norm! i\<space>" | 522 | execute "norm! i\<space>" |
diff --git a/vim/mini.lua b/vim/mini.lua index 9f9c803..7b44fc0 100644 --- a/vim/mini.lua +++ b/vim/mini.lua | |||
@@ -1,10 +1,395 @@ | |||
1 | -- vim: sw=2 foldmethod=marker foldmarker={{{,}}} | 1 | -- vim: sw=2 foldmethod=marker foldmarker={{{,}}} |
2 | 2 | ||
3 | -- Ref: https://github.com/echasnovski/mini.nvim | 3 | -- Ref: https://github.com/echasnovski/mini.nvim |
4 | -- TODO | 4 | -- https://lazy.folke.io/spec |
5 | |||
6 | -- Install Lazy {{{ | ||
7 | -- Bootstrap lazy.nvim | ||
8 | local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" | ||
9 | if not (vim.uv or vim.loop).fs_stat(lazypath) then | ||
10 | local lazyrepo = "https://github.com/folke/lazy.nvim.git" | ||
11 | local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath }) | ||
12 | end | ||
13 | vim.opt.rtp:prepend(lazypath) | ||
14 | -- }}} | ||
15 | require("lazy").setup ({ | ||
16 | "tpope/vim-sleuth", | ||
17 | -- bufferline {{{ | ||
18 | { | ||
19 | "akinsho/bufferline.nvim", | ||
20 | dependencies = { | ||
21 | 'nvim-tree/nvim-web-devicons', -- OPTIONAL: for file icons | ||
22 | "tiagovla/scope.nvim", | ||
23 | }, | ||
24 | config = function() | ||
25 | require("bufferline").setup{ | ||
26 | options = { | ||
27 | tab_size = 14, | ||
28 | separator_style = { '', '' }, | ||
29 | themable = true, | ||
30 | buffer_close_icon = '', | ||
31 | close_icon = '', | ||
32 | groups = { | ||
33 | items = { | ||
34 | require('bufferline.groups').builtin.pinned:with({ icon = "" }) | ||
35 | } | ||
36 | } | ||
37 | }, | ||
38 | } | ||
39 | require("scope").setup{} | ||
40 | -- keymaps {{{ | ||
41 | for i = 1, 9, 1 do | ||
42 | vim.keymap.set("n", string.format("<A-%s>", i), function() | ||
43 | vim.cmd("BufferLineGoToBuffer "..i) | ||
44 | end, {silent = true}) | ||
45 | end | ||
46 | local opts = { noremap = true, silent = true } | ||
47 | vim.keymap.set('n', '<TAB>', '<Cmd>BufferLineCyclePrev<CR>', opts) | ||
48 | vim.keymap.set('n', '<S-TAB>', '<Cmd>BufferLineCycleNext<CR>', opts) | ||
49 | vim.keymap.set('n', '<M-h>', '<Cmd>BufferLineMovePrev<CR>', opts) | ||
50 | vim.keymap.set('n', '<M-l>', '<Cmd>BufferLineMoveNext<CR>', opts) | ||
51 | vim.keymap.set('n', '<M-p>', '<Cmd>BufferLineTogglePin<CR>', opts) | ||
52 | end, | ||
53 | -- }}} | ||
54 | }, | ||
55 | -- }}} | ||
56 | -- conform {{{ | ||
57 | { | ||
58 | "stevearc/conform.nvim", | ||
59 | opts = { | ||
60 | formatters_by_ft = { | ||
61 | lua = { "stylua" }, | ||
62 | }, | ||
63 | }, | ||
64 | config = function(_, opts) | ||
65 | require("conform").setup(opts) | ||
66 | end, | ||
67 | }, | ||
68 | -- }}} | ||
69 | -- Telescope {{{ | ||
70 | { | ||
71 | "nvim-telescope/telescope-fzf-native.nvim", | ||
72 | build = "make", | ||
73 | }, | ||
74 | { | ||
75 | "nvim-telescope/telescope.nvim", | ||
76 | lazy = false, | ||
77 | dependencies = { | ||
78 | 'nvim-lua/plenary.nvim', | ||
79 | "nvim-telescope/telescope-fzf-native.nvim", | ||
80 | }, | ||
81 | config = function() | ||
82 | -- extensions {{{ | ||
83 | require("telescope").load_extension("fzf") | ||
84 | -- require("telescope").load_extension("aerial") | ||
85 | -- }}} | ||
86 | -- config {{{ | ||
87 | require('telescope').setup({ | ||
88 | defaults = { | ||
89 | mappings = { | ||
90 | i = { | ||
91 | -- ["<c-j>"] = "move_selection_next", | ||
92 | -- ["<c-k>"] = "move_selection_previous", | ||
93 | ["<C-o>"] = require("telescope.actions.layout").toggle_preview, | ||
94 | ["<C-u>"] = false, | ||
95 | ["<C-q>"] = function(p_bufnr) | ||
96 | require("telescope.actions").send_selected_to_qflist(p_bufnr) | ||
97 | vim.cmd.cfdo("edit") | ||
98 | end, | ||
99 | }, | ||
100 | }, | ||
101 | layout_config = { | ||
102 | horizontal = { | ||
103 | prompt_position = "bottom", | ||
104 | }, | ||
105 | vertical = { height = 0.8 }, | ||
106 | -- other layout configuration here | ||
107 | preview_cutoff = 0, | ||
108 | }, | ||
109 | file_ignore_patterns = { | ||
110 | "node_modules" | ||
111 | }, | ||
112 | }, | ||
113 | pickers = { | ||
114 | buffers = { | ||
115 | show_all_buffers = true, | ||
116 | sort_lastused = true, | ||
117 | theme = "dropdown", | ||
118 | previewer = false, | ||
119 | mappings = { | ||
120 | i = { | ||
121 | ["<c-d>"] = "delete_buffer", | ||
122 | }, | ||
123 | n = { | ||
124 | ["<c-d>"] = "delete_buffer", | ||
125 | } | ||
126 | }, | ||
127 | }, | ||
128 | }, | ||
129 | extensions = { | ||
130 | fzf = { | ||
131 | fuzzy = true, -- false will only do exact matching | ||
132 | override_generic_sorter = true, -- override the generic sorter | ||
133 | override_file_sorter = true, -- override the file sorter | ||
134 | case_mode = "smart_case", -- or "ignore_case" or "respect_case" | ||
135 | -- the default case_mode is "smart_case" | ||
136 | }, | ||
137 | aerial = { | ||
138 | -- Display symbols as <root>.<parent>.<symbol> | ||
139 | show_nesting = { | ||
140 | ["_"] = false, -- This key will be the default | ||
141 | json = true, -- You can set the option for specific filetypes | ||
142 | yaml = true, | ||
143 | }, | ||
144 | }, | ||
145 | }, | ||
146 | }) | ||
147 | -- }}} | ||
148 | -- Keymaps {{{ | ||
149 | vim.keymap.set("n", "<leader>f", "<cmd>Telescope oldfiles<CR>", { desc = "telescope find oldfiles" }) | ||
150 | vim.keymap.set("n", "<leader>b", "<cmd>Telescope buffers<CR>", { desc = "telescope find buffers" }) | ||
151 | vim.keymap.set("n", "<leader>/", "<cmd>Telescope current_buffer_fuzzy_find<CR>", { desc = "telescope find in current buffer" }) | ||
152 | vim.keymap.set("n", "<leader>sf", "<cmd>Telescope find_files<cr>", { desc = "telescope find files" }) | ||
153 | vim.keymap.set( | ||
154 | "n", | ||
155 | "<leader>sF", | ||
156 | "<cmd>Telescope find_files follow=true no_ignore=true hidden=true<CR>", | ||
157 | { desc = "telescope find all files" } | ||
158 | ) | ||
159 | vim.keymap.set("n", "<leader>sg", "<cmd>Telescope live_grep<CR>", { desc = "telescope live grep" }) | ||
160 | vim.keymap.set("n", "<leader>gf", "<cmd>Telescope git_files<CR>", { desc = "telescope git files" }) | ||
161 | vim.keymap.set("n", "<leader>sH", "<cmd>Telescope help_tags<CR>", { desc = "telescope help page" }) | ||
162 | vim.keymap.set("n", "<leader>sm", "<cmd>Telescope marks<CR>", { desc = "telescope marks" }) | ||
163 | vim.keymap.set("n", "<leader>sj", "<cmd>Telescope jumplist<CR>", { desc = "telescope marks" }) | ||
164 | vim.keymap.set("n", "<leader>tt", "<cmd>Telescope<CR>", { desc = "telescope help page" }) | ||
165 | vim.keymap.set("n", "<leader>sk", "<cmd>Telescope keymaps<CR>", { desc = "telescope keymaps" }) | ||
166 | vim.keymap.set("n", "<leader>pt", "<cmd>Telescope terms<CR>", { desc = "telescope pick hidden term" }) | ||
167 | |||
168 | vim.keymap.set("n", "<leader>ss", function() | ||
169 | local current_filetype = vim.bo.filetype | ||
170 | local cwd = os.getenv("HOME") .. "/snippets" | ||
171 | require("telescope.builtin").find_files({ | ||
172 | prompt_title = "Press <C-T> to edit a snippet", | ||
173 | default_text = current_filetype == "" and "" or current_filetype .. "_", | ||
174 | cwd = cwd, | ||
175 | attach_mappings = function(prompt_bufnr, map) | ||
176 | local get_prompt_or_entry = function() | ||
177 | local file_list = require("telescope.actions.state").get_selected_entry() | ||
178 | if file_list then | ||
179 | return file_list[1] | ||
180 | else | ||
181 | local current_picker = require("telescope.actions.state").get_current_picker(prompt_bufnr) | ||
182 | return current_picker:_get_prompt() | ||
183 | end | ||
184 | end | ||
185 | |||
186 | local edit_snippet = function() | ||
187 | local file = get_prompt_or_entry() | ||
188 | require("telescope.actions").close(prompt_bufnr) | ||
189 | local prefix_filetype = string.match(file, "([^_]+)") | ||
190 | vim.cmd(":vs") | ||
191 | vim.cmd(":e " .. cwd .. "/" .. file) | ||
192 | vim.bo.filetype = prefix_filetype | ||
193 | vim.bo.bufhidden = "wipe" | ||
194 | vim.cmd("set filetype?") | ||
195 | end | ||
196 | |||
197 | local insert_selected_snippet = function() | ||
198 | local file = get_prompt_or_entry() | ||
199 | local path = cwd .. "/" .. file | ||
200 | if vim.fn.filereadable(path) ~= 0 then | ||
201 | local snippet_content = vim.fn.readfile(path) | ||
202 | require("telescope.actions").close(prompt_bufnr) | ||
203 | vim.fn.setreg('"', snippet_content) | ||
204 | print("Snippet saved to register") | ||
205 | else | ||
206 | edit_snippet() | ||
207 | end | ||
208 | end | ||
209 | |||
210 | map("i", "<CR>", insert_selected_snippet) | ||
211 | map("i", "<C-T>", edit_snippet) | ||
212 | map("n", "<CR>", insert_selected_snippet) | ||
213 | |||
214 | return true | ||
215 | end, | ||
216 | }) | ||
217 | end, { desc = "[S]earch [S]nippets" }) | ||
218 | |||
219 | vim.keymap.set("n", "<leader>sd", function() | ||
220 | require("telescope.builtin").oldfiles({ | ||
221 | prompt_title = "CD to", | ||
222 | attach_mappings = function(prompt_bufnr, map) | ||
223 | local cd_prompt = function() | ||
224 | local file = require("telescope.actions.state").get_selected_entry()[1] | ||
225 | local path = string.match(file, "(.*[/\\])") | ||
226 | require("telescope.actions").close(prompt_bufnr) | ||
227 | vim.api.nvim_feedkeys(":cd " .. path, "n", true) | ||
228 | end | ||
229 | |||
230 | map("i", "<CR>", cd_prompt) | ||
231 | map("n", "<CR>", cd_prompt) | ||
232 | |||
233 | return true | ||
234 | end, | ||
235 | }) | ||
236 | end, { desc = "Search Directory" })-- }}} | ||
237 | end, | ||
238 | }, | ||
239 | -- }}} | ||
240 | -- nvim-tree {{{ | ||
241 | { | ||
242 | "nvim-tree/nvim-tree.lua", | ||
243 | config = function() | ||
244 | -- config {{{ | ||
245 | require("nvim-tree").setup { | ||
246 | filters = { | ||
247 | dotfiles = false, | ||
248 | }, | ||
249 | disable_netrw = true, | ||
250 | hijack_netrw = true, | ||
251 | hijack_cursor = true, | ||
252 | hijack_unnamed_buffer_when_opening = false, | ||
253 | sync_root_with_cwd = true, | ||
254 | update_focused_file = { | ||
255 | enable = true, | ||
256 | update_root = false, | ||
257 | }, | ||
258 | view = { | ||
259 | adaptive_size = false, | ||
260 | side = "left", | ||
261 | width = 30, | ||
262 | preserve_window_proportions = true, | ||
263 | }, | ||
264 | git = { | ||
265 | enable = true, | ||
266 | ignore = true, | ||
267 | }, | ||
268 | filesystem_watchers = { | ||
269 | enable = true, | ||
270 | }, | ||
271 | actions = { | ||
272 | open_file = { | ||
273 | resize_window = true, | ||
274 | }, | ||
275 | }, | ||
276 | renderer = { | ||
277 | root_folder_label = false, | ||
278 | highlight_git = true, | ||
279 | highlight_opened_files = "none", | ||
280 | |||
281 | indent_markers = { | ||
282 | enable = true, | ||
283 | }, | ||
284 | |||
285 | icons = { | ||
286 | show = { | ||
287 | file = true, | ||
288 | folder = true, | ||
289 | folder_arrow = true, | ||
290 | git = true, | ||
291 | }, | ||
292 | |||
293 | glyphs = { | ||
294 | default = "", | ||
295 | symlink = "", | ||
296 | folder = { | ||
297 | default = "", | ||
298 | empty = "", | ||
299 | empty_open = "", | ||
300 | open = "", | ||
301 | symlink = "", | ||
302 | symlink_open = "", | ||
303 | arrow_open = "", | ||
304 | arrow_closed = "", | ||
305 | }, | ||
306 | git = { | ||
307 | unstaged = "✗", | ||
308 | staged = "✓", | ||
309 | unmerged = "", | ||
310 | renamed = "➜", | ||
311 | untracked = "★", | ||
312 | deleted = "", | ||
313 | ignored = "◌", | ||
314 | }, | ||
315 | }, | ||
316 | }, | ||
317 | }, | ||
318 | } | ||
319 | -- }}} | ||
320 | -- keymaps {{{ | ||
321 | vim.keymap.set( | ||
322 | "n", | ||
323 | "<C-n>", | ||
324 | "<cmd>NvimTreeToggle<CR>", | ||
325 | { desc = "nvimtree toggle window" } | ||
326 | ) | ||
327 | vim.keymap.set( | ||
328 | "n", | ||
329 | "<leader>e", | ||
330 | "<cmd>NvimTreeFocus<CR>", | ||
331 | { desc = "nvimtree focus window" } | ||
332 | ) | ||
333 | -- }}} | ||
334 | end, | ||
335 | }, | ||
336 | -- }}} | ||
337 | -- which-key {{{ | ||
338 | { | ||
339 | "folke/which-key.nvim", | ||
340 | lazy = false, | ||
341 | config = function() | ||
342 | require('which-key').setup { | ||
343 | defaults = { | ||
344 | win = { | ||
345 | -- don't allow the popup to overlap with the cursor | ||
346 | no_overlap = false, | ||
347 | -- width = 1, | ||
348 | height = { min = 10, max = 25 }, | ||
349 | -- col = 0, | ||
350 | -- row = math.huge, | ||
351 | -- border = "none", | ||
352 | padding = { 1, 2 }, -- extra window padding [top/bottom, right/left] | ||
353 | title = true, | ||
354 | title_pos = "center", | ||
355 | zindex = 1000, | ||
356 | -- Additional vim.wo and vim.bo options | ||
357 | bo = {}, | ||
358 | wo = { | ||
359 | -- winblend = 10, -- value between 0-100 0 for fully opaque and 100 for fully transparent | ||
360 | }, | ||
361 | }, | ||
362 | } | ||
363 | } | ||
364 | end, | ||
365 | }, | ||
366 | -- }}} | ||
367 | -- Tig {{{ | ||
368 | { | ||
369 | "iberianpig/tig-explorer.vim", | ||
370 | dependencies = { "rbgrouleff/bclose.vim" }, | ||
371 | config = function() | ||
372 | vim.cmd('nunmap <leader>bd') | ||
373 | end, | ||
374 | }, | ||
375 | --}}} | ||
376 | -- toggleterm {{{ | ||
377 | { | ||
378 | "akinsho/toggleterm.nvim", | ||
379 | config = function() | ||
380 | require("toggleterm").setup { | ||
381 | persist_size = false, | ||
382 | direction = 'float', | ||
383 | } | ||
5 | 384 | ||
6 | -- Install mini.nvim {{{ | 385 | vim.keymap.set({ "n", "t" }, "<A-i>", function() vim.cmd("ToggleTerm direction=float") end, { desc = "terminal toggle floating term" }) |
386 | vim.keymap.set({ "n", "t" }, "<A-v>", function() vim.cmd("ToggleTerm direction=horizontal") end, { desc = "terminal toggle floating term" }) | ||
387 | end, | ||
388 | }, | ||
389 | --}}} | ||
390 | }) | ||
7 | 391 | ||
392 | -- Install mini.nvim {{{ | ||
8 | -- Put this at the top of 'init.lua' | 393 | -- Put this at the top of 'init.lua' |
9 | local path_package = vim.fn.stdpath('data') .. '/site' | 394 | local path_package = vim.fn.stdpath('data') .. '/site' |
10 | vim.o.packpath = path_package | 395 | vim.o.packpath = path_package |
@@ -67,7 +452,7 @@ require('mini.base16').setup({ | |||
67 | -- Integers, Boolean, Constants, XML Attributes, Markup Link Url | 452 | -- Integers, Boolean, Constants, XML Attributes, Markup Link Url |
68 | base09 = "#ef9062", | 453 | base09 = "#ef9062", |
69 | -- Classes, Markup Bold, Search Text Background | 454 | -- Classes, Markup Bold, Search Text Background |
70 | base0A = "#efca84", | 455 | base0A = "#a6e22e", |
71 | -- Strings, Inherited Class, Markup Code, Diff Inserted | 456 | -- Strings, Inherited Class, Markup Code, Diff Inserted |
72 | base0B = "#e5c463", | 457 | base0B = "#e5c463", |
73 | -- Support, Regular Expressions, Escape Characters, Markup Quotes | 458 | -- Support, Regular Expressions, Escape Characters, Markup Quotes |
@@ -79,14 +464,21 @@ require('mini.base16').setup({ | |||
79 | -- Deprecated, Opening/Closing Embedded Language Tags, e.g. <?php ?> | 464 | -- Deprecated, Opening/Closing Embedded Language Tags, e.g. <?php ?> |
80 | base0F = "#f9f8f5", | 465 | base0F = "#f9f8f5", |
81 | }, | 466 | }, |
82 | use_cterm = true, | 467 | use_cterm = false, |
83 | }) | 468 | }) |
84 | 469 | ||
470 | -- Override settings for search | ||
471 | vim.cmd('hi Search guibg=#e5c07b') | ||
472 | |||
85 | -- Resume terminal color | 473 | -- Resume terminal color |
86 | for i = 1, 15, 1 do | 474 | for i = 1, 15, 1 do |
87 | vim.cmd("let terminal_color_"..i.." = ''") | 475 | vim.cmd("let terminal_color_"..i.." = ''") |
88 | end | 476 | end |
89 | 477 | ||
478 | -- Override settings for bufferline | ||
479 | vim.cmd('hi BufferLineTabSelected guibg=#f85e84') | ||
480 | vim.cmd('hi BufferLineTab guibg=Gray') | ||
481 | |||
90 | --}}} | 482 | --}}} |
91 | -- mini.icons {{{ | 483 | -- mini.icons {{{ |
92 | require('mini.icons').setup({ | 484 | require('mini.icons').setup({ |
@@ -180,9 +572,9 @@ vim.keymap.set( 'n', '\\m', function() require('mini.map').toggle() end, { desc | |||
180 | -- mini.visits {{{ | 572 | -- mini.visits {{{ |
181 | require('mini.visits').setup() | 573 | require('mini.visits').setup() |
182 | vim.keymap.set( 'n', '<leader><leader>li', function() | 574 | vim.keymap.set( 'n', '<leader><leader>li', function() |
183 | MiniVisits.list_paths() | 575 | MiniVisits.list_paths() |
184 | end, | 576 | end, |
185 | { buffer = bufnr, desc = '' } | 577 | { buffer = bufnr, desc = '' } |
186 | ) | 578 | ) |
187 | -- }}} | 579 | -- }}} |
188 | -- mini.completion {{{ | 580 | -- mini.completion {{{ |
@@ -288,399 +680,17 @@ require('mini.pairs').setup() | |||
288 | -- }, | 680 | -- }, |
289 | -- -- }}} | 681 | -- -- }}} |
290 | -- -- mini.bufremote {{{ | 682 | -- -- mini.bufremote {{{ |
291 | add('echasnovski/mini.bufremove') | 683 | -- require('mini.bufremove') |
292 | vim.g.bufremove_disable = true | ||
293 | --}}} | 684 | --}}} |
294 | -- -- mini.animate --{{{ | 685 | -- -- mini.animate --{{{ |
295 | -- add('echasnovski/mini.animate') | ||
296 | -- require("mini.animate").setup() | 686 | -- require("mini.animate").setup() |
297 | -- -- }}} | 687 | -- -- }}} |
298 | -- -- suda {{{ | 688 | -- -- suda {{{ |
299 | -- add { source = "lambdalisue/suda.vim" } | 689 | -- add { source = "lambdalisue/suda.vim" } |
300 | -- }}} | 690 | -- }}} |
301 | -- -- nvchad {{{ | ||
302 | -- add { | ||
303 | -- source = "Nvchad/base46" | ||
304 | -- } | ||
305 | -- add { | ||
306 | -- source = "Nvchad/ui" | ||
307 | -- } | ||
308 | -- add { | ||
309 | -- source = "NvChad/nvim-colorizer.lua" | ||
310 | -- } | ||
311 | -- require("colorizer").setup(opts) | ||
312 | -- | ||
313 | -- -- execute colorizer as soon as possible | ||
314 | -- vim.defer_fn(function() | ||
315 | -- require("colorizer").attach_to_buffer(0) | ||
316 | -- end, 0) | ||
317 | -- | ||
318 | -- require('base46') | ||
319 | -- require('nvchad') | ||
320 | -- }}} | ||
321 | -- Telescope {{{ | ||
322 | add({ | ||
323 | source = "nvim-telescope/telescope.nvim", | ||
324 | depends = { | ||
325 | 'nvim-lua/plenary.nvim', | ||
326 | }, | ||
327 | hooks = { post_checkout = function() end }, | ||
328 | }) | ||
329 | -- config {{{ | ||
330 | require('telescope').setup({ | ||
331 | defaults = { | ||
332 | mappings = { | ||
333 | i = { | ||
334 | -- ["<c-j>"] = "move_selection_next", | ||
335 | -- ["<c-k>"] = "move_selection_previous", | ||
336 | ["<C-o>"] = require("telescope.actions.layout").toggle_preview, | ||
337 | ["<C-u>"] = false, | ||
338 | ["<C-q>"] = function(p_bufnr) | ||
339 | require("telescope.actions").send_selected_to_qflist(p_bufnr) | ||
340 | vim.cmd.cfdo("edit") | ||
341 | end, | ||
342 | }, | ||
343 | }, | ||
344 | layout_config = { | ||
345 | horizontal = { | ||
346 | prompt_position = "bottom", | ||
347 | }, | ||
348 | vertical = { height = 0.8 }, | ||
349 | -- other layout configuration here | ||
350 | preview_cutoff = 0, | ||
351 | }, | ||
352 | file_ignore_patterns = { | ||
353 | "node_modules" | ||
354 | }, | ||
355 | }, | ||
356 | pickers = { | ||
357 | buffers = { | ||
358 | show_all_buffers = true, | ||
359 | sort_lastused = true, | ||
360 | theme = "dropdown", | ||
361 | previewer = false, | ||
362 | mappings = { | ||
363 | i = { | ||
364 | ["<c-d>"] = "delete_buffer", | ||
365 | }, | ||
366 | n = { | ||
367 | ["<c-d>"] = "delete_buffer", | ||
368 | } | ||
369 | }, | ||
370 | }, | ||
371 | }, | ||
372 | extensions = { | ||
373 | fzf = { | ||
374 | fuzzy = true, -- false will only do exact matching | ||
375 | override_generic_sorter = true, -- override the generic sorter | ||
376 | override_file_sorter = true, -- override the file sorter | ||
377 | case_mode = "smart_case", -- or "ignore_case" or "respect_case" | ||
378 | -- the default case_mode is "smart_case" | ||
379 | }, | ||
380 | aerial = { | ||
381 | -- Display symbols as <root>.<parent>.<symbol> | ||
382 | show_nesting = { | ||
383 | ["_"] = false, -- This key will be the default | ||
384 | json = true, -- You can set the option for specific filetypes | ||
385 | yaml = true, | ||
386 | }, | ||
387 | }, | ||
388 | }, | ||
389 | }) | ||
390 | -- }}} | ||
391 | -- extensions {{{ | ||
392 | add({ | ||
393 | source = 'nvim-telescope/telescope-fzf-native.nvim', | ||
394 | hooks = { | ||
395 | post_install = function(config) | ||
396 | vim.cmd("make -C " .. config.path) | ||
397 | end | ||
398 | }, | ||
399 | }) | ||
400 | require("telescope").load_extension("fzf") | ||
401 | -- require("telescope").load_extension("aerial") | ||
402 | -- }}} | ||
403 | |||
404 | -- Keymaps {{{ | ||
405 | vim.keymap.set("n", "<leader>f", "<cmd>Telescope oldfiles<CR>", { desc = "telescope find oldfiles" }) | ||
406 | vim.keymap.set("n", "<leader>b", "<cmd>Telescope buffers<CR>", { desc = "telescope find buffers" }) | ||
407 | vim.keymap.set("n", "<leader>/", "<cmd>Telescope current_buffer_fuzzy_find<CR>", { desc = "telescope find in current buffer" }) | ||
408 | vim.keymap.set("n", "<leader>sf", "<cmd>Telescope find_files<cr>", { desc = "telescope find files" }) | ||
409 | vim.keymap.set( | ||
410 | "n", | ||
411 | "<leader>sF", | ||
412 | "<cmd>Telescope find_files follow=true no_ignore=true hidden=true<CR>", | ||
413 | { desc = "telescope find all files" } | ||
414 | ) | ||
415 | vim.keymap.set("n", "<leader>sg", "<cmd>Telescope live_grep<CR>", { desc = "telescope live grep" }) | ||
416 | vim.keymap.set("n", "<leader>gf", "<cmd>Telescope git_files<CR>", { desc = "telescope git files" }) | ||
417 | vim.keymap.set("n", "<leader>sH", "<cmd>Telescope help_tags<CR>", { desc = "telescope help page" }) | ||
418 | vim.keymap.set("n", "<leader>sm", "<cmd>Telescope marks<CR>", { desc = "telescope marks" }) | ||
419 | vim.keymap.set("n", "<leader>sj", "<cmd>Telescope jumplist<CR>", { desc = "telescope marks" }) | ||
420 | vim.keymap.set("n", "<leader>tt", "<cmd>Telescope<CR>", { desc = "telescope help page" }) | ||
421 | vim.keymap.set("n", "<leader>sk", "<cmd>Telescope keymaps<CR>", { desc = "telescope keymaps" }) | ||
422 | vim.keymap.set("n", "<leader>pt", "<cmd>Telescope terms<CR>", { desc = "telescope pick hidden term" }) | ||
423 | |||
424 | vim.keymap.set("n", "<leader>ss", function() | ||
425 | local current_filetype = vim.bo.filetype | ||
426 | local cwd = os.getenv("HOME") .. "/snippets" | ||
427 | require("telescope.builtin").find_files({ | ||
428 | prompt_title = "Press <C-T> to edit a snippet", | ||
429 | default_text = current_filetype == "" and "" or current_filetype .. "_", | ||
430 | cwd = cwd, | ||
431 | attach_mappings = function(prompt_bufnr, map) | ||
432 | local get_prompt_or_entry = function() | ||
433 | local file_list = require("telescope.actions.state").get_selected_entry() | ||
434 | if file_list then | ||
435 | return file_list[1] | ||
436 | else | ||
437 | local current_picker = require("telescope.actions.state").get_current_picker(prompt_bufnr) | ||
438 | return current_picker:_get_prompt() | ||
439 | end | ||
440 | end | ||
441 | |||
442 | local edit_snippet = function() | ||
443 | local file = get_prompt_or_entry() | ||
444 | require("telescope.actions").close(prompt_bufnr) | ||
445 | local prefix_filetype = string.match(file, "([^_]+)") | ||
446 | vim.cmd(":vs") | ||
447 | vim.cmd(":e " .. cwd .. "/" .. file) | ||
448 | vim.bo.filetype = prefix_filetype | ||
449 | vim.bo.bufhidden = "wipe" | ||
450 | vim.cmd("set filetype?") | ||
451 | end | ||
452 | |||
453 | local insert_selected_snippet = function() | ||
454 | local file = get_prompt_or_entry() | ||
455 | local path = cwd .. "/" .. file | ||
456 | if vim.fn.filereadable(path) ~= 0 then | ||
457 | local snippet_content = vim.fn.readfile(path) | ||
458 | require("telescope.actions").close(prompt_bufnr) | ||
459 | vim.fn.setreg('"', snippet_content) | ||
460 | print("Snippet saved to register") | ||
461 | else | ||
462 | edit_snippet() | ||
463 | end | ||
464 | end | ||
465 | |||
466 | map("i", "<CR>", insert_selected_snippet) | ||
467 | map("i", "<C-T>", edit_snippet) | ||
468 | map("n", "<CR>", insert_selected_snippet) | ||
469 | |||
470 | return true | ||
471 | end, | ||
472 | }) | ||
473 | end, { desc = "[S]earch [S]nippets" }) | ||
474 | |||
475 | vim.keymap.set("n", "<leader>sd", function() | ||
476 | require("telescope.builtin").oldfiles({ | ||
477 | prompt_title = "CD to", | ||
478 | attach_mappings = function(prompt_bufnr, map) | ||
479 | local cd_prompt = function() | ||
480 | local file = require("telescope.actions.state").get_selected_entry()[1] | ||
481 | local path = string.match(file, "(.*[/\\])") | ||
482 | require("telescope.actions").close(prompt_bufnr) | ||
483 | vim.api.nvim_feedkeys(":cd " .. path, "n", true) | ||
484 | end | ||
485 | |||
486 | map("i", "<CR>", cd_prompt) | ||
487 | map("n", "<CR>", cd_prompt) | ||
488 | |||
489 | return true | ||
490 | end, | ||
491 | }) | ||
492 | end, { desc = "Search Directory" })-- }}} | ||
493 | |||
494 | -- }}} | ||
495 | -- toggleterm {{{ | ||
496 | |||
497 | add({ | ||
498 | source = "akinsho/toggleterm.nvim", | ||
499 | hooks = { post_checkout = function() end }, | ||
500 | }) | ||
501 | require("toggleterm").setup{ | ||
502 | persist_size = false, | ||
503 | direction = 'float', | ||
504 | } | ||
505 | |||
506 | vim.keymap.set({ "n", "t" }, "<A-i>", function() vim.cmd("ToggleTerm direction=float") end, { desc = "terminal toggle floating term" }) | ||
507 | vim.keymap.set({ "n", "t" }, "<A-v>", function() vim.cmd("ToggleTerm direction=horizontal") end, { desc = "terminal toggle floating term" }) | ||
508 | |||
509 | --}}} | ||
510 | -- Tig {{{ | ||
511 | |||
512 | add({ | ||
513 | source = "iberianpig/tig-explorer.vim", | ||
514 | depends = { "rbgrouleff/bclose.vim" }, | ||
515 | hooks = { post_checkout = function() end }, | ||
516 | }) | ||
517 | vim.cmd('nunmap <leader>bd') | ||
518 | |||
519 | --}}} | ||
520 | -- which-key {{{ | ||
521 | add({ | ||
522 | source = "folke/which-key.nvim", | ||
523 | checkout = "stable", | ||
524 | }) | ||
525 | require('which-key').setup { | ||
526 | defaults = { | ||
527 | win = { | ||
528 | -- don't allow the popup to overlap with the cursor | ||
529 | no_overlap = false, | ||
530 | -- width = 1, | ||
531 | height = { min = 10, max = 25 }, | ||
532 | -- col = 0, | ||
533 | -- row = math.huge, | ||
534 | -- border = "none", | ||
535 | padding = { 1, 2 }, -- extra window padding [top/bottom, right/left] | ||
536 | title = true, | ||
537 | title_pos = "center", | ||
538 | zindex = 1000, | ||
539 | -- Additional vim.wo and vim.bo options | ||
540 | bo = {}, | ||
541 | wo = { | ||
542 | -- winblend = 10, -- value between 0-100 0 for fully opaque and 100 for fully transparent | ||
543 | }, | ||
544 | }, | ||
545 | } | ||
546 | } | ||
547 | -- }}} | ||
548 | -- true-zen {{{ | 691 | -- true-zen {{{ |
549 | add { | 692 | add { |
550 | source = "Pocco81/true-zen.nvim", | 693 | source = "Pocco81/true-zen.nvim", |
551 | } | 694 | } |
552 | vim.keymap.set("n", "<leader>z", ":TZAtaraxis<CR>") | 695 | vim.keymap.set("n", "<leader>z", ":TZAtaraxis<CR>") |
553 | -- }}} | 696 | -- }}} |
554 | -- nvim-tree {{{ | ||
555 | add { | ||
556 | source = "nvim-tree/nvim-tree.lua", | ||
557 | } | ||
558 | -- config {{{ | ||
559 | require("nvim-tree").setup { | ||
560 | filters = { | ||
561 | dotfiles = false, | ||
562 | }, | ||
563 | disable_netrw = true, | ||
564 | hijack_netrw = true, | ||
565 | hijack_cursor = true, | ||
566 | hijack_unnamed_buffer_when_opening = false, | ||
567 | sync_root_with_cwd = true, | ||
568 | update_focused_file = { | ||
569 | enable = true, | ||
570 | update_root = false, | ||
571 | }, | ||
572 | view = { | ||
573 | adaptive_size = false, | ||
574 | side = "left", | ||
575 | width = 30, | ||
576 | preserve_window_proportions = true, | ||
577 | }, | ||
578 | git = { | ||
579 | enable = true, | ||
580 | ignore = true, | ||
581 | }, | ||
582 | filesystem_watchers = { | ||
583 | enable = true, | ||
584 | }, | ||
585 | actions = { | ||
586 | open_file = { | ||
587 | resize_window = true, | ||
588 | }, | ||
589 | }, | ||
590 | renderer = { | ||
591 | root_folder_label = false, | ||
592 | highlight_git = true, | ||
593 | highlight_opened_files = "none", | ||
594 | |||
595 | indent_markers = { | ||
596 | enable = true, | ||
597 | }, | ||
598 | |||
599 | icons = { | ||
600 | show = { | ||
601 | file = true, | ||
602 | folder = true, | ||
603 | folder_arrow = true, | ||
604 | git = true, | ||
605 | }, | ||
606 | |||
607 | glyphs = { | ||
608 | default = "", | ||
609 | symlink = "", | ||
610 | folder = { | ||
611 | default = "", | ||
612 | empty = "", | ||
613 | empty_open = "", | ||
614 | open = "", | ||
615 | symlink = "", | ||
616 | symlink_open = "", | ||
617 | arrow_open = "", | ||
618 | arrow_closed = "", | ||
619 | }, | ||
620 | git = { | ||
621 | unstaged = "✗", | ||
622 | staged = "✓", | ||
623 | unmerged = "", | ||
624 | renamed = "➜", | ||
625 | untracked = "★", | ||
626 | deleted = "", | ||
627 | ignored = "◌", | ||
628 | }, | ||
629 | }, | ||
630 | }, | ||
631 | }, | ||
632 | } | ||
633 | -- }}} | ||
634 | vim.keymap.set( | ||
635 | "n", | ||
636 | "<C-n>", | ||
637 | "<cmd>NvimTreeToggle<CR>", | ||
638 | { desc = "nvimtree toggle window" } | ||
639 | ) | ||
640 | vim.keymap.set( | ||
641 | "n", | ||
642 | "<leader>e", | ||
643 | "<cmd>NvimTreeFocus<CR>", | ||
644 | { desc = "nvimtree focus window" } | ||
645 | ) | ||
646 | |||
647 | -- }}} | ||
648 | -- bufferline {{{ | ||
649 | add { | ||
650 | source = "akinsho/bufferline.nvim", | ||
651 | depends = { | ||
652 | 'nvim-tree/nvim-web-devicons', -- OPTIONAL: for file icons | ||
653 | }, | ||
654 | } | ||
655 | require("bufferline").setup{ | ||
656 | options = { | ||
657 | themable = true, | ||
658 | buffer_close_icon = '', | ||
659 | close_icon = '', | ||
660 | groups = { | ||
661 | items = { | ||
662 | require('bufferline.groups').builtin.pinned:with({ icon = "" }) | ||
663 | } | ||
664 | } | ||
665 | }, | ||
666 | } | ||
667 | |||
668 | -- Since mini.base16 override highlight for bufferline | ||
669 | -- Set it directly | ||
670 | vim.cmd('hi BufferLineTabSelected guibg=#f85e84') | ||
671 | vim.cmd('hi BufferLineTab guibg=Gray') | ||
672 | |||
673 | -- keymaps {{{ | ||
674 | for i = 1, 9, 1 do | ||
675 | vim.keymap.set("n", string.format("<A-%s>", i), function() | ||
676 | vim.cmd("BufferLineGoToBuffer "..i) | ||
677 | end, {silent = true}) | ||
678 | end | ||
679 | local opts = { noremap = true, silent = true } | ||
680 | vim.keymap.set('n', '<TAB>', '<Cmd>BufferLineCyclePrev<CR>', opts) | ||
681 | vim.keymap.set('n', '<S-TAB>', '<Cmd>BufferLineCycleNext<CR>', opts) | ||
682 | vim.keymap.set('n', '<M-h>', '<Cmd>BufferLineMovePrev<CR>', opts) | ||
683 | vim.keymap.set('n', '<M-l>', '<Cmd>BufferLineMoveNext<CR>', opts) | ||
684 | vim.keymap.set('n', '<M-p>', '<Cmd>BufferLineTogglePin<CR>', opts) | ||
685 | -- }}} | ||
686 | --}}} | ||