当我使用 Sudo 时,Vim 会使用 Vi 打开——为什么?

当我使用 Sudo 时,Vim 会使用 Vi 打开——为什么?

我使用 neovim。我更改了 .zshrc,以便vim在终端中输入时打开 nvim。

我的配置来自我的 Mac,在那里我很少使用 Sudo(现在我使用 Ubuntu,我一直使用 sudo)。

当我这样做时sudo vim {anything},Vi 打开,或者可能是 Vim,但不是 neovim。

在我的 zshrc 中我有:

alias vim="nvim"
EXPORT EDITOR="nvim"

当我使用时如何激活 nvim 来打开文件sudo

答案1

之所以sudo vim打开,vim是因为vim您的系统设置为通过 Debian 替代系统打开vim.basic。您使用别名为您的个人用户覆盖了此设置,但sudo使用的不是您的用户配置,而是用户的配置root

您不需要为 root 用户设置别名,而是最好设置系统vim指向nvim

执行命令

sudo update-alternatives --config vim

选择选项列表nvim/usr/bin/nvim):

There are 2 choices for the alternative vim (providing /usr/bin/vim).

  Selection    Path                Priority   Status
------------------------------------------------------------
* 0            /usr/bin/vim.basic   30        auto mode
  1            /usr/bin/nvim        30        manual mode
  2            /usr/bin/vim.basic   30        manual mode

Press <enter> to keep the current choice[*], or type selection number: 

在这种情况下,我会输入2

此后,您可以删除别名定义。

答案2

使用 时sudo,您将以不同的用户 (root) 启动另一个 shell 会话。在前一个 shell 中定义的别名和环境变量不会传递到第二个 shell。

您可以使用传递环境变量sudo -E(或者,更好的方法是指定要传递的特定变量而不是整个环境:)sudo --preserve-env=EDITOR,但似乎没有办法传递别名。您必须vim在 root 的.zshrc文件中再次定义别名。

答案3

不要使用sudo vim {anything},而要考虑使用sudoedit {anything}sudo -e {anything}

sudo然后将使用用户EDITOR或环境变量中定义的编辑器。如果您想要一个专门用于 的其他编辑器,VISUAL也可以定义一个变量。SUDO_EDITORsudo

相关内容