Почему обновления перезаписывают Vim, собранный из исходников?

$ printf "%s\n" "$Variable1" "$Variable2" "$Variable3"



$ cat file
/Variable1=Value1/Variable2=Value Value Value/Variable3=Value3 Value3/ 
$ source <(tr / "\n" < file | sed -r 's/=(.*)/="\1"/')
$ printf "%s\n" "$Variable1" "$Variable2" "$Variable3"
Value1
Value Value Value
Value3 Value3
1
06.01.2019, 19:49
2 ответа

Я собираю Vim, поэтому он устанавливается в пользовательский каталог. Я вызываю configure следующим образом:

configure --prefix=/usr/local/mybuild/vim --mandir=/usr/local/mybuild/vim/share/man --without-local-dir...

тогда я

make
make test
make install

тогда исполняемый файл /usr/local/mybuild/vim/bin/vim.

Чтобы обновить альтернативные ссылки, я выполнил следующее. Это необходимо только один раз, а не после каждого make install.

update-alternatives --install /usr/bin/editor editor /usr/local/mybuild/vim/bin/vim 1200
update-alternatives --install /usr/bin/eview eview /usr/local/mybuild/vim/bin/vim 1200
update-alternatives --install /usr/bin/evim evim /usr/local/mybuild/vim/bin/vim 1200
update-alternatives --install /usr/bin/ex ex /usr/local/mybuild/vim/bin/vim 1200
update-alternatives --install /usr/bin/gview gview /usr/local/mybuild/vim/bin/vim 1200
update-alternatives --install /usr/bin/gvim gvim /usr/local/mybuild/vim/bin/vim 1200
update-alternatives --install /usr/bin/gvimdiff gvimdiff /usr/local/mybuild/vim/bin/vim 1200
update-alternatives --install /usr/bin/rgview rgview /usr/local/mybuild/vim/bin/vim 1200
update-alternatives --install /usr/bin/rgvim rgvim /usr/local/mybuild/vim/bin/vim 1200
update-alternatives --install /usr/bin/rview rview /usr/local/mybuild/vim/bin/vim 1200
update-alternatives --install /usr/bin/rvim rvim /usr/local/mybuild/vim/bin/vim 1200
update-alternatives --install /usr/bin/vi vi /usr/local/mybuild/vim/bin/vim 1200
update-alternatives --install /usr/bin/view view /usr/local/mybuild/vim/bin/vim 1200
update-alternatives --install /usr/bin/vim vim /usr/local/mybuild/vim/bin/vim 1200
update-alternatives --install /usr/bin/vimdiff vimdiff /usr/local/mybuild/vim/bin/vim 1200

Я выбрал высокий приоритет (1200 ), чтобы установка системы -не заменяла ссылки.

Теперь Vim — это /usr/bin/vim, который является ссылкой на /etc/alternatives/vim, который, в свою очередь, является ссылкой на /usr/local/mybuild/vim/bin/vim. Поэтому вызов vimзапускает мою личную сборку Vim.

Чтобы увидеть, как настроены альтернативы для vim, вы можете запустить update-alternatives --display vim. На моей машине он выдает следующий вывод:

$ update-alternatives --display vim
vim - auto mode
  link best version is /usr/local/mybuild/vim/bin/vim
  link currently points to /usr/local/mybuild/vim/bin/vim
  link vim is /usr/bin/vim
/usr/bin/vim.basic - priority 30
/usr/bin/vim.gtk3 - priority 50
/usr/local/mybuild/vim/bin/vim - priority 1200
1
27.01.2020, 23:31

Произошло одно из двух:

  1. Вы использовали то же имя пакета, что и ваш дистрибутив, но пакет обновлений вашего дистрибутива имеет более позднюю версию. Таким образом, менеджер пакетов с радостью «обновил» вашу пользовательскую сборку до версии вашего дистрибутива. Решение :удалите пакет вашего дистрибутива и используйте другое имя для вашего локального пакета (, напримерlocal-vim). Если вы должны использовать то же имя (, например, из-за зависимостей ), используйте более позднюю версию. Например, в Debian вы можете добавить эпоху.

  2. Вы установили свой vim -из исходного кода -в /usr, и файлы из пакета вашего дистрибутива используют те же имена. Таким образом, ваши файлы были перезаписаны. Менее вероятно, так как многие менеджеры пакетов будут довольно громко кричать об этом... Решение состоит в том, чтобы использовать другой путь (, например /optили /usr/local), или не устанавливать пакет вашего дистрибутива.

1
27.01.2020, 23:31

Теги

Похожие вопросы