vim-files
/
init.lua
870 строк · 32.2 Кб
1-- [ ] alternative files
2-- [ ] rework mappings
3-- [ ] remove unnecessary comments
4
5require('nvim-config-loader').setup {
6colorscheme = 'adwaita',
7bg = 'light',
8
9vim_plug_bundle_path = '~/.vim/bundle',
10
11additional_config_files = {
12'lsp.lua',
13'completion.lua',
14},
15
16nvim_lint = {
17file_pattern = {"*.rb", "*.erb", "*.haml"},
18linters_by_ft = {
19ruby = {'rubocop'}
20}
21},
22
23nvim_treesitter = {
24languages = {
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
40alpha_start_dashboard = {
41title = 'Hello world!',
42buttons = {
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
55vim_options = {
56wildoptions = 'pum',
57pumblend = 0,
58completeopt = 'menu,menuone,noselect',
59mouse = 'a',
60-- floatblend = 8,
61
62inccommand = 'nosplit',
63showmode = true, -- always show what mode we're currently editing in
64termguicolors = true,
65complete = '.,w,b,u,t,i', -- set completion options
66omnifunc = 'syntaxcomplete#Complete',
67updatetime = 200,
68encoding = 'utf-8',
69fileencodings = {'utf-8', 'cp1251'},
70-- t_Co = '256', -- Explicitly tell Vim that the terminal supports 256 colors
71
72wildmenu = true, -- display command-line autocomplete variants
73wildmode = 'full',
74wildignore = function() return vim.opt.wildignore + '.hg,.git,.svn,*.DS_Store,*.pyc' end,
75title = true, -- change the terminal's title
76
77visualbell = true, -- Use visual bell instead of beeping
78-- scrolloff = 15, -- makes vim centered like a iA Writer
79showtabline = 1, -- display tabline only if where is more then one tab
80
81linebreak = true,
82-- showbreak = vim.fn.nr2char(8618) .. ' ',
83showbreak = '>> ',
84autoindent = true, -- always set autoindenting on
85expandtab = true,
86shiftwidth = 2,
87tabstop = 2,
88softtabstop = 2,
89cursorline = true,
90splitbelow = true,
91splitright = true,
92mousehide = true, -- Hide the mouse when typing text
93laststatus = 2,
94
95hidden = true, -- this allows to edit several files in the same time without having to save them
96
97incsearch = true, -- show search matches as you type
98ignorecase = true, -- ignore case when searching
99smartcase = true,
100showmatch = true, -- set show matching parenthesis
101gdefault = true, -- all matches in a line are substituted instead of one.
102
103history = 1000, -- store lots of :cmdline history
104undolevels = 1000, -- use many muchos levels of undo
105timeoutlen = 250,
106
107swapfile = false,
108
109langmap = 'ФИСВУАПРШОЛДЬТЩЗЙКЫЕГМЦЧНЯ;ABCDEFGHIJKLMNOPQRSTUVWXYZ,фисвуапршолдьтщзйкыегмцчня;abcdefghijklmnopqrstuvwxyz'
110},
111
112
113vim_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{
140search_tools = {
141'jremmen/vim-ripgrep',
142'eugen0329/vim-esearch',
143'romainl/vim-cool',
144}
145},
146{
147ui = {
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{
164git = {
165'tpope/vim-fugitive',
166'lewis6991/gitsigns.nvim',
167}
168},
169{
170tests = {
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{
179ctags = {
180'ludovicchabant/vim-gutentags',
181'majutsushi/tagbar',
182}
183},
184{
185fzf = {
186'/opt/homebrew/opt/fzf',
187'junegunn/fzf.vim',
188}
189},
190{
191languages = {
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{
225colorschemes = {
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{
260in_development = {
261'pechorin/any-jump.vim',
262'pechorin/u-keymapper.vim',
263'pechorin/vim-leuven-theme',
264}
265},
266},
267
268keymaps = {
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
290navigation = {
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},
317bask_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},
322text_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},
326commenting = {
327{ 'n', '<leader>c', '<Plug>CommentaryLine', { desc = "Comment current line" }},
328{ 'v', '<leader>c', '<Plug>Commentary', { desc = "Comment visualy selected text" }},
329},
330fzf = {
331{ 'n', '<leader>b', ':Buffers<CR>', { desc = "fzf Buffers"}},
332{ 'n', '<leader>q', ':Files<CR>', { desc = "fzf Project files"}},
333},
334vimscript = {
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},
340git = {
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},
345osx_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},
351neotest_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},
359classic_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},
366terminal = {
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
374autocommands = {
375{ event = { 'BufNewFile', 'BufRead' }, pattern = '*', command = "let b:preferred_searcher = 'rg'" },
376{ event = { 'BufWritePre' }, pattern = '*', command = ":%s/\\s\\+$//e" },
377language_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},
387languages_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},
395reload_buffer_if_file_changed = {
396{
397pattern = '*',
398command = 'checktime',
399event = {
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-- },
409terminal_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
416vim_globals = {
417mapleader = ',',
418fzf_preview_window = '',
419['$FZF_DEFAULT_OPTS'] = '--layout=reverse --multi',
420fzf_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)
438NERDTreeShowHidden = 1,
439NERDTreeMinimalUI = 1, -- Disables display of the 'Bookmarks' label and 'Press ? for help' text.
440NERDTreeDirArrows = 0, -- Tells the NERD tree to use arrows instead of + ~ chars when displaying directories.
441NERDTreeIgnore = { '.git$' },
442NERDTreeStatusline = 0,
443NERDTreeWinSize = 25,
444
445-- javascript-libraries-syntax.vim
446-- used_javascript_libs = { 'underscore', 'backbone', 'angularjs'},
447
448-- markdown
449vim_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
459ruby_path = function() return vim.fn.system('rbenv prefix') end,
460ruby_host_prog = function() return vim.fn.substitute(vim.fn.system('rbenv prefix') .. '/bin/ruby', "\n", '', 'g') end,
461ruby_operators = 1,
462ruby_pseudo_operators = 1,
463ruby_no_expensive = 1,
464
465-- Esearch
466sort_by_path = {adapters = {rg = {options = '--sort path'}}},
467sort_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-- },
473esearch = {
474prefill = {'last', 'clipboard'},
475live_update = true,
476win_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
487any_jump_search_prefered_engine = 'rg',
488any_jump_ignored_files = {'*.tmp', '*.temp', 'tags'},
489
490-- ctags
491gutentags_define_advanced_commands = 1,
492gutentags_ctags_exclude = {'*.js', '*.jsx', '*.coffee', '*.js.erb', 'node_modules'},
493gutentags_file_list_command = 'rg --files',
494
495-- hi MsgSeparator guifg=#ff00ff
496
497-- vim-table-mode
498table_mode_corner='|',
499
500-- onedark theme config
501onedark_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
508minimap_git_colors = true,
509
510-- winresize
511winresizer_vert_resize = 25,
512winresizer_horiz_resize = 5,
513},
514
515setup = function()
516require("which-key").setup({})
517require("nvim-autopairs").setup({})
518require("nvim-surround").setup({})
519require('overseer').setup({})
520require("scope").setup({})
521require("yanky").setup({})
522require("fidget").setup({})
523require("trouble").setup({})
524require('neotest').setup({ adapters = { require('neotest-rspec'), } })
525require('diagflow').setup({ padding_top = 5, text_align = 'left' })
526
527-- neo-tree
528require("neo-tree").setup({
529enable_git_status = true,
530window = { width = 30 },
531default_component_configs = {
532container = { enable_character_fade = false },
533indent = { indent_size = 1, padding = 0, with_markers = false, },
534icon = { folder_closed = ">", folder_open = "-", folder_empty = "ﰊ", },
535modified = { symbol = "[+]" }
536},
537filesystem = {
538filtered_items = {
539visible = false,
540hide_dotfiles = false,
541hide_gitignored = false,
542hide_by_name = { "node_modules", "tags", },
543never_show = { ".DS_Store" }
544},
545follow_current_file = { enabled = true }, use_libuv_file_watcher = true,
546},
547source_selector = {
548winbar = true,
549sources = {
550{ source = "filesystem" },
551{ source = "buffers" },
552{ source = "git_status" },
553{ source = "document_symbols" },
554},
555},
556sources = { "filesystem", "buffers", "git_status", "document_symbols" }
557})
558
559require('eyeliner').setup({
560highlight_on_key = true, -- show highlights only after keypress
561dim = false -- dim all other characters if set to true (recommended!)
562})
563
564-- git markers
565require('gitsigns').setup({
566current_line_blame = true,
567current_line_blame_opts = {
568virt_text = true, virt_text_pos = 'right_align', -- 'eol' | 'overlay' | 'right_align'
569delay = 1000, ignore_whitespace = false, virt_text_priority = 100,
570},
571})
572
573-- tabline
574require('tabline').setup({
575no_name = '[new]',
576modified_icon = '',
577close_icon = '',
578-- separator = "▌",
579separator = "|",
580padding = 1,
581color_all_icons = true,
582right_separator = true,
583show_index = false,
584show_icon = true,
585})
586
587-- tabout
588require('tabout').setup({
589tabkey = '<Tab>', -- key to trigger tabout, set to an empty string to disable
590backwards_tabkey = '<S-Tab>', -- key to trigger backwards tabout, set to an empty string to disable
591act_as_tab = true, -- shift content if tab out is not possible
592act_as_shift_tab = false, -- reverse shift content if tab out is not possible (if your keyboard/terminal supports <S-Tab>)
593default_tab = '<C-t>', -- shift default action (only at the beginning of a line, otherwise <TAB> is used)
594default_shift_tab = '<C-d>', -- reverse shift default action,
595enable_backwards = true, -- well ...
596completion = true, -- if the tabkey is used in a completion pum
597tabouts = {
598{open = "'", close = "'"},
599{open = '"', close = '"'},
600{open = '`', close = '`'},
601{open = '(', close = ')'},
602{open = '[', close = ']'},
603{open = '{', close = '}'}
604},
605ignore_beginning = true, --[[ if the cursor is at the beginning of a filled element it will rather tab out than shift the content ]]
606exclude = {} -- tabout will ignore these filetypes
607})
608
609-- lualine
610local gps = require("nvim-gps")
611gps.setup()
612
613local 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
632require('lualine').setup({
633options = {
634theme = 'auto',
635globalstatus = true,
636refresh = { statusline = 3000, tabline = 3000, winba = 3000 },
637section_separators = '', component_separators = '',
638-- component_separators = { left = '', right = ''},
639-- section_separators = { left = '', right = ''},
640disabled_filetypes = { winbar = { 'nerdtree', 'neo-tree' , 'alpha', 'fugitive', '', 'esearch'} },
641},
642sections = {
643lualine_a = {
644{ 'mode', fmt = function(str) return str:sub(1,1) end, padding = 1 },
645},
646lualine_b = {'branch', 'diff'},
647lualine_c = {
648{ treesitter.statusline }
649},
650lualine_x = {
651-- { 'filename', path = 1, newfile_status = true },
652'fileformat', 'encoding', 'filetype', 'diagnostics',
653},
654lualine_y = {'progress'},
655lualine_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-- },
670winbar = {
671lualine_a = {
672{
673'navic',
674color_correction = 'dynamic',
675navic_opts = {
676highlight = true,
677click = true,
678separator = ' '
679}
680},
681},
682lualine_z = {
683{ 'filename', path = 1, newfile_status = true },
684}
685},
686inactive_winbar = {
687lualine_z = {
688{ 'filename', path = 1, newfile_status = true }
689}
690},
691extensions = {'quickfix', 'fzf', 'nerdtree', 'neo-tree', 'fugitive', 'man', 'trouble'}
692})
693
694-- quickfix
695vim.cmd [[
696packadd cfilter
697]]
698
699-- do not hl cursor in term
700vim.cmd [[
701hi CursorLine cterm=NONE
702]]
703
704-- zsh
705vim.opt.shell = '/bin/zsh -l'
706
707-- fzf
708vim.cmd [[
709set rtp+=/usr/local/opt/fzf
710]]
711
712-- ripgrep
713vim.opt.grepprg = 'rg --color=never'
714end,
715
716packs = {
717telescope = {
718vim_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},
725keymaps = {
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},
739setup = function(self)
740local telescope = require('telescope')
741local actions = require("telescope.actions")
742local action_layout = require("telescope.actions.layout")
743
744require('search').setup({})
745
746telescope.setup({
747defaults = {
748layout_config = { vertical = { width = 0.6 }, horizontal = { width = 0.5 } },
749mappings = {
750i = {
751["<esc>"] = actions.close,
752},
753},
754},
755pickers = {
756buffers = { theme = "dropdown" }, find_files = { theme = "dropdown" }
757},
758extensions = {
759themes = {
760enable_previewer = false, enable_live_preview = true, persist = { enabled = false }, ignore = {},
761layout_config = { horizontal = { width = 0.3, height = 0.5 } },
762},
763-- TODO: setup: https://github.com/otavioschwanck/telescope-alternate.nvim
764["telescope-alternate"] = {
765presets = { 'rails', 'rspec' },
766mappings = {
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
791telescope.load_extension('themes')
792telescope.load_extension('telescope-alternate')
793telescope.load_extension('git_file_history')
794end
795},
796nvim_lint = {
797vim_plug_bundle = {
798'mfussenegger/nvim-lint' -- " TODO: use lsp linter support?
799},
800setup = function(self)
801if type(self.settings.nvim_lint) == 'table' then
802if type(self.settings.nvim_lint.linters_by_ft) == 'table' then
803require('lint').linters_by_ft = self.settings.nvim_lint.linters_by_ft
804
805local pattern = self.settings.nvim_lint.file_pattern or { "*.rb", "*.erb", "*.haml", "*.slim" }
806
807vim.api.nvim_create_autocmd({ "BufWritePost", "BufRead" }, {
808pattern = pattern,
809callback = function()
810require("lint").try_lint()
811end,
812})
813end
814end
815end,
816},
817nvim_treesitter = {
818vim_plug_bundle = {
819'nvim-treesitter/nvim-treesitter',
820'nvim-treesitter/playground',
821'SmiteshP/nvim-gps'
822},
823setup = function(self)
824if type(self.settings.nvim_treesitter) ~= 'table' or type(self.settings.nvim_treesitter.languages) ~= 'table' then return end
825
826require('nvim-treesitter.configs').setup {
827ensure_installed = self.settings.nvim_treesitter.languages,
828sync_install = true,
829auto_install = true,
830highlight = { enable = true }
831}
832end
833},
834alpha_start_dashboard = {
835vim_plug_bundle = {
836'goolord/alpha-nvim'
837},
838autocommands = {
839-- Disable folding on alpha buffer
840{ event = { 'FileType' }, pattern = 'alpha', command = 'setlocal nofoldenable' },
841},
842setup = function(self)
843local alpha = require("alpha")
844local startify = require("alpha.themes.startify")
845
846local title = self.settings.alpha_start_dashboard.title or 'Hello world'
847
848startify.section.header.val = { title }
849
850startify.opts.layout[1].val = 2
851startify.opts.opts.margin = 3
852
853-- disable MRU
854startify.section.mru.val = { { type = "padding", val = 0 } }
855
856local buttons = {}
857
858for _, data in pairs(self.settings.alpha_start_dashboard.buttons or {}) do
859local btn = startify.button(unpack(data))
860table.insert(buttons, btn)
861end
862
863startify.section.top_buttons.val = buttons
864
865-- Send config to alpha
866alpha.setup(startify.config)
867end
868}
869}, -- packs
870}
871