On my Raspberry Pi, I have a global configuration file at
/etc/vim/vimrc. I also have a file at
/etc/vimrc. I've tried modifying this second file, probably because I read somewhere that this is where to modify a global vimrc file for the system, but it hasn't made the expected changes. (Specifically,
set hlsearch.) I'd prefer not to modify that giant global file located at the first filepath, but rather to modify the 'next' configuration file that takes effect globally. How would I do this?
Bonus points: is the file at
/etc/vimrc in completely the wrong spot? If so, where should I put it?
Extra info: I want to modify the global configuration file so that I have identical behaviors if I'm modifying files as root (via sudo or su).
Edit to add:
:version VIM - Vi IMproved 7.4 (2013 Aug 10, compiled May 7 2017 07:53:41) Included patches: 1-488, 576 Extra patches: 8.0.0378, 8.0.0377, 8.0.0322, 8.0.0056 Modified by email@example.com Compiled by buildd@ Huge version without GUI. Features included (+) or not (-): +acl +comments +ex_extra +jumplist -mouseshape +path_extra +signs +textobjects +writebackup +arabic +conceal +extra_search +keymap +mouse_dec -perl +smartindent +title -X11 +autocmd +cryptv +farsi +langmap +mouse_gpm +persistent_undo -sniff -toolbar -xfontset -balloon_eval +cscope +file_in_path +libcall -mouse_jsbterm +postscript +startuptime +user_commands -xim -browse +cursorbind +find_in_path +linebreak +mouse_netterm +printer +statusline +vertsplit -xsmp ++builtin_terms +cursorshape +float +lispindent +mouse_sgr +profile -sun_workshop +virtualedit -xterm_clipboard +byte_offset +dialog_con +folding +listcmds -mouse_sysmouse -python +syntax +visual -xterm_save +cindent +diff -footer +localmap +mouse_urxvt -python3 +tag_binary +visualextra -xpm -clientserver +digraphs +fork() -lua +mouse_xterm +quickfix +tag_old_static +viminfo -clipboard -dnd +gettext +menu +multi_byte +reltime -tag_any_white +vreplace +cmdline_compl -ebcdic -hangul_input +mksession +multi_lang +rightleft -tcl +wildignore +cmdline_hist +emacs_tags +iconv +modify_fname -mzscheme -ruby +terminfo +wildmenu +cmdline_info +eval +insert_expand +mouse +netbeans_intg +scrollbind +termresponse +windows system vimrc file: "$VIM/vimrc" user vimrc file: "$HOME/.vimrc" 2nd user vimrc file: "~/.vim/vimrc" user exrc file: "$HOME/.exrc" fall-back for $VIM: "/usr/share/vim" Compilation: gcc -c -I. -Iproto -DHAVE_CONFIG_H -g -O2 -fPIE -fstack-protector-strong -Wformat -Werror=format-security -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1 Linking: gcc -fPIE -pie -Wl,-z,relro -Wl,-z,now -Wl,--as-needed -o vim -lm -ltinfo -lnsl -lselinux -lacl -lattr -lgpm -ldl Press ENTER or type command to continue
:help system-vimrc *system-vimrc* b. For Unix, MS-DOS, MS-Windows, OS/2, VMS, Macintosh, RISC-OS and Amiga the system vimrc file is read for initializations. The path of this file is shown with the ":version" command. Mostly it's "$VIM/vimrc". Note that this file is ALWAYS read in 'compatible' mode, since the automatic resetting of 'compatible' is only done later. Add a ":set nocp" command if you like. For the Macintosh the $VIMRUNTIME/macmap.vim is read.
When I run
cd $VIM pwd moves to
/usr/share/vim... but on a whim I checked that directory...
user@raspberrypi:~ $ ls -la /usr/share/vim/ total 20 drwxr-xr-x 5 root root 4096 Feb 20 22:33 . drwxr-xr-x 193 root root 4096 Jul 19 17:51 .. drwxr-xr-x 4 root root 4096 Apr 8 2017 addons drwxr-xr-x 2 root root 4096 Feb 20 22:33 registry drwxr-xr-x 16 root root 4096 Feb 20 22:33 vim74 lrwxrwxrwx 1 root root 8 Apr 12 2015 vimfiles -> /etc/vim lrwxrwxrwx 1 root root 14 May 7 2017 vimrc -> /etc/vim/vimrc lrwxrwxrwx 1 root root 19 May 7 2017 vimrc.tiny -> /etc/vim/vimrc.tiny user@raspberrypi:~ $
... and tada:
$VIM/vimrc is symlinked to
/etc/vim/vimrc. So now I know which file is being sourced as the
$VIMRC file. Unfortunately, the next help section below
system-vimrc tells me...
*VIMINIT* *.vimrc* *_vimrc* *EXINIT* *.exrc* *_exrc* *$MYVIMRC* c. Four places are searched for initializations. The first that exists is used, the others are ignored. The $MYVIMRC environment variable is set to the file that was first found, unless $MYVIMRC was already set and when using VIMINIT. - The environment variable VIMINIT (see also |compatible-default|) (*) The value of $VIMINIT is used as an Ex command line. - The user vimrc file(s): "$HOME/.vimrc" (for Unix and OS/2) (*) "$HOME/.vim/vimrc" (for Unix and OS/2) (*) "s:.vimrc" (for Amiga) (*) "home:.vimrc" (for Amiga) (*) "home:vimfiles:vimrc" (for Amiga) (*) "$VIM/.vimrc" (for OS/2 and Amiga) (*) "$HOME/_vimrc" (for MS-DOS and Win32) (*) "$HOME/vimfiles/vimrc" (for MS-DOS and Win32) (*) "$VIM/_vimrc" (for MS-DOS and Win32) (*) Note: For Unix, OS/2 and Amiga, when ".vimrc" does not exist, "_vimrc" is also tried, in case an MS-DOS compatible file system is used. For MS-DOS and Win32 ".vimrc" is checked after "_vimrc", in case long file names are used. Note: For MS-DOS and Win32, "$HOME" is checked first. If no "_vimrc" or ".vimrc" is found there, "$VIM" is tried. See |$VIM| for when $VIM is not set. - The environment variable EXINIT. The value of $EXINIT is used as an Ex command line. - The user exrc file(s). Same as for the user vimrc file, but with "vimrc" replaced by "exrc". But only one of ".exrc" and "_exrc" is used, depending on the system. And without the (*)!
The first that exists is used, the others are ignored. when it comes to configuration files. So it would seem, then, that there is no way for a file to be sourced by all instances of vim, after the global vim config file is sourced, aside from the user's vim configuration file.
So then the question becomes: is it poor practice to symlink multiple users' .vimrc files to one user's .vimrc file? Because that seems to be the only way to modify a configuration file which is not the
/etc/vim/vimrc gargantuan monster which I want to avoid touching (and thus risk breaking).