1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
|
vim.loader.enable(true)
vim.pack.add({
"https://github.com/nvim-treesitter/nvim-treesitter",
}, { confirm = false })
vim.pack.add({
"https://github.com/zenbones-theme/zenbones.nvim",
}, { load = false })
require("mo.zen").setup("seoulbones")
require("vim._extui").enable({})
vim.cmd([[ packadd! nvim.undotree ]])
vim.cmd([[
nnoremap - <Cmd>Ex<CR>
nnoremap <expr> [e '<Cmd>.move --' . v:count1 . '<CR>'
nnoremap <expr> ]e '<Cmd>.move +' . v:count1 . '<CR>'
xnoremap <expr> [e ':move --' . v:count1 . '<CR>gv'
xnoremap <expr> ]e ':move +' . (v:count1 + line('''>') - line('''<')) . '<CR>gv'
function! Sort(type, ...) abort
'[,']sort
call setpos('.', getpos("''"))
endfunction
nnoremap gs m'<Cmd>set operatorfunc=Sort<CR>g@
xnoremap gs :sort<CR>
]])
vim.keymap.set("n", "gK", "K")
vim.o.expandtab = true
vim.o.shiftwidth = 4
vim.o.tabstop = 4
vim.o.breakindent = true
-- Every wrapped line will continue visually indented (same amount of
-- space as the beginning of that line), thus preserving horizontal
-- blocks of text.
vim.o.cinoptions = "l1,:0,g0,E-s,N-s,t0,(s,J1,j1"
-- The 'cinoptions' affect the way 'cindent' reindents lines in a C
-- program.
vim.o.colorcolumn = "+1"
-- 'colorcolumn' is a comma-separated list of screen columns that are
-- highlighted with ColorColumn |hl-ColorColumn|. Useful to align
-- text. Will make screen redrawing slower.
-- The screen column can be an absolute number, or a number preceded with
-- '+' or '-', which is added to or subtracted from 'textwidth'.
-- When 'textwidth' is zero then the items with '-' and '+' are not used.
vim.o.completeopt = "menu,menuone,preview,noselect,fuzzy"
-- 'completeopt' 'cot' string (default "menu,popup")
-- global or local to buffer |global-local|
-- A comma-separated list of options for Insert mode completion
-- |ins-completion|. The supported values are:
--
-- fuzzy Enable |fuzzy-matching| for completion candidates. This
-- allows for more flexible and intuitive matching, where
-- characters can be skipped and matches can be found even
-- if the exact sequence is not typed.
--
-- longest
-- When 'autocomplete' is not active, only the longest common
-- prefix of the matches is inserted. If the popup menu is
-- displayed, you can use CTRL-L to add more characters.
-- Whether case is ignored depends on the type of completion.
-- For buffer text the 'ignorecase' option applies.
--
-- When 'autocomplete' is active and no completion item is
-- selected, the longest common prefix of the matches is
-- inserted after the cursor. The prefix is taken either
-- from all displayed items or only from items in the current
-- buffer. The inserted text is highlighted with
-- |hl-PreInsert|, and the cursor position does not change
-- (similar to `"preinsert"`). Press CTRL-Y to accept.
-- See also |preinserted()|.
--
-- menu Use a popup menu to show the possible completions. The
-- menu is only shown when there is more than one match and
-- sufficient colors are available. |ins-completion-menu|
--
-- menuone Use the popup menu also when there is only one match.
-- Useful when there is additional information about the
-- match, e.g., what file it comes from.
--
-- nearest Matches are listed based on their proximity to the cursor
-- position, unlike the default behavior, which only
-- considers proximity for matches appearing below the
-- cursor. This applies only to matches from the current
-- buffer. No effect if "fuzzy" is present.
--
-- noinsert Do not insert any text for a match until the user selects
-- a match from the menu. Only works in combination with
-- "menu" or "menuone". No effect if "longest" is present.
--
-- noselect Same as "noinsert", except that no menu item is
-- pre-selected. If both "noinsert" and "noselect" are
-- present, "noselect" takes precedence. This is enabled
-- automatically when 'autocomplete' is on, unless
-- "preinsert" is also enabled.
--
-- nosort Disable sorting of completion candidates based on fuzzy
-- scores when "fuzzy" is enabled. Candidates will appear
-- in their original order.
--
-- popup Show extra information about the currently selected
-- completion in a popup window. Only works in combination
-- with "menu" or "menuone". Overrides "preview".
--
-- preinsert
-- Inserts the text of the first completion candidate beyond
-- the current leader, highlighted with |hl-PreInsert|.
-- The cursor does not move.
-- Requires "fuzzy" to be unset, and either "menuone" in
-- 'completeopt' or 'autocomplete' enabled. When
-- 'autocomplete' is enabled, this does not work if
-- 'ignorecase' is set without 'infercase'.
-- See also |preinserted()|.
--
-- preview Show extra information about the currently selected
-- completion in the preview window. Only works in
-- combination with "menu" or "menuone".
--
-- Only "fuzzy", "longest", "popup", "preinsert" and "preview" have an
-- effect when 'autocomplete' is enabled.
--
-- This option does not apply to |cmdline-completion|. See 'wildoptions'
-- for that.
vim.opt.cpoptions:remove("~")
-- 'cpoptions' 'cpo' string (default "aABceFs_")
-- global
-- A sequence of single character flags. When a character is present
-- this indicates Vi-compatible behavior. This is used for things where
-- not being Vi-compatible is mostly or sometimes preferred.
-- 'cpoptions' stands for "compatible-options".
-- Commas can be added for readability.
-- To avoid problems with flags that are added in the future, use the
-- "+=" and "-=" feature of ":set" |add-option-flags|.
vim.o.cursorline = true
vim.o.cursorlineopt = "number"
vim.o.foldlevelstart = 99
-- 'foldlevelstart' 'fdls' number (default -1)
-- global
-- Sets 'foldlevel' when starting to edit another buffer in a window.
-- Useful to always start editing with all folds closed (value zero),
-- some folds closed (one) or no folds closed (99).
-- This is done before reading any modeline, thus a setting in a modeline
-- overrules this option. Starting to edit a file for |diff-mode| also
-- ignores this option and closes all folds.
-- It is also done before BufReadPre autocommands, to allow an autocmd to
-- overrule the 'foldlevel' value for specific files.
-- When the value is negative, it is not used.
vim.o.foldtext = ""
-- 'foldtext' 'fdt' string (default "foldtext()")
-- local to window
-- An expression which is used to specify the text displayed for a closed
-- fold. The context is set to the script where 'foldexpr' was set,
-- script-local items can be accessed. See |fold-foldtext| for the
-- usage.
--
-- The expression will be evaluated in the |sandbox| if set from a
-- modeline, see |sandbox-option|.
-- This option cannot be set in a modeline when 'modelineexpr' is off.
--
-- It is not allowed to change text or jump to another window while
-- evaluating 'foldtext' |textlock|.
--
-- When set to an empty string, foldtext is disabled, and the line
-- is displayed normally with highlighting and no line wrapping.
vim.o.ignorecase = true
-- 'ignorecase' 'ic' boolean (default off)
-- global
-- Ignore case in search patterns, |cmdline-completion|, when
-- searching in the tags file, |expr-==| and for Insert-mode completion
-- |ins-completion|.
-- Also see 'smartcase' and 'tagcase'.
-- Can be overruled by using "\c" or "\C" in the pattern, see
-- |/ignorecase|.
vim.o.smartcase = true
-- Override the 'ignorecase' option if the search pattern contains upper
-- case characters. Only used when the search pattern is typed and
-- 'ignorecase' option is on. Used for the commands "/", "?", "n", "N",
-- ":g" and ":s" and when filtering matches for the completion menu
-- |compl-states|.
-- Not used for "*", "#", "gd", tag search, etc. After "*" and "#" you
-- can make 'smartcase' used by doing a "/" command, recalling the search
-- pattern from history and hitting <Enter>.
vim.o.jumpoptions = "view,clean"
-- 'jumpoptions' 'jop' string (default "clean")
-- global
-- List of words that change the behavior of the |jumplist|.
-- stack Make the jumplist behave like the tagstack.
-- Relative location of entries in the jumplist is
-- preserved at the cost of discarding subsequent entries
-- when navigating backwards in the jumplist and then
-- jumping to a location. |jumplist-stack|
--
-- view When moving through the jumplist, |changelist|,
-- |alternate-file|, using |mark-motions| or when popping
-- the |tagstack| try to restore the |mark-view| in which
-- the action occurred.
--
-- clean Remove unloaded buffers from the jumplist.
-- EXPERIMENTAL: this flag may change in the future.
vim.o.linebreak = true
-- 'linebreak' 'lbr' boolean (default off)
-- local to window
-- If on, Vim will wrap long lines at a character in 'breakat' rather
-- than at the last character that fits on the screen. Unlike
-- 'wrapmargin' and 'textwidth', this does not insert <EOL>s in the file,
-- it only affects the way the file is displayed, not its contents.
-- If 'breakindent' is set, line is visually indented. Then, the value
-- of 'showbreak' is used to put in front of wrapped lines. This option
-- is not used when the 'wrap' option is off.
-- Note that <Tab> characters after an <EOL> are mostly not displayed
-- with the right amount of white space.
vim.o.list = true
-- 'list' boolean (default off)
-- local to window
-- List mode: By default, show tabs as ">", trailing spaces as "-", and
-- non-breakable space characters as "+". Useful to see the difference
-- between tabs and spaces and for trailing blanks. Further changed by
-- the 'listchars' option.
--
-- When 'listchars' does not contain "tab" field, tabs are shown as "^I"
-- or "<09>", like how unprintable characters are displayed.
--
-- The cursor is displayed at the start of the space a Tab character
-- occupies, not at the end as usual in Normal mode. To get this cursor
-- position while displaying Tabs with spaces, use: >vim
-- set list lcs=tab:\ \
-- <
-- Note that list mode will also affect formatting (set with 'textwidth'
-- or 'wrapmargin') when 'cpoptions' includes 'L'. See 'listchars' for
-- changing the way tabs are displayed.
vim.opt.listchars:append("precedes:<", "extends:>")
-- 'listchars' 'lcs' string (default "tab:> ,trail:-,nbsp:+")
-- global or local to window |global-local|
-- Strings to use in 'list' mode and for the |:list| command. It is a
-- comma-separated list of string settings. *E1511*
--
-- *lcs-eol*
-- eol:c Character to show at the end of each line. When
-- omitted, there is no extra character at the end of the
-- line.
-- *lcs-tab*
-- tab:xy[z] Two or three characters to be used to show a tab.
-- The third character is optional.
--
-- tab:xy The 'x' is always used, then 'y' as many times as will
-- fit. Thus "tab:>-" displays: >
-- >
-- >-
-- >--
-- etc.
-- <
-- tab:xyz The 'z' is always used, then 'x' is prepended, and
-- then 'y' is used as many times as will fit. Thus
-- "tab:<->" displays: >
-- >
-- <>
-- <->
-- <-->
-- etc.
-- <
-- When "tab:" is omitted, a tab is shown as ^I.
-- *lcs-space*
-- space:c Character to show for a space. When omitted, spaces
-- are left blank.
-- *lcs-multispace*
-- multispace:c...
-- One or more characters to use cyclically to show for
-- multiple consecutive spaces. Overrides the "space"
-- setting, except for single spaces. When omitted, the
-- "space" setting is used. For example,
-- `:set listchars=multispace:---+` shows ten consecutive
-- spaces as: >
-- ---+---+--
-- <
-- *lcs-lead*
-- lead:c Character to show for leading spaces. When omitted,
-- leading spaces are blank. Overrides the "space" and
-- "multispace" settings for leading spaces. You can
-- combine it with "tab:", for example: >vim
-- set listchars+=tab:>-,lead:.
-- <
-- *lcs-leadmultispace*
-- leadmultispace:c...
-- Like the |lcs-multispace| value, but for leading
-- spaces only. Also overrides |lcs-lead| for leading
-- multiple spaces.
-- `:set listchars=leadmultispace:---+` shows ten
-- consecutive leading spaces as: >
-- ---+---+--XXX
-- <
-- Where "XXX" denotes the first non-blank characters in
-- the line.
-- *lcs-trail*
-- trail:c Character to show for trailing spaces. When omitted,
-- trailing spaces are blank. Overrides the "space" and
-- "multispace" settings for trailing spaces.
-- *lcs-extends*
-- extends:c Character to show in the last column, when 'wrap' is
-- off and the line continues beyond the right of the
-- screen.
-- *lcs-precedes*
-- precedes:c Character to show in the first visible column of the
-- physical line, when there is text preceding the
-- character visible in the first column.
-- *lcs-conceal*
-- conceal:c Character to show in place of concealed text, when
-- 'conceallevel' is set to 1. A space when omitted.
-- *lcs-nbsp*
-- nbsp:c Character to show for a non-breakable space character
-- (0xA0 (160 decimal) and U+202F). Left blank when
-- omitted.
--
-- The characters ':' and ',' should not be used. UTF-8 characters can
-- be used. All characters must be single width. *E1512*
--
-- Each character can be specified as hex: >vim
-- set listchars=eol:\\x24
-- set listchars=eol:\\u21b5
-- set listchars=eol:\\U000021b5
-- < Note that a double backslash is used. The number of hex characters
-- must be exactly 2 for \\x, 4 for \\u and 8 for \\U.
--
-- Examples: >vim
-- set lcs=tab:>-,trail:-
-- set lcs=tab:>-,eol:<,nbsp:%
-- set lcs=extends:>,precedes:<
-- < |hl-NonText| highlighting will be used for "eol", "extends" and
-- "precedes". |hl-Whitespace| for "nbsp", "space", "tab", "multispace",
-- "lead" and "trail".
vim.o.number = true
vim.o.pumheight = 10
-- 'pumheight' 'ph' number (default 0)
-- global
-- Maximum number of items to show in the popup menu
-- (|ins-completion-menu|). Zero means "use available screen space".
vim.o.scrolloff = 2
-- 'scrolloff' 'so' number (default 0)
-- global or local to window |global-local|
-- Minimal number of screen lines to keep above and below the cursor.
-- This will make some context visible around where you are working. If
-- you set it to a very large value (999) the cursor line will always be
-- in the middle of the window (except at the start or end of the file or
-- when long lines wrap).
-- After using the local value, go back the global value with one of
-- these two: >vim
-- setlocal scrolloff<
-- setlocal scrolloff=-1
-- < For scrolling horizontally see 'sidescrolloff'.
vim.o.shada =
"'100,<50,s10,:100,/100,h,r/tmp/,r/private/,rfugitive:,rzipfile:,rterm:"
-- 'shada' 'sd' string (default for
-- Win32: !,'100,<50,s10,h,rA:,rB:
-- others: !,'100,<50,s10,h)
-- global
-- When non-empty, the shada file is read upon startup and written
-- when exiting Vim (see |shada-file|). The string should be a comma-
-- separated list of parameters, each consisting of a single character
-- identifying the particular parameter, followed by a number or string
-- which specifies the value of that parameter. If a particular
-- character is left out, then the default value is used for that
-- parameter. The following is a list of the identifying characters and
-- the effect of their value.
-- CHAR VALUE ~
-- *shada-!*
-- ! When included, save and restore global variables that start
-- with an uppercase letter, and don't contain a lowercase
-- letter. Thus "KEEPTHIS and "K_L_M" are stored, but "KeepThis"
-- and "_K_L_M" are not. Nested List and Dict items may not be
-- read back correctly, you end up with an empty item.
-- *shada-quote*
-- " Maximum number of lines saved for each register. Old name of
-- the '<' item, with the disadvantage that you need to put a
-- backslash before the ", otherwise it will be recognized as the
-- start of a comment!
-- *shada-%*
-- % When included, save and restore the buffer list. If Vim is
-- started with a file name argument, the buffer list is not
-- restored. If Vim is started without a file name argument, the
-- buffer list is restored from the shada file. Quickfix
-- ('buftype'), unlisted ('buflisted'), unnamed and buffers on
-- removable media (|shada-r|) are not saved.
-- When followed by a number, the number specifies the maximum
-- number of buffers that are stored. Without a number all
-- buffers are stored.
-- *shada-'*
-- ' Maximum number of previously edited files for which the marks
-- are remembered. This parameter must always be included when
-- 'shada' is non-empty.
-- If non-zero, then the |jumplist| and the |changelist| are also
-- stored in the shada file.
-- *shada-/*
-- / Maximum number of items in the search pattern history to be
-- saved. If non-zero, then the previous search and substitute
-- patterns are also saved. When not included, the value of
-- 'history' is used.
-- *shada-:*
-- : Maximum number of items in the command-line history to be
-- saved. When not included, the value of 'history' is used.
-- *shada-<*
-- < Maximum number of lines saved for each register. If zero then
-- registers are not saved. When not included, all lines are
-- saved. '"' is the old name for this item.
-- Also see the 's' item below: limit specified in KiB.
-- *shada-@*
-- @ Maximum number of items in the input-line history to be
-- saved. When not included, the value of 'history' is used.
-- *shada-c*
-- c Dummy option, kept for compatibility reasons. Has no actual
-- effect: ShaDa always uses UTF-8 and 'encoding' value is fixed
-- to UTF-8 as well.
-- *shada-f*
-- f Whether file marks need to be stored. If zero, file marks ('0
-- to '9, 'A to 'Z) are not stored. When not present or when
-- non-zero, they are all stored. '0 is used for the current
-- cursor position (when exiting or when doing |:wshada|).
-- *shada-h*
-- h Disable the effect of 'hlsearch' when loading the shada
-- file. When not included, it depends on whether ":nohlsearch"
-- has been used since the last search command.
-- *shada-n*
-- n Name of the shada file. The name must immediately follow
-- the 'n'. Must be at the end of the option! If the
-- 'shadafile' option is set, that file name overrides the one
-- given here with 'shada'. Environment variables are
-- expanded when opening the file, not when setting the option.
-- *shada-r*
-- r Removable media. The argument is a string (up to the next
-- ','). This parameter can be given several times. Each
-- specifies the start of a path for which no marks will be
-- stored. This is to avoid removable media. For Windows you
-- could use "ra:,rb:". You can also use it for temp files,
-- e.g., for Unix: "r/tmp". Case is ignored.
-- *shada-s*
-- s Maximum size of an item contents in KiB. If zero then nothing
-- is saved. Unlike Vim this applies to all items, except for
-- the buffer list and header. Full item size is off by three
-- unsigned integers: with `s10` maximum item size may be 1 byte
-- (type: 7-bit integer) + 9 bytes (timestamp: up to 64-bit
-- integer) + 3 bytes (item size: up to 16-bit integer because
-- 2^8 < 10240 < 2^16) + 10240 bytes (requested maximum item
-- contents size) = 10253 bytes.
--
-- Example: >vim
-- set shada='50,<1000,s100,:0,n~/nvim/shada
-- <
-- '50 Marks will be remembered for the last 50 files you
-- edited.
-- <1000 Contents of registers (up to 1000 lines each) will be
-- remembered.
-- s100 Items with contents occupying more then 100 KiB are
-- skipped.
-- :0 Command-line history will not be saved.
-- n~/nvim/shada The name of the file to use is "~/nvim/shada".
-- no / Since '/' is not specified, the default will be used,
-- that is, save all of the search history, and also the
-- previous search and substitute patterns.
-- no % The buffer list will not be saved nor read back.
-- no h 'hlsearch' highlighting will be restored.
--
-- When setting 'shada' from an empty value you can use |:rshada| to
-- load the contents of the file, this is not done automatically.
--
-- This option cannot be set from a |modeline| or in the |sandbox|, for
-- security reasons.
vim.o.sidescrolloff = 5
-- 'sidescrolloff' 'siso' number (default 0)
-- global or local to window |global-local|
-- The minimal number of screen columns to keep to the left and to the
-- right of the cursor if 'nowrap' is set. Setting this option to a
-- value greater than 0 while having 'sidescroll' also at a non-zero
-- value makes some context visible in the line you are scrolling in
-- horizontally (except at beginning of the line). Setting this option
-- to a large value (like 999) has the effect of keeping the cursor
-- horizontally centered in the window, as long as one does not come too
-- close to the beginning of the line.
-- After using the local value, go back the global value with one of
-- these two: >vim
-- setlocal sidescrolloff<
-- setlocal sidescrolloff=-1
-- <
-- Example: Try this together with 'sidescroll' and 'listchars' as in the
-- following example to never allow the cursor to move onto the
-- "extends" character: >vim
--
-- set nowrap sidescroll=1 listchars=extends:>,precedes:<
-- set sidescrolloff=1
-- <
vim.o.smartcase = true
-- 'smartcase' 'scs' boolean (default off)
-- global
-- Override the 'ignorecase' option if the search pattern contains upper
-- case characters. Only used when the search pattern is typed and
-- 'ignorecase' option is on. Used for the commands "/", "?", "n", "N",
-- ":g" and ":s" and when filtering matches for the completion menu
-- |compl-states|.
-- Not used for "*", "#", "gd", tag search, etc. After "*" and "#" you
-- can make 'smartcase' used by doing a "/" command, recalling the search
-- pattern from history and hitting <Enter>.
vim.o.smoothscroll = true
-- 'smoothscroll' 'sms' boolean (default off)
-- local to window
-- Scrolling works with screen lines. When 'wrap' is set and the first
-- line in the window wraps part of it may not be visible, as if it is
-- above the window. "<<<" is displayed at the start of the first line,
-- highlighted with |hl-NonText|.
-- You may also want to add "lastline" to the 'display' option to show as
-- much of the last line as possible.
-- NOTE: partly implemented, doesn't work yet for |gj| and |gk|.
vim.o.splitright = true
-- 'splitright' 'spr' boolean (default off)
-- global
-- When on, splitting a window will put the new window right of the
-- current one. |:vsplit|
vim.o.statuscolumn = "%s%=%l%{%&nu||&rnu?'%#WinSeparator#│':''%}"
-- 'statuscolumn' 'stc' string (default "")
-- local to window
-- When non-empty, this option determines the content of the area to the
-- side of a window, normally containing the fold, sign and number columns.
-- The format of this option is like that of 'statusline'.
--
-- Some of the items from the 'statusline' format are different for
-- 'statuscolumn':
--
-- %l line number column for currently drawn line
-- %s sign column for currently drawn line
-- %C fold column for currently drawn line
--
-- The 'statuscolumn' width follows that of the default columns and
-- adapts to the 'numberwidth', 'signcolumn' and 'foldcolumn' option values
-- (regardless of whether the sign and fold items are present).
-- Additionally, the 'statuscolumn' grows with the size of the evaluated
-- format string, up to a point (following the maximum size of the default
-- fold, sign and number columns). Shrinking only happens when the number
-- of lines in a buffer changes, or the 'statuscolumn' option is set.
--
-- The |v:lnum| variable holds the line number to be drawn.
-- The |v:relnum| variable holds the relative line number to be drawn.
-- The |v:virtnum| variable is negative when drawing virtual lines, zero
-- when drawing the actual buffer line, and positive when
-- drawing the wrapped part of a buffer line.
--
-- When using |v:relnum|, keep in mind that cursor movement by itself will
-- not cause the 'statuscolumn' to update unless 'relativenumber' is set.
--
-- NOTE: The %@ click execute function item is supported as well but the
-- specified function will be the same for each row in the same column.
-- It cannot be switched out through a dynamic 'statuscolumn' format, the
-- handler should be written with this in mind.
--
-- Examples: >vim
-- " Line number with bar separator and click handlers:
-- set statuscolumn=%@SignCb@%s%=%T%@NumCb@%l│%T
--
-- " Line numbers in hexadecimal for non wrapped part of lines:
-- let &stc='%=%{v:virtnum>0?"":printf("%x",v:lnum)} '
--
-- " Human readable line numbers with thousands separator:
-- let &stc='%{substitute(v:lnum,"\\d\\zs\\ze\\'
-- . '%(\\d\\d\\d\\)\\+$",",","g")}'
--
-- " Both relative and absolute line numbers with different
-- " highlighting for odd and even relative numbers:
-- let &stc='%#NonText#%{&nu?v:lnum:""}' .
-- '%=%{&rnu&&(v:lnum%2)?"\ ".v:relnum:""}' .
-- '%#LineNr#%{&rnu&&!(v:lnum%2)?"\ ".v:relnum:""}'
--
-- < WARNING: this expression is evaluated for each screen line so defining
-- an expensive expression can negatively affect render performance.
--
vim.o.tagcase = "match"
-- 'tagcase' 'tc' string (default "followic")
-- global or local to buffer |global-local|
-- This option specifies how case is handled when searching the tags
-- file:
-- followic Follow the 'ignorecase' option
-- followscs Follow the 'smartcase' and 'ignorecase' options
-- ignore Ignore case
-- match Match case
-- smart Ignore case unless an upper case letter is used
vim.o.title = true
-- 'title' boolean (default off)
-- global
-- When on, the title of the window will be set to the value of
-- 'titlestring' (if it is not empty), or to:
-- filename [+=-] (path) - Nvim
-- Where:
-- filename the name of the file being edited
-- - indicates the file cannot be modified, 'ma' off
-- + indicates the file was modified
-- = indicates the file is read-only
-- =+ indicates the file is read-only and modified
-- (path) is the path of the file being edited
-- - Nvim the server name |v:servername| or "Nvim"
vim.o.undofile = true
-- 'undofile' 'udf' boolean (default off)
-- local to buffer
-- When on, Vim automatically saves undo history to an undo file when
-- writing a buffer to a file, and restores undo history from the same
-- file on buffer read.
-- The directory where the undo file is stored is specified by 'undodir'.
-- For more information about this feature see |undo-persistence|.
-- The undo file is not read when 'undoreload' causes the buffer from
-- before a reload to be saved for undo.
-- When 'undofile' is turned off the undo file is NOT deleted.
vim.o.updatetime = 250
-- 'updatetime' 'ut' number (default 4000)
-- global
-- If this many milliseconds nothing is typed the swap file will be
-- written to disk (see |crash-recovery|). Also used for the
-- |CursorHold| autocommand event.
vim.opt.wildignore:append({ "*.pyc", "__pycache__", "*~", "#*#", "*.o" })
-- 'wildignore' 'wig' string (default "")
-- global
-- A list of file patterns. A file that matches with one of these
-- patterns is ignored when expanding |wildcards|, completing file or
-- directory names, and influences the result of |expand()|, |glob()| and
-- |globpath()| unless a flag is passed to disable this.
-- The pattern is used like with |:autocmd|, see |autocmd-pattern|.
-- Also see 'suffixes'.
-- Example: >vim
-- set wildignore=*.o,*.obj
-- < The use of |:set+=| and |:set-=| is preferred when adding or removing
-- a pattern from the list. This avoids problems when a future version
-- uses another default.
vim.o.wildignorecase = true
-- 'wildignorecase' 'wic' boolean (default off)
-- global
-- When set case is ignored when completing file names and directories.
-- Has no effect when 'fileignorecase' is set.
-- Does not apply when the shell is used to expand wildcards, which
-- happens when there are special characters.
vim.o.wildmode = "longest:full,full"
-- 'wildmode' 'wim' string (default "full")
-- global
-- Completion mode used for the character specified with 'wildchar'.
-- This option is a comma-separated list of up to four parts,
-- corresponding to the first, second, third, and fourth presses of
-- 'wildchar'. Each part is a colon-separated list of completion
-- behaviors, which are applied simultaneously during that phase.
--
-- The possible behavior values are:
-- "" Only complete (insert) the first match. No further
-- matches are cycled or listed.
-- "full" Complete the next full match. Cycles through all
-- matches, returning to the original input after the
-- last match. If 'wildmenu' is enabled, it will be
-- shown.
-- "longest" Complete to the longest common substring. If this
-- doesn't extend the input, the next 'wildmode' part is
-- used.
-- "list" If multiple matches are found, list all of them.
-- "lastused" When completing buffer names, sort them by most
-- recently used (excluding the current buffer). Only
-- applies to buffer name completion.
-- "noselect" If 'wildmenu' is enabled, show the menu but do not
-- preselect the first item.
-- If only one match exists, it is completed fully, unless "noselect" is
-- specified.
--
-- Some useful combinations of colon-separated values:
-- "longest:full" Start with the longest common string and show
-- 'wildmenu' (if enabled). Does not cycle
-- through full matches.
-- "list:full" List all matches and complete first match.
-- "list:longest" List all matches and complete till the longest
-- common prefix.
-- "list:lastused" List all matches. When completing buffers,
-- sort them by most recently used (excluding the
-- current buffer).
-- "noselect:lastused" Do not preselect the first item in 'wildmenu'
-- if it is active. When completing buffers,
-- sort them by most recently used (excluding the
-- current buffer).
--
-- Examples: >vim
-- set wildmode=full
-- < Complete full match on every press (default behavior) >vim
-- set wildmode=longest,full
-- < First press: longest common substring
-- Second press: cycle through full matches >vim
-- set wildmode=list:full
-- < First press: list all matches and complete the first one >vim
-- set wildmode=list,full
-- < First press: list matches only
-- Second press: complete full matches >vim
-- set wildmode=longest,list
-- < First press: longest common substring
-- Second press: list all matches >vim
-- set wildmode=noselect:full
-- < First press: show 'wildmenu' without completing or selecting
-- Second press: cycle full matches >vim
-- set wildmode=noselect:lastused,full
-- < Same as above, but buffer matches are sorted by time last used
-- More info here: |cmdline-completion|.
vim.o.winborder = "none"
-- 'winborder' string (default "")
-- global
-- Defines the default border style of floating windows. The default value
-- is empty, which is equivalent to "none". Valid values include:
-- - "bold": Bold line box.
-- - "double": Double-line box.
-- - "none": No border.
-- - "rounded": Like "single", but with rounded corners ("╭" etc.).
-- - "shadow": Drop shadow effect, by blending with the background.
-- - "single": Single-line box.
-- - "solid": Adds padding by a single whitespace cell.
-- - custom: comma-separated list of exactly 8 characters in clockwise
-- order starting from topleft. Example: >lua
-- vim.o.winborder='+,-,+,|,+,-,+,|'
-- <
|