22

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

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

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

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

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

6 ответов6

33

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

source otherVimScriptFilePath.vim

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

" otherVimScriptFilePath.vim
let whoami = "user1"
5

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

5

Использование 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 
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.

2

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

:echo $USER

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

execute "silent! source vimrc." . $USER

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

vimrc.joe

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

0

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .