10

I have my custom Vim files in ~/.vim and settings in ~/.vimrc. However, sometimes I have to edit some files in /etc and such.
If I start Vim like this:

$ sudo vim /etc/rc.conf

I lose my config since Vim uses its default one. So: how can I run Vim with root privileges to edit files without losing my user's settings (which are in my home directory)?
I have tried:

$ su username -c "vim /usr/lib/python2.7/setuptools/dist.py"

but Bash gives me Permission denied. However, the above command works for example for: /etc/acpi/handler.sh. Why is that?

Note: username is not root.

3 Answers 3

18

Instead of sudo vim /etc/rc.conf use sudoedit /etc/rc.conf or sudo -e /etc/rc.conf. You may need to set the EDITOR environment variable to vim. This will run vim itself as the normal user, using your normal configuration, on a copy of the file which it will copy back when you exit.

5
  • Nice solution! I'll check this out as well.
    – rubik
    Aug 30, 2012 at 13:25
  • I tried sudoedit /etc/rc.conf and sudo -e /etc/rc.conf and it opens vim, but my ~/.vimrc doesn't get loaded. What I am doing wrong?
    – apparat
    Aug 30, 2012 at 18:45
  • 1
    @apparat Try export EDITOR=vim first - it may be trying to run vi, which I don't know if it loads vimrc even when it is vim.
    – Random832
    Aug 31, 2012 at 1:52
  • Well, I think this is the best answer. Thank you both.
    – rubik
    Aug 31, 2012 at 13:04
  • @Random832 export EDITOR=vim worked. I thought vi isn't installed on my system and is only a symlink to vim. Thanks
    – apparat
    Sep 17, 2012 at 7:47
6

You can use -u to tell vim which rc file to load. e.g.

sudo vim -u ~user/.vimrc /etc/rc.conf

if typing that every time you need to do it is tedious, make an alias:

alias sudovim='sudo vim -u ~user/.vimrc'

Note that vim -u may cause plugins or called rc files to fail if they load other files relative to $HOME - $HOME is now root's home dir, not the user's. This can be solved with e.g. symlinks in root's home dir or by hard-coding absolute paths.

1
  • That's great, thank you. I solved like this: alias svim="HOME=/home/user && sudo vim -u $HOME/.vimrc".
    – rubik
    Aug 30, 2012 at 10:21
1

sudo vim -S /home/user/.vimrc /etc/rc.conf

This is equivalent to:

sudo vim /etc/rc.conf + :source /home/user/.vimrc

and can be aliased as well:

alias svim='sudo vim -S /home/user/.vimrc'

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .