Как я могу заставить .vimrc читать из внешнего файла?


24

Я хотел бы изменить мой, .vimrcчтобы прочитать значение переменной из внешнего файла. Как я могу это сделать?

В частности, мы с другом поделились git-репо с нашими .vimфайлами, но есть несколько небольших различий в том, что мы хотим в наших конфигах. Таким образом, большая часть файла является обычной, но мы используем операторы if, чтобы определить, загружать ли пользовательские разделы, например так:

let whoami = "user2"
if whoami == "user1"
...

После проверки нашей общей .vimrcсистемы контроля за исходным кодом каждый из нас должен изменить let whoamiназначение, чтобы загрузить наш собственный раздел. Вместо этого я хотел бы сохранить отдельный файл, который может отличаться для каждого из нас и из которого vim будет загружать значение этой переменной.

Может быть, под другим углом зрения: vim будет автоматически читать все файлы в моем .vimкаталоге? Если это так, то мы можем поместить туда ссылку с именем username.vim и связать ее с внешним файлом, который будет отличаться для каждого из нас.

Ответы:


35

в вашем основном файле .vimrc:

source otherVimScriptFilePath.vim

затем просто поместите вашу переменную в этот файл:

" otherVimScriptFilePath.vim
let whoami = "user1"

2
К вашему сведению - в моей ситуации было полезно сделать let whoami = ""прямо перед sourceстрокой, чтобы, если не удалось загрузить внешний файл, существовала переменная, и я получил сообщение об ошибке, которое мы настроили ранее для переменной, которая не была установлена.
Натан Лонг

2
@GorillaSandwich: Я использую это для создания моего vimrc на моем компьютере с Windows, поскольку в Windows нет символических ссылок. У меня есть папка SVN, которая содержит это и все мои другие точечные файлы. Так что у меня просто есть _vimrc, который получает реальный источник в папке svn.
Роберт С. Чаччо

@GorillaSandwich: см. Мой ответ для silent! sourceчасти
Акира

6

Использование try / catch

Задав этот вопрос, я предложил другой вариант использования для загрузки внешнего файла: настройки для конкретной машины.

Поскольку мне может понадобиться или не нужно вносить изменения на данном компьютере, я использую try/catchдля загрузки внешнего файла; если такого файла нет, я молча даю сбой.

" If there are any machine-specific tweaks for Vim, load them from the following file.
try 
  source ~/.vimrc_machine_specific
catch
  " No such file? No problem; just ignore it.
endtry 

5

Чтобы ответить на последний вопрос, файлы в ~/.vimне загружаются автоматически, но все файлы в ~/.vim/plugin.


2
и некоторые другие места под ~ / .vim ( after, autoload)
Акира

4

Вы можете заставить ваш ~ / .vimrc загрузить другой файл с помощью :sourceкоманды. Например, вы можете поместить свои уникальные команды в ~ / .myvimrc и загрузить их

source ~/.myvimrc

Или, как вы думали, вы могли бы каждый написать свое имя в этом файле следующим образом:

let user = "user1"

и затем поместите это в ваш ~ / .vimrc:

source ~/.myvimrc
if user == "user1"
    " do this
elseif user == "user2"
    " do that
else
    echo "Invalid user"
endif

Вместо того, чтобы помещать свои имена в файлы, вы можете использовать $ USER, как предложил Акира, или установить, userиспользуя whoamiэто так:

let user = substitute(system('whoami'), '\n', '', '')

Функция substitute () необходима, потому что вывод system () обычно имеет прикрепленный к концу символ \ n.


whoamiне работает на windows
akira

@akira: Да, но GorillaSandwich использует Unix, а не Windows. $ USER также не работает с Windows, по крайней мере, с Windows XP.
garyjohn

Просто говорю, на окнах его $ USERNAME. главное: whoamiпорождает новый процесс, когда вы открываете свой редактор, он должен быть быстрым, а не (бесполезным) повторять работу несколько раз.
Акира

2

имя вошедшего в систему пользователя доступно в переменной среды $ USER. Вы можете легко получить доступ к этой переменной:

:echo $USER

так что просто используйте

execute "silent! source vimrc." . $USER

в вашем vimrc и поместите ваши пользовательские настройки в

vimrc.joe

или как там у вас логин


0

Я не уверен, как выглядит ваш vimrc, так что это может быть неосуществимо, но если есть большие части, которыми вы и ваш друг делитесь, вы можете разбить их на отдельные плагины. Вы можете добавить файлы в ~/.vim/pluginкаталог, чтобы они загружались при запуске. (Они загружены в алфавитном порядке - используйте :scriptnamesдля проверки.)

Таким образом, у каждого из вас может быть совершенно уникальный vimrc, но все ваши общие настройки находятся в плагинах. Если вы разобьете их логически, тогда вам будет легко делиться ими с другими.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.