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. Что может быть причиной этого?


person thekthuser    schedule 28.07.2012    source источник
comment
sudo -E vim следует попытаться запустить Vim с сохраненными переменными среды.   -  person still_dreaming_1    schedule 28.02.2017


Ответы (1)


Пролог

На самом деле вы ответили на свой вопрос, так что это действительно та же проблема, что и раньше. Это вызвано алгоритмом, который Vim использует для поиска своей конфигурации (см. :help initialization). Но я бы не назвал ваше решение правильным. См. :help $VIM для получения информации о том, как вы можете использовать свою конфигурацию в среде sudo (например, будучи 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 генерирует имена файлов с тильдой вместо полных путей.

Первую проблему можно решить, запустив chown или chmod для нового файла просмотра сразу после выполнения команды :mkview. Это должно быть что-то вроде:

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

Но я не знаю хорошего решения для второй проблемы, могу только предложить написать скрипт для преобразования имен файлов в полные пути.

person xaizek    schedule 28.07.2012
comment
Спасибо. Установка viewdir для меня является достаточным решением. Я не вижу ошибок разрешения. Я волновался, что это может плохо работать с git, но, поскольку все сохраняется в .vim/view, это не проблема. - person thekthuser; 28.07.2012