16

[4.13.12-1-ARCH with gnome3 and gdm on Xorg]

I already have set my VISUAL and EDITOR env-vars to vim. Similarly I did try SYSTEMD_EDITOR="vim"; export SYSTEMD_EDITOR in my ~/.bashrc, to no avail.

When modifying unit files in Arch (systemd) via

 $ sudo systemctl edit _unit_ 

I find myself staring at nano. Life is too short and I want vim by all means. How do I do this ?

13

You are setting the variables for your own user, but are running the systemctl command as root (sudo). Therefore, the variables you've set for your user are irrelevant.

To fix this, you can either (but go with 1):

  1. Run sudo with -E so it exports the current environment:

    sudo -E systemctl edit _unit_
    
  2. Add the variable (you only need SYSTEMD_EDITOR for this) to root's ~/.profile:

    export SYSTEMD_EDITOR="/bin/vi" 
    

    Then run with

    sudo -i systemctl edit _unit_ 
    

Finally, note that you need to specify the full path to your editor, not just its name. So it's /bin/vi and not vim.

  • I was already working with sudo -E ... after having modified /root/.bashrc. Had not thought of running sudo as login shell (sudo -i ...) however. Neither are very satisfactory as you need to remember the corresponding flags, but hey... there're worse things, I guess ... Still (maybe it's of interest), I confirm that for some of us: SYSTEMD_EDITOR=/usr/bin/vim; export SYSTEMD_EDITOR (as root) is right. The path all depends on how you got yr vim pkg installed in the 1st place. Plus as I defined PATH for root, vim is enough. There is not just one way to do it. Thanks @terdon. – Cbhihe Dec 2 '17 at 22:28
  • 1
    @cbhihe ah, OK. I tried with just vim and it complained which is why I mentioned it. And hey, I'm an emacs user :) – terdon Dec 2 '17 at 22:57
  • 1
    @Cbhihe believe me it was not an easy choice. I even tested it using vim! It took me three days to close the thing. – terdon Dec 3 '17 at 14:07
18

First method, you can add this line to ~/.bashrc:

export SYSTEMD_EDITOR=vim

And then sudo visudo and add this line:

Defaults  env_keep += "SYSTEMD_EDITOR"

Start new bash session to take effect, then run sudo systemctl edit <foo> as usual.

Second method is use update-alternatives:

Install your desired editor, e.g. vim.gtk3:

$ which editor
editor is /usr/bin/editor
$ sudo update-alternatives --install "$(which editor)" editor "$(which vim.gtk3)" 15

Then choose your desired editor:

$ sudo update-alternatives --config editor
There are 7 choices for the alternative editor (providing /usr/bin/editor).

  Selection    Path                Priority   Status
------------------------------------------------------------
  0            /usr/bin/vim.gtk3    50        auto mode
  1            /bin/ed             -100       manual mode
* 2            /bin/nano            40        manual mode
  3            /usr/bin/code        0         manual mode
  4            /usr/bin/gedit       5         manual mode
  5            /usr/bin/vim.basic   30        manual mode
  6            /usr/bin/vim.gtk3    50        manual mode
  7            /usr/bin/vim.tiny    15        manual mode

Press <enter> to keep the current choice[*], or type selection number: 6
update-alternatives: using /usr/bin/vim.gtk3 to provide /usr/bin/editor (editor) in manual mode

Third method is direct set the EDITOR on runtime:

sudo EDITOR=vim systemctl edit <foo>

The precedence are first method > third method > second method.

Don't try to set "GUI" editor such as gedit because Why don't gksu/gksudo or launching a graphical application with sudo work with Wayland? and Gedit uses 100% of the CPU while editing files

  • 1
    Thanks 林果皞, but I really meant vim, not gedit. – Cbhihe Dec 2 '17 at 22:34
  • @Cbhihe gedit is just an example to proved that even gui editor is working, of course you can use vim with this answer. – 林果皞 Dec 2 '17 at 22:39
  • 1
    林さん, you're right. In fact I implemented yr solution by editing sudoers file with sudo visudo ... I was too quick in accepting the first response. What I was looking for is exactly the modification of the /etc/suddoers file as you proposed it. Thank you and sorry for not choosing yr solution. My bad. – Cbhihe Dec 3 '17 at 14:39
  • [UPDATE] I edited my answer to add advise don't set gedit. – 林果皞 Jul 5 at 20:05
0

I have zero patience with Nano and prefer to kill a mosquito with a cannon.

I delete Nano and place a symlink to vim in it's place.

Done.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.