blob: 4e58233ea539ddc45235d2d8766ef0d9e6868e6b [file] [log] [blame]
Bram Moolenaar8c08b5b2016-07-28 22:24:15 +02001" The default vimrc file.
2"
Christian Brabandte978b452023-08-13 10:33:05 +02003" Maintainer: The Vim Project <https://github.com/vim/vim>
Yegappan Lakshmanana54816b2024-11-03 10:49:23 +01004" Last Change: 2024 Nov 03
Christian Brabandte978b452023-08-13 10:33:05 +02005" Former Maintainer: Bram Moolenaar <Bram@vim.org>
Bram Moolenaar8c08b5b2016-07-28 22:24:15 +02006"
7" This is loaded if no vimrc file was found.
8" Except when Vim is run with "-u NONE" or "-C".
9" Individual settings can be reverted with ":set option&".
10" Other commands can be reverted as mentioned below.
11
12" When started as "evim", evim.vim will already have done these settings.
13if v:progname =~? "evim"
14 finish
15endif
16
Bram Moolenaarb07a82b2016-09-03 20:08:56 +020017" Bail out if something that ran earlier, e.g. a system wide vimrc, does not
18" want Vim to use these default values.
19if exists('skip_defaults_vim')
20 finish
21endif
22
Bram Moolenaar8c08b5b2016-07-28 22:24:15 +020023" Use Vim settings, rather than Vi settings (much better!).
24" This must be first, because it changes other options as a side effect.
Bram Moolenaar0f39a822017-03-16 14:19:36 +010025" Avoid side effects when it was already reset.
26if &compatible
27 set nocompatible
28endif
Bram Moolenaar8c08b5b2016-07-28 22:24:15 +020029
Bram Moolenaar33ccb242017-04-01 16:59:29 +020030" When the +eval feature is missing, the set command above will be skipped.
31" Use a trick to reset compatible only when the +eval feature is missing.
Bram Moolenaar43d1ac62017-04-15 15:37:25 +020032silent! while 0
33 set nocompatible
34silent! endwhile
Bram Moolenaar33ccb242017-04-01 16:59:29 +020035
Bram Moolenaar8c08b5b2016-07-28 22:24:15 +020036" Allow backspacing over everything in insert mode.
37set backspace=indent,eol,start
38
39set history=200 " keep 200 lines of command line history
40set ruler " show the cursor position all the time
41set showcmd " display incomplete commands
42set wildmenu " display completion matches in a status line
43
Bram Moolenaare07e7972016-08-20 19:22:16 +020044set ttimeout " time out for key codes
45set ttimeoutlen=100 " wait up to 100ms after Esc for special key
46
Bram Moolenaarb9a46fe2016-07-29 18:13:42 +020047" Show @@@ in the last line if it is truncated.
48set display=truncate
49
Bram Moolenaar89bcfda2016-08-30 23:26:57 +020050" Show a few lines of context around the cursor. Note that this makes the
51" text scroll if you mouse-click near the start or end of the window.
Bram Moolenaar4427db92016-08-28 14:39:44 +020052set scrolloff=5
53
Bram Moolenaar8c08b5b2016-07-28 22:24:15 +020054" Do incremental searching when it's possible to timeout.
55if has('reltime')
56 set incsearch
57endif
58
59" Do not recognize octal numbers for Ctrl-A and Ctrl-X, most users find it
60" confusing.
61set nrformats-=octal
62
63" For Win32 GUI: remove 't' flag from 'guioptions': no tearoff menu entries.
64if has('win32')
65 set guioptions-=t
66endif
67
Bram Moolenaar1588bc82022-03-08 21:35:07 +000068" Don't use Q for Ex mode, use it for formatting. Except for Select mode.
Bram Moolenaar8c08b5b2016-07-28 22:24:15 +020069" Revert with ":unmap Q".
70map Q gq
Bram Moolenaar1588bc82022-03-08 21:35:07 +000071sunmap Q
Bram Moolenaar8c08b5b2016-07-28 22:24:15 +020072
73" CTRL-U in insert mode deletes a lot. Use CTRL-G u to first break undo,
74" so that you can undo CTRL-U after inserting a line break.
75" Revert with ":iunmap <C-U>".
76inoremap <C-U> <C-G>u<C-U>
77
78" In many terminal emulators the mouse works just fine. By enabling it you
79" can position the cursor, Visually select and scroll with the mouse.
Bram Moolenaar5b418992019-10-27 18:50:25 +010080" Only xterm can grab the mouse events when using the shift key, for other
81" terminals use ":", select text and press Esc.
Bram Moolenaar8c08b5b2016-07-28 22:24:15 +020082if has('mouse')
Bram Moolenaar5b418992019-10-27 18:50:25 +010083 if &term =~ 'xterm'
84 set mouse=a
85 else
86 set mouse=nvi
87 endif
Bram Moolenaar8c08b5b2016-07-28 22:24:15 +020088endif
89
Bram Moolenaard53931a2019-02-18 21:32:28 +010090" Only do this part when Vim was compiled with the +eval feature.
91if 1
Bram Moolenaar8c08b5b2016-07-28 22:24:15 +020092
Bram Moolenaard53931a2019-02-18 21:32:28 +010093 " Enable file type detection.
94 " Use the default filetype settings, so that mail gets 'tw' set to 72,
95 " 'cindent' is on in C files, etc.
96 " Also load indent files, to automatically do language-dependent indenting.
97 " Revert with ":filetype off".
98 filetype plugin indent on
Bram Moolenaar8c08b5b2016-07-28 22:24:15 +020099
Bram Moolenaard53931a2019-02-18 21:32:28 +0100100 " Put these in an autocmd group, so that you can revert them with:
Balkic41b3c92023-07-14 16:59:40 +0000101 " ":autocmd! vimStartup"
Bram Moolenaard53931a2019-02-18 21:32:28 +0100102 augroup vimStartup
Dragan Simic' via vim_dev81b8bf52023-08-09 17:23:58 +0200103 autocmd!
Bram Moolenaar8c08b5b2016-07-28 22:24:15 +0200104
Bram Moolenaard53931a2019-02-18 21:32:28 +0100105 " When editing a file, always jump to the last known cursor position.
106 " Don't do it when the position is invalid, when inside an event handler
Dragan Simic' via vim_dev81b8bf52023-08-09 17:23:58 +0200107 " (happens when dropping a file on gvim), for a commit or rebase message
108 " (likely a different one than last time), and when using xxd(1) to filter
109 " and edit binary files (it transforms input files back and forth, causing
Yegappan Lakshmanana54816b2024-11-03 10:49:23 +0100110 " them to have dual nature, so to speak) or when running the new tutor
Bram Moolenaard53931a2019-02-18 21:32:28 +0100111 autocmd BufReadPost *
Dragan Simic' via vim_dev81b8bf52023-08-09 17:23:58 +0200112 \ let line = line("'\"")
113 \ | if line >= 1 && line <= line("$") && &filetype !~# 'commit'
Yegappan Lakshmanana54816b2024-11-03 10:49:23 +0100114 \ && index(['xxd', 'gitrebase', 'tutor'], &filetype) == -1
Dragan Simic' via vim_dev81b8bf52023-08-09 17:23:58 +0200115 \ | execute "normal! g`\""
Bram Moolenaard53931a2019-02-18 21:32:28 +0100116 \ | endif
117
Christian Brabandt2abec432024-10-27 21:33:09 +0100118 " Set the default background for putty to dark. Putty usually sets the
119 " $TERM to xterm and by default it starts with a dark background which
120 " makes syntax highlighting often hard to read with bg=light
121 " undo this using: ":au! vimStartup TermResponse"
122 autocmd TermResponse * if v:termresponse == "\e[>0;136;0c" | set bg=dark | endif
Bram Moolenaard53931a2019-02-18 21:32:28 +0100123 augroup END
124
Egor Zvorykin125ffd22021-11-17 14:01:14 +0000125 " Quite a few people accidentally type "q:" instead of ":q" and get confused
126 " by the command line window. Give a hint about how to get out.
127 " If you don't like this you can put this in your vimrc:
Balkic41b3c92023-07-14 16:59:40 +0000128 " ":autocmd! vimHints"
Egor Zvorykin125ffd22021-11-17 14:01:14 +0000129 augroup vimHints
Bram Moolenaar88a42052021-11-21 21:13:36 +0000130 au!
131 autocmd CmdwinEnter *
Dragan Simic' via vim_dev81b8bf52023-08-09 17:23:58 +0200132 \ echohl Todo |
Bram Moolenaar65b34862023-05-10 14:47:50 +0100133 \ echo gettext('You discovered the command-line window! You can close it with ":q".') |
Egor Zvorykin125ffd22021-11-17 14:01:14 +0000134 \ echohl None
135 augroup END
136
Bram Moolenaard53931a2019-02-18 21:32:28 +0100137endif
Bram Moolenaar8c08b5b2016-07-28 22:24:15 +0200138
Bram Moolenaar17bb4d42020-09-30 22:45:39 +0200139" Switch syntax highlighting on when the terminal has colors or when using the
140" GUI (which always has colors).
141if &t_Co > 2 || has("gui_running")
142 " Revert with ":syntax off".
143 syntax on
144
145 " I like highlighting strings inside C comments.
146 " Revert with ":unlet c_comment_strings".
147 let c_comment_strings=1
148endif
149
Bram Moolenaar8c08b5b2016-07-28 22:24:15 +0200150" Convenient command to see the difference between the current buffer and the
151" file it was loaded from, thus the changes you made.
152" Only define it when not defined already.
153" Revert with: ":delcommand DiffOrig".
154if !exists(":DiffOrig")
155 command DiffOrig vert new | set bt=nofile | r ++edit # | 0d_ | diffthis
156 \ | wincmd p | diffthis
157endif
158
Bram Moolenaar920694c2016-08-21 17:45:02 +0200159if has('langmap') && exists('+langremap')
Bram Moolenaar8c08b5b2016-07-28 22:24:15 +0200160 " Prevent that the langmap option applies to characters that result from a
Bram Moolenaar920694c2016-08-21 17:45:02 +0200161 " mapping. If set (default), this may break plugins (but it's backward
Bram Moolenaar8c08b5b2016-07-28 22:24:15 +0200162 " compatible).
Bram Moolenaar920694c2016-08-21 17:45:02 +0200163 set nolangremap
Bram Moolenaar8c08b5b2016-07-28 22:24:15 +0200164endif