Команды, выполняемые из vim, не распознают псевдонимы команд bash
Я использую 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. Это не сухо.
есть ли лучшее решение?
5 ответов:
Bash не загружает ваш .bashrc, если это не интерактивно. Используйте
:set shellcmdflag=-ic
чтобы сделать ВИМ
:!
оболочка ведет себя как ваша командная строка.
Я знаю, что этот вопрос уже был ранее "ответил", но у меня проблема с ответом. Оболочка не нужно быть установленным к взаимодействующему в Vim. См. этот поток для альтернативного ответа без необходимости выхода из интерактивной оболочки.
Если вы хотите неинтерактивную оболочку (по умолчанию), но расширение псевдонимов bash, поместите свои определения псевдонимов в файл, например .bash_aliases и явно включить расширение псевдонима в этом файле:
shopt -s expand_aliases alias la='ls -la'
затем добавьте это к вашему .vimrc таким образом, файл псевдонимов фактически читается каждый раз, когда вы запускаете команду оболочки из vim:
let $BASH_ENV = "~/.bash_aliases"
это решение было предложено "Якоб". См. ссылку ниже для оригинала. Я тестировал это на Mac OS X 10.9, и он работал безупречно!
обратите внимание, что в зависимости от того, как настроены ваши bash dotfiles, вы можете использовать параметр-l, а не-i. Это запустит оболочку как оболочку входа.
Я знаю, это может быть старый вопрос, но ни один из ответов не работал для меня, как хотелось бы. Итак, для тех, кто пришел сюда из googling и для пользователей (Oh-my -) zsh:
мое решение было так же просто, как копирование .zshrc to .zshenv-согласно http://zsh.sourceforge.net/Intro/intro_3.html:
`.zshenv ' является источником для всех вызовов оболочки, если не установлен параметр-f. Он должен содержать команды для установки пути поиска команд, плюс другие важные переменные среды. '.zshenv' не должен содержать команды, которые производят вывод или предполагают, что оболочка присоединена к tty.
Так
$ cp ~/.zshrc ~/.zshenv
будет делать это.