3

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

au BufWinLeave ?* mkview
au BufWinEnter ?* silent loadview

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

我知道 /etc/vimrc 正在被读取。我的主题设置在该文件的底部并且工作正常。上周我在安装 vim 环绕插件时遇到了类似的问题。当它安装在 ~/.vim 中时,它仅适用于 vim 文件。为了让它与 sudo 一起工作,我必须在 /usr/share/vim/current 中单独安装它。这可能是什么原因造成的?

4

1 回答 1

4

序言

事实上你回答了你的问题,所以这确实是你以前遇到的同样的问题。它是由 Vim 用来查找其配置的算法引起的(请参阅 参考资料:help initialization)。但我不会称你的解决方案是正确的。有关:help $VIM如何在sudo环境中使用配置的信息(例如 being root),请参阅。

至于你现在的问题。

请参阅文档中的以下引用。: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

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

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

第一个问题可以通过在执行命令后立即运行chownchmod在新的视图文件上解决。:mkview它应该是这样的:

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

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

于 2012-07-28T16:37:59.487 回答