Ответ 1
Bash не загружает ваш .bashrc, если он не является интерактивным. Используйте
:set shellcmdflag=-ic
чтобы заставить Vims :!
shell вести себя как ваша командная строка.
Я использую bash для mac, и один из псевдонимов подобен этому
alias gitlog='git --no-pager log -n 20 --pretty=format:%h%x09%an%x09%ad%x09%s --date=short --no-merges'
Однако, когда я делаю
:! gitlog
Я получаю
/bin/bash: gitlog: command not found
Я знаю, что я могу добавить такие псевдонимы в моем .gitconfig
[alias]
co = checkout
st = status
ci = commit
br = branch
df = diff
Однако я не хочу добавлять все мои псевдонимы bash в .gitconfig. Это не СУХОЙ.
Есть ли лучшее решение?
Bash не загружает ваш .bashrc, если он не является интерактивным. Используйте
:set shellcmdflag=-ic
чтобы заставить Vims :!
shell вести себя как ваша командная строка.
Я знаю, что этот вопрос уже был ранее "ответил", но у меня проблема с ответом. Оболочку не нужно устанавливать в интерактивном режиме в Vim. См. Эту тему для альтернативного ответа без выхода из интерактивной оболочки.
Если вы хотите неинтерактивную оболочку (по умолчанию), а расширение псевдонимов bash, поместите свои определения псевдонимов в файл, например..bash_aliases и явно включить расширение alias в этом файле:
shopt -s expand_aliases alias la='ls -la'
Затем добавьте это в свой .vimrc, чтобы файл псевдонимов был фактически прочитан каждый раз, когда вы запускаете команду оболочки из vim:
let $BASH_ENV = "~/.bash_aliases"
Это решение было предложено "Якобом". См. Ссылку ниже для оригинала. Я тестировал это на Mac OS X 10.9, и он работал безупречно!
Обратите внимание, что в зависимости от того, как настроены ваши файлы bash dotfiles, вы можете использовать опцию -l, а не -i. Это запустит оболочку в качестве оболочки входа.
Я не чувствую себя слишком комфортно с настройкой опции -i, так как она имеет некоторое влияние, и я часто использую оболочку из vim. Вместо этого я бы сделал что-то вроде :!bash -c ". ~/.alias; gitlog"
Я знаю, что это может быть старый вопрос, однако ни один из вышеперечисленных ответов не работал у меня по желанию. Итак, для тех, кто пришел сюда из Google и для пользователей (oh-my-) zsh:
Мое решение было таким же простым, как копирование .zshrc в .zshenv - согласно http://zsh.sourceforge.net/Intro/intro_3.html:
`.zshenv 'используется во всех вызовах оболочки, если не задана опция -f. Он должен содержать команды для задания пути поиска команд, а также другие важные переменные среды. `.zshenv 'не должен содержать команды, которые производят вывод или предполагают, что оболочка прикреплена к tty.
Итак, $ cp ~/.zshrc ~/.zshenv
выполнит эту задачу.