系统相关
首页 > 系统相关> > linux-vim和sudo vim在openSUSE上使用不同的设置

linux-vim和sudo vim在openSUSE上使用不同的设置

作者:互联网

关闭文件后,我希望vim保存折叠的代码.我已经将以下代码添加到/ etc / vimrc和〜/ .vimrc中:

au BufWinLeave ?* mkview
au BufWinEnter ?* silent loadview

当我以普通用户打开文件(vim文件)时,它可以按预期工作.如果我改为使用sudo vim文件打开,则不会保存折叠的代码.

我知道/ etc / vimrc正在被读取.我的主题设置在该文件的底部,并且运行良好.上周我在安装vim Surround插件时遇到了类似的问题.在〜/ .vim中安装该文件时,它仅适用于vim文件.要使其与sudo一起使用,我必须将其单独安装在/usr/share / vim / current中.是什么原因造成的?

解决方法:

序言

事实上,您回答了您的问题,所以这确实与您以前遇到的问题相同.这是由Vim用于查找其配置的算法引起的(请参见:help初始化).但是,我不会将您的解决方案称为正确的解决方案.有关如何在sudo环境(例如,成为root用户)中使用配置的信息,请参见:help $VIM.

至于你当前的问题.

请参阅文档中的以下引号. :help:mkview:

:mkvie[w][!] [file] ...
        When [file] is omitted or is a number from 1 to 9, a
        name is generated and 'viewdir' prepended.
                    ...

和:help’viewdir’:

 'viewdir' 'vdir'   string (default for ... for Unix: "~/.vim/view", ...

因此,在执行sudo之后,所有视图都由Vim存储在/root/.vim中.

使viewdir指向您的〜/ .vim / view目录,在/root/.vimrc中输入如下内容:

:set viewdir=/home/user/.vim/view

但是,这种方法本身存在一些问题:

>更新root用户保存的视图将导致权限错误.
>您将无法传递/ root或/ home / user下文件的存储视图,因为Vim生成的文件名带有波浪号而不是完整路径.

第一个问题可以通过在执行:mkview命令之后立即在新的视图文件上运行chown或chmod来解决.应该是这样的:

execute '!chown user:group' eval('&viewdir').'/'.substitute(expand('%:p:~'), '/', '+=', 'g').'='

但是我不知道第二个问题的好解决方案,只能建议编写脚本将文件名转换为完整路径.

标签:folding,vim,sudo,linux
来源: https://codeday.me/bug/20191101/1980555.html