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. Vim はフル パスではなくチルダを使用してファイル名を生成するため、/rootまたはの下にあるファイルの保存されたビューを渡すことはできません。/home/user

最初の問題は、コマンドを実行した直後に、chownまたは新しいビュー ファイルを実行することで解決できます。次のようになります。chmod:mkview

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

しかし、2番目の問題の適切な解決策はわかりません。ファイル名を完全なパスに変換するスクリプトを作成することしか提案できません。

于 2012-07-28T16:37:59.487 に答える