blob: 4a44ebf955e0723dec1285151f059fc25b88bc9d [file] [log] [blame]
Bram Moolenaar8c08b5b2016-07-28 22:24:15 +02001" The default vimrc file.
2"
3" Maintainer: Bram Moolenaar <Bram@vim.org>
Bram Moolenaar88a42052021-11-21 21:13:36 +00004" Last change: 2021 Nov 17
Bram Moolenaar8c08b5b2016-07-28 22:24:15 +02005"
6" This is loaded if no vimrc file was found.
7" Except when Vim is run with "-u NONE" or "-C".
8" Individual settings can be reverted with ":set option&".
9" Other commands can be reverted as mentioned below.
10
11" When started as "evim", evim.vim will already have done these settings.
12if v:progname =~? "evim"
13 finish
14endif
15
Bram Moolenaarb07a82b2016-09-03 20:08:56 +020016" Bail out if something that ran earlier, e.g. a system wide vimrc, does not
17" want Vim to use these default values.
18if exists('skip_defaults_vim')
19 finish
20endif
21
Bram Moolenaar8c08b5b2016-07-28 22:24:15 +020022" Use Vim settings, rather than Vi settings (much better!).
23" This must be first, because it changes other options as a side effect.
Bram Moolenaar0f39a822017-03-16 14:19:36 +010024" Avoid side effects when it was already reset.
25if &compatible
26 set nocompatible
27endif
Bram Moolenaar8c08b5b2016-07-28 22:24:15 +020028
Bram Moolenaar33ccb242017-04-01 16:59:29 +020029" When the +eval feature is missing, the set command above will be skipped.
30" Use a trick to reset compatible only when the +eval feature is missing.
Bram Moolenaar43d1ac62017-04-15 15:37:25 +020031silent! while 0
32 set nocompatible
33silent! endwhile
Bram Moolenaar33ccb242017-04-01 16:59:29 +020034
Bram Moolenaar8c08b5b2016-07-28 22:24:15 +020035" Allow backspacing over everything in insert mode.
36set backspace=indent,eol,start
37
38set history=200 " keep 200 lines of command line history
39set ruler " show the cursor position all the time
40set showcmd " display incomplete commands
41set wildmenu " display completion matches in a status line
42
Bram Moolenaare07e7972016-08-20 19:22:16 +020043set ttimeout " time out for key codes
44set ttimeoutlen=100 " wait up to 100ms after Esc for special key
45
Bram Moolenaarb9a46fe2016-07-29 18:13:42 +020046" Show @@@ in the last line if it is truncated.
47set display=truncate
48
Bram Moolenaar89bcfda2016-08-30 23:26:57 +020049" Show a few lines of context around the cursor. Note that this makes the
50" text scroll if you mouse-click near the start or end of the window.
Bram Moolenaar4427db92016-08-28 14:39:44 +020051set scrolloff=5
52
Bram Moolenaar8c08b5b2016-07-28 22:24:15 +020053" Do incremental searching when it's possible to timeout.
54if has('reltime')
55 set incsearch
56endif
57
58" Do not recognize octal numbers for Ctrl-A and Ctrl-X, most users find it
59" confusing.
60set nrformats-=octal
61
62" For Win32 GUI: remove 't' flag from 'guioptions': no tearoff menu entries.
63if has('win32')
64 set guioptions-=t
65endif
66
67" Don't use Ex mode, use Q for formatting.
68" Revert with ":unmap Q".
69map Q gq
70
71" CTRL-U in insert mode deletes a lot. Use CTRL-G u to first break undo,
72" so that you can undo CTRL-U after inserting a line break.
73" Revert with ":iunmap <C-U>".
74inoremap <C-U> <C-G>u<C-U>
75
76" In many terminal emulators the mouse works just fine. By enabling it you
77" can position the cursor, Visually select and scroll with the mouse.
Bram Moolenaar5b418992019-10-27 18:50:25 +010078" Only xterm can grab the mouse events when using the shift key, for other
79" terminals use ":", select text and press Esc.
Bram Moolenaar8c08b5b2016-07-28 22:24:15 +020080if has('mouse')
Bram Moolenaar5b418992019-10-27 18:50:25 +010081 if &term =~ 'xterm'
82 set mouse=a
83 else
84 set mouse=nvi
85 endif
Bram Moolenaar8c08b5b2016-07-28 22:24:15 +020086endif
87
Bram Moolenaard53931a2019-02-18 21:32:28 +010088" Only do this part when Vim was compiled with the +eval feature.
89if 1
Bram Moolenaar8c08b5b2016-07-28 22:24:15 +020090
Bram Moolenaard53931a2019-02-18 21:32:28 +010091 " Enable file type detection.
92 " Use the default filetype settings, so that mail gets 'tw' set to 72,
93 " 'cindent' is on in C files, etc.
94 " Also load indent files, to automatically do language-dependent indenting.
95 " Revert with ":filetype off".
96 filetype plugin indent on
Bram Moolenaar8c08b5b2016-07-28 22:24:15 +020097
Bram Moolenaard53931a2019-02-18 21:32:28 +010098 " Put these in an autocmd group, so that you can revert them with:
Bram Moolenaar88a42052021-11-21 21:13:36 +000099 " ":augroup vimStartup | exe 'au!' | augroup END"
Bram Moolenaard53931a2019-02-18 21:32:28 +0100100 augroup vimStartup
101 au!
Bram Moolenaar8c08b5b2016-07-28 22:24:15 +0200102
Bram Moolenaard53931a2019-02-18 21:32:28 +0100103 " When editing a file, always jump to the last known cursor position.
104 " Don't do it when the position is invalid, when inside an event handler
105 " (happens when dropping a file on gvim) and for a commit message (it's
106 " likely a different one than last time).
107 autocmd BufReadPost *
108 \ if line("'\"") >= 1 && line("'\"") <= line("$") && &ft !~# 'commit'
109 \ | exe "normal! g`\""
110 \ | endif
111
112 augroup END
113
Egor Zvorykin125ffd22021-11-17 14:01:14 +0000114 " Quite a few people accidentally type "q:" instead of ":q" and get confused
115 " by the command line window. Give a hint about how to get out.
116 " If you don't like this you can put this in your vimrc:
Bram Moolenaar88a42052021-11-21 21:13:36 +0000117 " ":augroup vimHints | exe 'au!' | augroup END"
Egor Zvorykin125ffd22021-11-17 14:01:14 +0000118 augroup vimHints
Bram Moolenaar88a42052021-11-21 21:13:36 +0000119 au!
120 autocmd CmdwinEnter *
Egor Zvorykin125ffd22021-11-17 14:01:14 +0000121 \ echohl Todo |
122 \ echo 'You discovered the command-line window! You can close it with ":q".' |
123 \ echohl None
124 augroup END
125
Bram Moolenaard53931a2019-02-18 21:32:28 +0100126endif
Bram Moolenaar8c08b5b2016-07-28 22:24:15 +0200127
Bram Moolenaar17bb4d42020-09-30 22:45:39 +0200128" Switch syntax highlighting on when the terminal has colors or when using the
129" GUI (which always has colors).
130if &t_Co > 2 || has("gui_running")
131 " Revert with ":syntax off".
132 syntax on
133
134 " I like highlighting strings inside C comments.
135 " Revert with ":unlet c_comment_strings".
136 let c_comment_strings=1
137endif
138
Bram Moolenaar8c08b5b2016-07-28 22:24:15 +0200139" Convenient command to see the difference between the current buffer and the
140" file it was loaded from, thus the changes you made.
141" Only define it when not defined already.
142" Revert with: ":delcommand DiffOrig".
143if !exists(":DiffOrig")
144 command DiffOrig vert new | set bt=nofile | r ++edit # | 0d_ | diffthis
145 \ | wincmd p | diffthis
146endif
147
Bram Moolenaar920694c2016-08-21 17:45:02 +0200148if has('langmap') && exists('+langremap')
Bram Moolenaar8c08b5b2016-07-28 22:24:15 +0200149 " Prevent that the langmap option applies to characters that result from a
Bram Moolenaar920694c2016-08-21 17:45:02 +0200150 " mapping. If set (default), this may break plugins (but it's backward
Bram Moolenaar8c08b5b2016-07-28 22:24:15 +0200151 " compatible).
Bram Moolenaar920694c2016-08-21 17:45:02 +0200152 set nolangremap
Bram Moolenaar8c08b5b2016-07-28 22:24:15 +0200153endif