.vimrc配置文件在使用';sudo';

.vimrc配置文件在使用';sudo';,vim,vi,Vim,Vi,我对.vimrc文件有问题,问题是它有时被加载,有时不被加载 1 set number 2 syntax on 3 set autoindent 4 map <F2> :!g++ % -Wall -time -O<CR> 5 echo "it works!" 1套编号 2关于 3套自动缩进 4地图:!g++%-Wall-time-O 5 echo“它起作用了!” 我添加了echo来检查它是否加载,当我键入例如vim.vimrc时,它会加载并在终端中

我对.vimrc文件有问题,问题是它有时被加载,有时不被加载

  1 set number
  2 syntax on
  3 set autoindent
  4 map <F2> :!g++ % -Wall -time -O<CR>
  5 echo "it works!"
1套编号
2关于
3套自动缩进
4地图:!g++%-Wall-time-O
5 echo“它起作用了!”

我添加了echo来检查它是否加载,当我键入例如
vim.vimrc
时,它会加载并在终端中显示“它工作”,但当我键入例如
sudo vim test.cpp
时,它不会加载,消息不会显示。我正在使用debian。

sudoVim
导致vim作为根用户运行。这意味着vim在根目录的主目录中查找vimrc,而不是您的主目录

解决这个问题的两个选择是使用

sudo -e <file>
sudo-e
或者将vim配置复制到root的主目录


sudo-e
sudoedit
将文件复制到tmp目录,并允许您对其进行编辑,然后在保存时将其复制回。这比使用
sudo vim
更安全,是解决此问题的推荐方法。

当您使用
sudo
时,vim会在不同的用户下启动(
root
)。由于该用户有不同的主目录,因此会加载另一个
~/.vimrc
(如果该用户没有主目录,则无主目录)。您可以通过多种方式解决此问题:

  • 您可以直接指定
    .vimrc
    sudo vim-u$HOME/.vimrc
    的位置(但这对插件没有帮助)
  • 您可以使用
    sudo-e
    sudoedit
  • 您可以将
    .vimrc
    (以及
    .vim
    插件目录)符号链接到root:
    sudo ln-s$HOME/.vimrc.vimrc;sudo ln-s$HOME/.vim.vim
  • 您可以将root的整个主目录更改为与您的主目录相同(不推荐,因为安全性和访问权限!)

  • 我想在AWS EC2 Amazon AMI实例上使用
    vim

    以上两个答案都没有帮助我获得配色方案或使用
    sudo
    的插件。然而,让它工作的解决方案是:

    .profile
    .bashrc
    或类似文件中添加:

    EDITOR=vim
    VISUAL=$EDITOR
    export EDITOR VISUAL
    

    然后使用
    sudoedit/path/to/file
    编辑文件。您可以使用
    -E
    标志保存环境变量,以便vim可以找到您的vim配置

    向安全策略指示用户希望保留其现有环境变量。如果用户没有保留环境的权限,安全策略可能会返回错误

    像这样使用它:

    sudo -E vim /path/to/file
    
    但是请注意,它不如sudoedit安全,因为您将信任具有root访问权限的vim配置(以及所有插件)。

    sudo-vim/etc/sudoers
    
    更改此行:

    Defaults env_reset
    
    致:


    并重新登录您的shell

    请不要将用户的
    .vimrc
    符号链接到root用户的shell。通过这种方式,恶意程序可以编写命令,这些命令将在每次运行
    sudo vim
    @Yassine:Right时以root用户身份运行。不幸的是,任何与root用户共享用户的Vim配置的机制都有这个问题,即使您手动同步文件。每次都必须检查
    .vimrc
    的全部内容;如果$UID==0 | execute system(…)| endif(或者更模糊的东西)确实可能隐藏在那里,这对我的ubuntu 20.04有效,但不知道为什么。。。任何知道它的人都可以添加更多的解释。
    Defaults env_reset
    
    Defaults !env_reset