vim-files

Форк
0
/
init.lua 
870 строк · 32.2 Кб
1
-- [ ] alternative files
2
-- [ ] rework mappings
3
-- [ ] remove unnecessary comments
4

5
require('nvim-config-loader').setup {
6
  colorscheme             = 'adwaita',
7
  bg                      = 'light',
8

9
  vim_plug_bundle_path    = '~/.vim/bundle',
10

11
  additional_config_files = {
12
    'lsp.lua',
13
    'completion.lua',
14
  },
15

16
  nvim_lint = {
17
    file_pattern  = {"*.rb", "*.erb", "*.haml"},
18
    linters_by_ft = {
19
      ruby = {'rubocop'}
20
    }
21
  },
22

23
  nvim_treesitter = {
24
    languages = {
25
      "ruby",
26
      "bash",
27
      "lua",
28
      "c", "cpp",
29
      "go", "gomod",
30
      "rust",
31
      "css", "html", "javascript", "json", "typescript", "vue",
32
      "python",
33
      "embedded_template",
34
      "sql",
35
      "regex",
36
      "vim", "vimdoc"
37
    }
38
  },
39

40
  alpha_start_dashboard = {
41
    title = 'Hello world!',
42
    buttons = {
43
      {"e", " > New File", "<cmd>ene<CR>"},
44
      {"n", " > Toggle file explorer", "<cmd>Neotree<CR>"},
45
      {"f", " > Find File", "<cmd>Telescope find_files<CR>"},
46
      {"F", " > Find Word", "<cmd>Telescope live_grep<CR>"},
47
      {"m", " > Keymaps", "<cmd>Telescope keymaps<CR>"},
48
      {"g", " > Git status", "<cmd>Git<CR>"},
49
      {"u", " > Update plugins", "<cmd>PlugUpdate<CR>"},
50
      {"H", " > Edit .vimrc", "<cmd>e ~/.vimrc<CR>"},
51
      {"c", " > Change colorscheme", "<cmd>Telescope themes<CR>"},
52
    }
53
  },
54

55
  vim_options = {
56
    wildoptions    = 'pum',
57
    pumblend       = 0,
58
    completeopt    = 'menu,menuone,noselect',
59
    mouse          = 'a',
60
    -- floatblend     = 8,
61

62
    inccommand     = 'nosplit',
63
    showmode       = true, -- always show what mode we're currently editing in
64
    termguicolors  = true,
65
    complete       = '.,w,b,u,t,i', -- set completion options
66
    omnifunc       = 'syntaxcomplete#Complete',
67
    updatetime     = 200,
68
    encoding       = 'utf-8',
69
    fileencodings  = {'utf-8', 'cp1251'},
70
    -- t_Co           = '256', -- Explicitly tell Vim that the terminal supports 256 colors
71

72
    wildmenu       = true, -- display command-line autocomplete variants
73
    wildmode       = 'full',
74
    wildignore     = function() return vim.opt.wildignore + '.hg,.git,.svn,*.DS_Store,*.pyc' end,
75
    title          = true, -- change the terminal's title
76

77
    visualbell     = true, -- Use visual bell instead of beeping
78
    -- scrolloff      = 15, -- makes vim centered like a iA Writer
79
    showtabline    = 1, -- display tabline only if where is more then one tab
80

81
    linebreak      = true,
82
    -- showbreak      = vim.fn.nr2char(8618) .. ' ',
83
    showbreak      = '>> ',
84
    autoindent     = true, -- always set autoindenting on
85
    expandtab      = true,
86
    shiftwidth     = 2,
87
    tabstop        = 2,
88
    softtabstop    = 2,
89
    cursorline     = true,
90
    splitbelow     = true,
91
    splitright     = true,
92
    mousehide      = true, -- Hide the mouse when typing text
93
    laststatus     = 2,
94

95
    hidden         = true, -- this allows to edit several files in the same time without having to save them
96

97
    incsearch      = true, -- show search matches as you type
98
    ignorecase     = true, -- ignore case when searching
99
    smartcase      = true,
100
    showmatch      = true, -- set show matching parenthesis
101
    gdefault       = true, -- all matches in a line are substituted instead of one.
102

103
    history        = 1000, -- store lots of :cmdline history
104
    undolevels     = 1000, --  use many muchos levels of undo
105
    timeoutlen     = 250,
106

107
    swapfile       = false,
108

109
    langmap        = 'ФИСВУАПРШОЛДЬТЩЗЙКЫЕГМЦЧНЯ;ABCDEFGHIJKLMNOPQRSTUVWXYZ,фисвуапршолдьтщзйкыегмцчня;abcdefghijklmnopqrstuvwxyz'
110
  },
111

112

113
  vim_plug_bundle = {
114
    { 'ray-x/guihua.lua', { ['do'] = 'cd lua/fzy && make' }},
115
    'nvim-lua/plenary.nvim',
116
    'MunifTanjim/nui.nvim',
117
    'tpope/vim-commentary',
118
    'vim-scripts/CursorLineCurrentWindow',
119
    'junegunn/vim-easy-align',
120
    'AndrewRadev/splitjoin.vim',
121
    'vim-utils/vim-man',
122
    'adelarsq/vim-matchit',
123
    'tiagovla/scope.nvim', -- " Make buffers scoped to tab page
124
    'tpope/vim-surround',
125
    'windwp/nvim-autopairs', -- " Auto close quotes and other pairs
126
    'abecodes/tabout.nvim',
127
    'kylechui/nvim-surround', -- " Change surrodings on fly
128
    'gcmt/wildfire.vim', -- " Cycle thought text objects
129
    'jinh0/eyeliner.nvim', -- " Move faster with unique f/F indicators for each word on the line.
130
    'folke/which-key.nvim', -- " Display key definitions in cool menu
131
    'mbbill/undotree', -- undo explorer
132
    'gbprod/yanky.nvim', -- yank explorer
133
    'simeji/winresizer', -- " Resize windows with ctrl+e
134
    'AndrewRadev/linediff.vim', -- " Diff between lines
135
    { 'L3MON4D3/LuaSnip', { tag = 'v2.*', ['do'] = 'make install_jsregexp'}}, -- " Snippets
136
    'rafamadriz/friendly-snippets',
137
    'dhruvasagar/vim-table-mode', -- " Table-mode support
138
    'folke/neodev.nvim', -- " Vim development
139
    {
140
      search_tools = {
141
        'jremmen/vim-ripgrep',
142
        'eugen0329/vim-esearch',
143
        'romainl/vim-cool',
144
      }
145
    },
146
    {
147
      ui = {
148
        'kevinhwang91/nvim-bqf',
149
        'goolord/alpha-nvim', -- " Starup dashboard
150
        'nvim-lualine/lualine.nvim', -- " Statusline
151
        'seblj/nvim-tabline', -- " Tabs
152
        'lewis6991/hover.nvim', -- LSP doc on hover
153
        'scrooloose/nerdtree', -- Sidebar filemanagers
154
        'nvim-neo-tree/neo-tree.nvim',
155
        'wfxr/minimap.vim', -- " Code minimap
156
        'j-hui/fidget.nvim', -- " Notifications
157
        { 'folke/trouble.nvim', { branch = 'main' }}, -- " Get list of all troubles
158
        'dgagn/diagflow.nvim', -- " LSP diagnostics in virtual text at the top right of your screen
159
        'stevearc/overseer.nvim', -- " Command runner with ui
160
        'SmiteshP/nvim-navic'
161
      }
162
    },
163
    {
164
      git = {
165
        'tpope/vim-fugitive',
166
        'lewis6991/gitsigns.nvim',
167
      }
168
    },
169
    {
170
      tests = {
171
        'tpope/vim-dispatch',
172
        'janko-m/vim-test',
173
        'nvim-neotest/nvim-nio',
174
        'nvim-neotest/neotest',
175
        'olimorris/neotest-rspec',
176
      }
177
    },
178
    {
179
      ctags = {
180
        'ludovicchabant/vim-gutentags',
181
        'majutsushi/tagbar',
182
      }
183
    },
184
    {
185
      fzf = {
186
        '/opt/homebrew/opt/fzf',
187
        'junegunn/fzf.vim',
188
      }
189
    },
190
    {
191
      languages = {
192
        'tpope/vim-rbenv',
193
        'vim-ruby/vim-ruby',
194
        'tpope/vim-rails',
195
        'tpope/vim-bundler',
196
        'tpope/vim-endwise',
197
        'tpope/vim-haml',
198
        'plasticboy/vim-markdown',
199
        'jelera/vim-javascript-syntax',
200
        'pangloss/vim-javascript',
201
        'MaxMEllon/vim-jsx-pretty',
202
        -- 'othree/javascript-libraries-syntax.vim',
203
        'mitsuhiko/jinja2',
204
        'leafgarland/typescript-vim',
205
        'peitalin/vim-jsx-typescript',
206
        'elixir-editors/vim-elixir',
207
        'slashmili/alchemist.vim',
208
        'racer-rust/vim-racer',
209
        'rust-lang/rust.vim',
210
        'lepture/vim-jinja',
211
        'ap/vim-css-color',
212
        'pearofducks/ansible-vim',
213
        'ekalinin/Dockerfile.vim',
214
        'chr4/nginx.vim',
215
        'slim-template/vim-slim',
216

217
        -- " Lsp & tree-sitter support
218
        'nvim-tree/nvim-web-devicons',
219

220
        'ray-x/go.nvim', -- " Golang support
221
        'mfussenegger/nvim-lint'
222
      }
223
    },
224
    {
225
      colorschemes = {
226
        'rktjmp/lush.nvim',
227
        { 'ChrisKempson/Tomorrow-Theme', { rtp = 'vim' }},
228

229
        'davidosomething/vim-colors-meh',
230
        'kkga/vim-envy',
231

232
        'navarasu/onedark.nvim',
233

234
        -- " 'RRethy/nvim-base16'
235
        --
236
        'projekt0n/github-nvim-theme',
237
        'savq/melange-nvim',
238

239
        { 'rockyzhang24/arctic.nvim', { branch = 'v2' }},
240

241
        'Mofiqul/adwaita.nvim',
242

243
        'yorik1984/newpaper.nvim',
244
        'oneslash/helix-nvim',
245
        'Verf/deepwhite.nvim',
246

247
        -- new
248
        'jacoborus/tender.vim',
249
        'bartekprtc/distinct.nvim',
250
        'uloco/bluloco.nvim',
251
        'timofurrer/edelweiss',
252
        'alexblackie/lunarised',
253
        'MetriC-DT/balance-theme.nvim',
254
        'slugbyte/lackluster.nvim',
255
        'deparr/tairiki.nvim',
256
        'lunacookies/vim-colors-xcode'
257
      }
258
    },
259
    {
260
      in_development = {
261
        'pechorin/any-jump.vim',
262
        'pechorin/u-keymapper.vim',
263
        'pechorin/vim-leuven-theme',
264
      }
265
    },
266
  },
267

268
  keymaps = {
269
    { 'n', ';', ':', { desc = "remap ; to :" }},
270
    { 'v', '//', "y/V<C-R>=escape(@\",'/\')<CR><CR>", { desc = "Search visual selected text via //", noremap = true }},
271

272
    -- quickfix
273
    { 'n', '<Leader>co', ':copen<CR>', { desc = "Show quickfix", noremap = true }},
274
    { 'n', '<Leader>cc', ':cclose<CR>', { desc = "Hide quickfix", noremap = true }},
275

276
    -- Cycle through text objects
277
    { 'n', '<SPACE>', '<Plug>(wildfire-fuel)', { desc = "This selects the next closest text object" }},
278
    { 'v', '<C-SPACE>', '<Plug>(wildfire-water)', { desc = "This selects the previous closest text object"}},
279

280
    -- Minimap
281
    { 'n', '<leader>l', ':MinimapToggle<CR>', { desc = "Toggle minimap"}},
282

283
    { 'n', 'Q', '<Nop>', { desc = 'disable ex mode' }},
284
    { 'n', 'K', '<Nop>', { desc = 'disable default K' }},
285

286
    -- Don't skip wrap lines
287
    { '', 'j', 'gj', { noremap = true }},
288
    { '', 'k', 'gk', { noremap = true }},
289

290
    navigation = {
291
      -- Tabs
292
      { 'n', '<leader>t', ':tabnew<CR>' },
293
      { 'n', 'T', ':tabnew<CR>' },
294
      { 'n', 'Q', ':tabclose<CR>' },
295
      { 'n', '<S-Right>', ':tabnext<CR>' },
296
      { 'n', '<S-Left>',  ':tabprevious<CR>' },
297
      -- { 'n', 'bd', ':bdelete<cr>', { desc = "Delete buffer" }},
298

299
      -- Buffers
300
      { 'n', '<leader>x', '<cmd>bp|bd#<CR>', { desc = "Kill current buffer", remap = true }},
301
      { 'n', '<S-Up>', ':bnext<cr>', { desc = "Next buffer" }},
302
      { 'n', '<S-Down>', ':bprevious<cr>', { desc = "Prev buffer" }},
303

304
      -- { 'n', '<leader>et', ':Outline<CR>', { desc = "Lsp symbols panel with outline.nvim" }},
305
      { 'n', '<leader>n',  ':NERDTree<CR>',   { desc = "NERDTree for project" }},
306
      { 'n', '<leader>N',  ':NERDTree %<CR>', { desc = "NERDTree for current file" }},
307

308
      -- Neotree
309
      { 'n', '<leader>m',  ':Neotree<CR>',                  { desc = "Neotree" }},
310
      { 'n', '<leader>M',  ':Neotree %<CR>',                { desc = "Neotree for current file" }},
311
      { 'n', '<leader>,',  ':Neotree buffers<CR>',          { desc = "Neotree buffers" }},
312
      { 'n', '<leader>.',  ':Neotree float git_status<CR>', { desc = "Neotree git" }},
313

314
      -- run AnyJump on ctrl+click
315
      { 'n', '<C-LeftMouse>', ':AnyJump<CR>', { desc = "Run AnyJump on ctrl+click", noremap = true }},
316
    },
317
    bask_like_keys_for_cmd = {
318
      { 'c', '<C-A>', '<Home>', { desc = 'Bash-like CTRL+A for terminal mode', noremap = true }},
319
      { 'c', '<C-E>', '<End>',  { desc = 'Bash-like CTRL+E for terminal mode', noremap = true }},
320
      { 'c', '<C-K>', '<C-U>',  { desc = 'Bash-like CTRL+K for terminal mode', noremap = true }},
321
    },
322
    text_manipulation = {
323
      { 'x', 'ga', '<Plug>(EasyAlign)', { desc = 'Align in visual mode (e.g. `vipga`)' }},
324
      { 'n', 'ga', '<Plug>(EasyAlign)', { desc = 'Align for a motion/text object (e.g. `gaip`)' }},
325
    },
326
    commenting = {
327
      { 'n', '<leader>c', '<Plug>CommentaryLine', { desc = "Comment current line" }},
328
      { 'v', '<leader>c', '<Plug>Commentary',     { desc = "Comment visualy selected text" }},
329
    },
330
    fzf = {
331
      { 'n', '<leader>b', ':Buffers<CR>', { desc = "fzf Buffers"}},
332
      { 'n', '<leader>q', ':Files<CR>',   { desc = "fzf Project files"}},
333
    },
334
    vimscript = {
335
      { 'n', '<leader>ec', ':Color <CR>',                  { desc = "fzf colorschemes select"}},
336
      { 'n', '<leader>ee', ':so %<CR>',                    { desc = "(vimrc) Eval current file as vimscript"}},
337
      { 'n', '<leader>eb', ':e ~/vim-files/init.lua <CR>', { desc = "(init.lua) Open init.lua in current buffer"}},
338
      { 'n', '<leader>ei', ':e ~/.vimrc <CR>',             { desc = "(vimrc) Open $MYVIMRC in current buffer"}},
339
    },
340
    git = {
341
      { 'n', '<leader>gg', ':tab Git<CR>',   { desc = "Open Git in new tab"}},
342
      { 'n', '<leader>gG', ':Git<CR>',       { desc = "Open Git in split"}},
343
      { 'n', '<leader>gb', ':Git blame<CR>', { desc = "Git blame for file"}},
344
    },
345
    osx_clipboard = {
346
      { '', '<leader>y', '"*y', { desc = 'Copy to system clipboard' }},
347
      { '', '<leader>p', '"*p', { desc = 'Paste from system clipboard' }},
348
      { '', '<leader>Y', '"+y', { desc = 'Copy to editor clipboard' }},
349
      { '', '<leader>P', '"+p', { desc = 'Paste from editor clipboard' }},
350
    },
351
    neotest_runners = {
352
      { 'n', '<leader>rf', ':lua require("neotest").run.run(vim.fn.expand("%"))<CR>',      { noremap = true, desc = "Neotest current file", silent = true }},
353
      { 'n', '<leader>rn', ':lua require("neotest").run.run()<CR>',                        { noremap = true, desc = "Neotest nearest test suite", silent = true}},
354
      { 'n', '<leader>rs', ':lua require("neotest").run.stop()<CR>',                       { noremap = true, silent = true}},
355
      { 'n', '<leader>ra', ':lua require("neotest").run.attach()<CR>',                     { noremap = true, silent = true}},
356
      { 'n', '<leader>rw', ':lua require("neotest").watch.toggle(vim.fn.expand("%"))<CR>', { noremap = true, desc = "Neotest watch current file", silent = true}},
357
      { 'n', '<leader>ro', ':lua require("neotest").output.toggle({ enter = true })<CR>',  { noremap = true, desc = "Neotest toggle output panel", silent = true}},
358
    },
359
    classic_test_runners = {
360
      { 'n', '<silent>', '<leader>rtf :TestFile<CR>' },
361
      { 'n', '<silent>', '<leader>rtd :TestFile -f d<CR>' },
362
      { 'n', '<silent>', '<leader>rtn :TestNearest<CR>' },
363
      { 'n', '<silent>', '<leader>rts :TestSuite<CR>' },
364
      { 'n', '<silent>', '<leader>rtl :TestLast<CR>' },
365
    },
366
    terminal = {
367
      -- " tnoremap <Esc> <C-\><C-n> "Exit to normal mode from terminal with esc"
368

369
      -- " make C-w C-w works in term
370
      { 't', '<C-w>', '<C-><C-o><C-w>', { remap = true, desc = "Make C-w C-w works in term" }},
371
    },
372
  },
373

374
  autocommands = {
375
    { event = { 'BufNewFile', 'BufRead' }, pattern = '*', command = "let b:preferred_searcher = 'rg'" },
376
    { event = { 'BufWritePre' }, pattern = '*', command = ":%s/\\s\\+$//e" },
377
    language_detection = {
378
      { event = { 'BufNewFile' , 'BufRead' }, pattern = '*.rs',     command = 'set filetype=rust' },
379
      { event = { 'BufNewFile' , 'BufRead' }, pattern = '*.yml.j2', command = 'set filetype=yaml' },
380
      { event = { 'BufNewFile' , 'BufRead' }, pattern = '*.pcss ',  command = 'set filetype=postcss' },
381
      { event = { 'BufNewFile' , 'BufRead' }, pattern = '*.arb',    command = 'set filetype=ruby' },
382
      { event = { 'BufNewFile' , 'BufRead' }, pattern = '*.lmx',    command = 'set filetype=haml' },
383

384
      -- for alternative Gemfiles
385
      { event = { 'BufNewFile' , 'BufRead' }, pattern = 'Gemfile*', command = 'set filetype=ruby' },
386
    },
387
    languages_settings = {
388
      -- pretty colymn hi for yaml modes
389
      { event = { 'FileType' }, pattern = 'yaml',       command = 'setlocal cursorcolumn' },
390
      { event = { 'FileType' }, pattern = 'eruby.yaml', command = 'setlocal cursorcolumn' },
391

392
      -- js with 2 tabs
393
      { event = { 'FileType' }, pattern = 'javascript', command = 'setlocal sw=2 sw=2 sts=2' },
394
    },
395
    reload_buffer_if_file_changed = {
396
      {
397
        pattern = '*',
398
        command = 'checktime',
399
        event = {
400
          'BufEnter', 'WinLeave',
401
          'CursorHold', 'CursorHoldI', 'CursorMoved', 'CursorMovedI',
402
          'FocusGained', 'FocusLost'
403
        }
404
      },
405
    },
406
    -- auto_remove_trailing_whitespaces = {
407
    --   { event = { 'BufWritePre' }, pattern = '*', command = ":%s/\\s\\+$//e" },
408
    -- },
409
    terminal_settings = {
410
      { event = { 'BufWinEnter' }, pattern = 'term://*', command = 'startinsert' },
411
      -- { event = { 'WinEnter' }, pattern = 'term://*'', command = 'startinsert' },
412
      { event = { 'BufLeave' }, pattern = 'term://*', command = 'stopinsert' },
413
    },
414
  },
415

416
  vim_globals = {
417
    mapleader = ',',
418
    fzf_preview_window    = '',
419
    ['$FZF_DEFAULT_OPTS'] = '--layout=reverse --multi',
420
    fzf_layout            = { window = { width = 0.9, height = 0.6, border = 'sharp' } },
421
    -- fzf_colors            = {
422
    --   fg      = { 'fg', 'Normal' },
423
    --   bg      = { 'bg', 'Normal' },
424
    --   hl      = { 'fg', 'Comment' },
425
    --   ['fg+'] = { 'fg', 'CursorLine', 'CursorColumn', 'Normal' },
426
    --   ['bg+'] = { 'bg', 'CursorLine', 'CursorColumn' },
427
    --   ['hl+'] = { 'fg', 'Statement' },
428
    --   info    = { 'fg', 'PreProc' },
429
    --   border  = { 'fg', 'Ignore' },
430
    --   prompt  = { 'fg', 'Conditional' },
431
    --   pointer = { 'fg', 'Exception' },
432
    --   marker  = { 'fg', 'Keyword' },
433
    --   spinner = { 'fg', 'Label' },
434
    --   header  = { 'fg', 'Comment' }
435
    -- },
436

437
    -- NERDtree (classic tree explorer)
438
    NERDTreeShowHidden = 1,
439
    NERDTreeMinimalUI  = 1, -- Disables display of the 'Bookmarks' label and 'Press ? for help' text.
440
    NERDTreeDirArrows  = 0, -- Tells the NERD tree to use arrows instead of + ~ chars when displaying directories.
441
    NERDTreeIgnore     = { '.git$' },
442
    NERDTreeStatusline = 0,
443
    NERDTreeWinSize    = 25,
444

445
    -- javascript-libraries-syntax.vim
446
    -- used_javascript_libs = { 'underscore', 'backbone', 'angularjs'},
447

448
    -- markdown
449
    vim_markdown_folding_disabled = 1,
450

451
    -- vim-test
452
    ['test#strategy']             = 'neovim',
453
    ['test#neovim#term_position'] = 'rightbelow 25',
454
    ['test#preserve_screen']      = 1,
455
    ['test#neovim#start_normal']  = 1,
456
    ['test#ruby#rspec#options']   = { file = '--format documentation' },
457

458
    -- ~ ruby
459
    ruby_path             = function() return vim.fn.system('rbenv prefix') end,
460
    ruby_host_prog        = function() return vim.fn.substitute(vim.fn.system('rbenv prefix') .. '/bin/ruby', "\n", '', 'g') end,
461
    ruby_operators        = 1,
462
    ruby_pseudo_operators = 1,
463
    ruby_no_expensive     = 1,
464

465
    -- Esearch
466
    sort_by_path = {adapters = {rg = {options = '--sort path'}}},
467
    sort_by_date = {adapters = {rg = {options = '--sort modified'}}},
468
    -- esearch = {
469
    --   win_new = function(esearch)
470
    --     return vim.fn['esearch#buf#goto_or_open'](esearch.name, 'new')
471
    --   end
472
    -- },
473
    esearch = {
474
      prefill = {'last', 'clipboard'},
475
      live_update = true,
476
      win_map = {
477
        {'n', 'gq',  ':call esearch#init(extend(copy(b:esearch), {"out": "qflist"}))<cr>'  },
478
        {'n', 'gsp', ':call esearch#init(extend(b:esearch, sort_by_path))<cr>'             },
479
        {'n', 'gsd', ':call esearch#init(extend(b:esearch, sort_by_date))<cr>'             },
480
      }
481
    },
482

483
    -- NOTE: {'backend': 'system'} means synchronous reload using system() call to stay within the same context
484
    -- ['AddAfter'] = { n = { after = b:esearch.after + n, 'backend': 'system'}}, -- TODO: recheck
485

486
    -- any-jump.vim config
487
    any_jump_search_prefered_engine = 'rg',
488
    any_jump_ignored_files          = {'*.tmp', '*.temp', 'tags'},
489

490
    -- ctags
491
    gutentags_define_advanced_commands = 1,
492
    gutentags_ctags_exclude            = {'*.js', '*.jsx', '*.coffee', '*.js.erb', 'node_modules'},
493
    gutentags_file_list_command = 'rg --files',
494

495
    -- hi MsgSeparator guifg=#ff00ff
496

497
    -- vim-table-mode
498
    table_mode_corner='|',
499

500
    -- onedark theme config
501
    onedark_config = { style = 'warmer' },
502

503
    -- nvim-cursorword
504
    -- hi default CursorWord cterm=underline gui=underline
505
    -- hi default CursorWord cterm=underline guifg=#ff00ff
506

507
    -- minimap
508
    minimap_git_colors = true,
509

510
    -- winresize
511
    winresizer_vert_resize = 25,
512
    winresizer_horiz_resize = 5,
513
  },
514

515
  setup = function()
516
    require("which-key").setup({})
517
    require("nvim-autopairs").setup({})
518
    require("nvim-surround").setup({})
519
    require('overseer').setup({})
520
    require("scope").setup({})
521
    require("yanky").setup({})
522
    require("fidget").setup({})
523
    require("trouble").setup({})
524
    require('neotest').setup({ adapters = { require('neotest-rspec'), } })
525
    require('diagflow').setup({ padding_top = 5, text_align = 'left' })
526

527
    -- neo-tree
528
    require("neo-tree").setup({
529
      enable_git_status = true,
530
      window            = { width = 30 },
531
      default_component_configs = {
532
        container = { enable_character_fade = false },
533
        indent    = { indent_size = 1, padding = 0, with_markers = false, },
534
        icon      = { folder_closed = ">", folder_open = "-", folder_empty = "ﰊ", },
535
        modified  = { symbol = "[+]" }
536
      },
537
      filesystem = {
538
        filtered_items = {
539
          visible         = false,
540
          hide_dotfiles   = false,
541
          hide_gitignored = false,
542
          hide_by_name    = { "node_modules", "tags", },
543
          never_show      = { ".DS_Store" }
544
        },
545
        follow_current_file  = { enabled = true }, use_libuv_file_watcher = true,
546
      },
547
      source_selector = {
548
        winbar = true,
549
        sources = {
550
          { source = "filesystem" },
551
          { source = "buffers" },
552
          { source = "git_status" },
553
          { source = "document_symbols" },
554
        },
555
      },
556
      sources = { "filesystem", "buffers", "git_status", "document_symbols" }
557
    })
558

559
    require('eyeliner').setup({
560
      highlight_on_key = true, -- show highlights only after keypress
561
      dim = false              -- dim all other characters if set to true (recommended!)
562
    })
563

564
    -- git markers
565
    require('gitsigns').setup({
566
      current_line_blame = true,
567
      current_line_blame_opts = {
568
        virt_text = true, virt_text_pos = 'right_align', -- 'eol' | 'overlay' | 'right_align'
569
        delay = 1000, ignore_whitespace = false, virt_text_priority = 100,
570
      },
571
    })
572

573
    -- tabline
574
    require('tabline').setup({
575
        no_name         = '[new]',
576
        modified_icon   = '',
577
        close_icon      = '',
578
        -- separator    = "▌",
579
        separator       = "|",
580
        padding         = 1,
581
        color_all_icons = true,
582
        right_separator = true,
583
        show_index      = false,
584
        show_icon       = true,
585
    })
586

587
    -- tabout
588
    require('tabout').setup({
589
      tabkey            = '<Tab>', -- key to trigger tabout, set to an empty string to disable
590
      backwards_tabkey  = '<S-Tab>', -- key to trigger backwards tabout, set to an empty string to disable
591
      act_as_tab        = true, -- shift content if tab out is not possible
592
      act_as_shift_tab  = false, -- reverse shift content if tab out is not possible (if your keyboard/terminal supports <S-Tab>)
593
      default_tab       = '<C-t>', -- shift default action (only at the beginning of a line, otherwise <TAB> is used)
594
      default_shift_tab = '<C-d>', -- reverse shift default action,
595
      enable_backwards  = true, -- well ...
596
      completion        = true, -- if the tabkey is used in a completion pum
597
      tabouts = {
598
        {open = "'", close = "'"},
599
        {open = '"', close = '"'},
600
        {open = '`', close = '`'},
601
        {open = '(', close = ')'},
602
        {open = '[', close = ']'},
603
        {open = '{', close = '}'}
604
      },
605
      ignore_beginning = true, --[[ if the cursor is at the beginning of a filled element it will rather tab out than shift the content ]]
606
      exclude          = {} -- tabout will ignore these filetypes
607
    })
608

609
    -- lualine
610
    local gps = require("nvim-gps")
611
    gps.setup()
612

613
    local treesitter = require('nvim-treesitter')
614

615
    -- local current_treesitter_context = function()
616
    --   if not packer_plugins["nvim-treesitter"] or packer_plugins["nvim-treesitter"].loaded == false then
617
    --     return " "
618
    --   end
619
    --   local f = require'nvim-treesitter'.statusline({
620
    --     indicator_size = 300,
621
    --     type_patterns = {"class", "function", "method", "interface", "type_spec", "table", "if_statement", "for_statement", "for_in_statement"}
622
    --   })
623
    --   local fun_name = string.format("%s", f) -- convert to string, it may be a empty ts node
624

625
    --   -- print(string.find(fun_name, "vim.NIL"))
626
    --   if fun_name == "vim.NIL" then
627
    --     return " "
628
    --   end
629
    --   return " " .. fun_name
630
    -- end
631

632
    require('lualine').setup({
633
      options = {
634
        theme              = 'auto',
635
        globalstatus       = true,
636
        refresh            = { statusline = 3000, tabline = 3000, winba = 3000 },
637
        section_separators = '', component_separators = '',
638
        -- component_separators = { left = '', right = ''},
639
        -- section_separators = { left = '', right = ''},
640
        disabled_filetypes = { winbar = { 'nerdtree', 'neo-tree' , 'alpha', 'fugitive', '', 'esearch'} },
641
      },
642
      sections = {
643
        lualine_a = {
644
          { 'mode', fmt = function(str) return str:sub(1,1) end, padding = 1 },
645
        },
646
        lualine_b = {'branch', 'diff'},
647
        lualine_c = {
648
          { treesitter.statusline }
649
        },
650
        lualine_x = {
651
          -- { 'filename', path = 1, newfile_status = true },
652
          'fileformat', 'encoding', 'filetype', 'diagnostics',
653
        },
654
        lualine_y = {'progress'},
655
        lualine_z = {'location', 'searchcount', 'selectioncount'},
656
      },
657
      -- tabline = {
658
      --   lualine_a = {
659
      --     {
660
      --       'tabs',
661
      --       mode = 1,
662
      --       path = 1,
663
      --       use_mode_colors = true
664
      --     }
665
      --   },
666
      --   -- lualine_b = {
667
      --   --   { 'buffers' }
668
      --   -- },
669
      -- },
670
      winbar = {
671
        lualine_a = {
672
          {
673
            'navic',
674
            color_correction = 'dynamic',
675
            navic_opts = {
676
              highlight = true,
677
              click = true,
678
              separator = '  '
679
            }
680
          },
681
        },
682
        lualine_z = {
683
          { 'filename', path = 1, newfile_status = true },
684
        }
685
      },
686
      inactive_winbar = {
687
        lualine_z = {
688
          { 'filename', path = 1, newfile_status = true }
689
        }
690
      },
691
      extensions = {'quickfix', 'fzf', 'nerdtree', 'neo-tree', 'fugitive', 'man', 'trouble'}
692
    })
693

694
    -- quickfix
695
    vim.cmd [[
696
      packadd cfilter
697
    ]]
698

699
    -- do not hl cursor in term
700
    vim.cmd [[
701
      hi CursorLine cterm=NONE
702
    ]]
703

704
    -- zsh
705
    vim.opt.shell = '/bin/zsh -l'
706

707
    -- fzf
708
    vim.cmd [[
709
      set rtp+=/usr/local/opt/fzf
710
    ]]
711

712
    -- ripgrep
713
    vim.opt.grepprg = 'rg --color=never'
714
  end,
715

716
  packs = {
717
    telescope = {
718
      vim_plug_bundle = {
719
        { 'nvim-telescope/telescope.nvim', { branch = '0.1.x' }},
720
        'andrew-george/telescope-themes',
721
        'otavioschwanck/telescope-alternate',
722
        'isak102/telescope-git-file-history.nvim',
723
        'FabianWirth/search.nvim',
724
      },
725
      keymaps = {
726
        { 'n', '<Leader>gS', ":lua require('search').open()<CR>", { desc = "Run search window", noremap = true }},
727
        { 'n', '<leader>gT', '<cmd>Telescope<cr>',             { noremap = true, desc = "Telescope" }},
728
        { 'n', '<leader>gf', '<cmd>Telescope find_files<cr>',  { noremap = true, desc = "Files" }},
729
        { 'n', '<leader>gb', '<cmd>Telescope buffers<cr>',     { noremap = true, desc = "Buffers" }},
730
        { 'n', '<leader>gl', '<cmd>Telescope oldfiles<cr>',    { noremap = true, desc = "Old files" }},
731
        { 'n', '<leader>gc', '<cmd>Telescope themes<cr>',      { noremap = true, desc = "Themes" }},
732
        { 'n', '<leader>gk', '<cmd>Telescope keymaps<cr>',     { noremap = true, desc = "Keys" }},
733
        { 'n', '<leader>gh', '<cmd>Telescope git_commits<cr>', { noremap = true, desc = "Git commits" }},
734
        { 'n', '<leader>gs', '<cmd>Telescope git_status<cr>',  { noremap = true, desc = "Git status" }},
735
        { 'n', '<leader>gr', '<cmd>Telescope registers<cr>',   { noremap = true, desc = "Keys" }},
736
        { 'n', '<leader>gd', '<cmd>Telescope diagnostics<cr>', { noremap = true, desc = "Keys" }},
737
        { 'n', '<leader>ga', '<cmd>Telescope telescope-alternate alternate_file<cr>', { noremap = true, desc = "Keys" }},
738
      },
739
      setup = function(self)
740
        local telescope     = require('telescope')
741
        local actions       = require("telescope.actions")
742
        local action_layout = require("telescope.actions.layout")
743

744
        require('search').setup({})
745

746
        telescope.setup({
747
          defaults = {
748
            layout_config = { vertical = { width = 0.6 }, horizontal = { width = 0.5 } },
749
            mappings = {
750
              i = {
751
                ["<esc>"] = actions.close,
752
              },
753
            },
754
          },
755
          pickers = {
756
            buffers = { theme = "dropdown" }, find_files = { theme = "dropdown" }
757
          },
758
          extensions = {
759
            themes = {
760
              enable_previewer = false, enable_live_preview = true, persist = { enabled = false }, ignore = {},
761
              layout_config = { horizontal = { width = 0.3, height = 0.5 } },
762
            },
763
            -- TODO: setup: https://github.com/otavioschwanck/telescope-alternate.nvim
764
            ["telescope-alternate"] = {
765
             presets = { 'rails', 'rspec' },
766
             mappings = {
767
               { 'app/models/(.*).rb', {
768
                 { 'app/admin/**/*[1].rb', 'Admin' },
769
                 { 'app/interactions/[1:pluralize]*/*.rb', 'Interactions' },
770
                 { 'app/interactors/[1:pluralize]*/*.rb', 'Interactors' },
771
                 -- { 'app/**/[1:pluralize]/*.rb', 'Modules' },
772
                 -- { 'app/**/**/[1]*.rb', '~*' },
773
               }
774
               },
775
               -- { 'app/services/(.*)/(.*).rb', { -- alternate from services to contracts / models
776
            -- --      -- { 'app/contracts/[1]_contracts/[2].rb', 'Contract' }, -- Adding label to switch
777
               --   { 'app/models/**/*[1].rb', 'Model' },
778
               --   { 'app/interactions/**/*[1].rb', 'Interactions' },
779
               --   { 'app/interactors/**/*[1].rb', 'Interactors' },
780
               -- } },
781
            --    { 'app/contracts/(.*)_contracts/(.*).rb', { { 'app/services/[1]_services/[2].rb', 'Service' } } }, -- from contracts to services
782
            --    -- Search anything on helper folder that contains pluralize version of model.
783
            --    --Example: app/models/user.rb -> app/helpers/foo/bar/my_users_helper.rb
784
            --    { 'app/models/(.*).rb', { { 'db/helpers/**/*[1:pluralize]*.rb', 'Helper' } } },
785
               -- { 'app/**/*.rb', { { 'spec/[1].rb', 'Test' } } }, -- Alternate between file and test
786
             },
787
            },
788
          }
789
        })
790

791
        telescope.load_extension('themes')
792
        telescope.load_extension('telescope-alternate')
793
        telescope.load_extension('git_file_history')
794
      end
795
    },
796
    nvim_lint = {
797
      vim_plug_bundle = {
798
        'mfussenegger/nvim-lint' -- " TODO: use lsp linter support?
799
      },
800
      setup = function(self)
801
        if type(self.settings.nvim_lint) == 'table' then
802
          if type(self.settings.nvim_lint.linters_by_ft) == 'table' then
803
            require('lint').linters_by_ft = self.settings.nvim_lint.linters_by_ft
804

805
            local pattern = self.settings.nvim_lint.file_pattern or { "*.rb", "*.erb", "*.haml", "*.slim" }
806

807
            vim.api.nvim_create_autocmd({ "BufWritePost", "BufRead" }, {
808
              pattern = pattern,
809
              callback = function()
810
                require("lint").try_lint()
811
              end,
812
            })
813
          end
814
        end
815
      end,
816
    },
817
    nvim_treesitter = {
818
      vim_plug_bundle = {
819
        'nvim-treesitter/nvim-treesitter',
820
        'nvim-treesitter/playground',
821
        'SmiteshP/nvim-gps'
822
      },
823
      setup = function(self)
824
        if type(self.settings.nvim_treesitter) ~= 'table' or type(self.settings.nvim_treesitter.languages) ~= 'table' then return end
825

826
        require('nvim-treesitter.configs').setup {
827
          ensure_installed = self.settings.nvim_treesitter.languages,
828
          sync_install     = true,
829
          auto_install     = true,
830
          highlight        = { enable = true }
831
        }
832
      end
833
    },
834
    alpha_start_dashboard = {
835
      vim_plug_bundle = {
836
        'goolord/alpha-nvim'
837
      },
838
      autocommands = {
839
        -- Disable folding on alpha buffer
840
        { event = { 'FileType' }, pattern = 'alpha', command = 'setlocal nofoldenable' },
841
      },
842
      setup = function(self)
843
        local alpha = require("alpha")
844
        local startify = require("alpha.themes.startify")
845

846
        local title = self.settings.alpha_start_dashboard.title or 'Hello world'
847

848
        startify.section.header.val = { title }
849

850
        startify.opts.layout[1].val = 2
851
        startify.opts.opts.margin   = 3
852

853
        -- disable MRU
854
        startify.section.mru.val = { { type = "padding", val = 0 } }
855

856
        local buttons = {}
857

858
        for _, data in pairs(self.settings.alpha_start_dashboard.buttons or {}) do
859
          local btn = startify.button(unpack(data))
860
          table.insert(buttons, btn)
861
        end
862

863
        startify.section.top_buttons.val = buttons
864

865
        -- Send config to alpha
866
        alpha.setup(startify.config)
867
      end
868
    }
869
  }, -- packs
870
}
871

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.